実現したいこと
コンボボックスのソースに複数列を表示したく、DrawItemイベント時に複数列を描画する処理を入れました。すると、コンボボックスを3回クリックすると、ドロップダウンが表示されます。描画自体は正しくなされています。コンボボックスを1回のクリックでドロップダウンしたい
発生している問題・分からないこと
一度ドロップダウンすると、そのフォームが閉じない限りは、1クリックでドロップダウン表示されるようになります。
プロパティは設定しています
DropDownStyle: DropDown
DrawMode: OwnerDrawFixed
該当のソースコード
C#
1 private void 分類コード_DrawItem(object sender, DrawItemEventArgs e) 2 { 3 OriginalClass.SetComboBoxAppearance((ComboBox)sender, e, new int[] { 50, 500 }, new string[] { "Display", "Display2" }); 4 分類コード.Invalidate(); 5 // 分類コード.DroppedDown = true; 6 } 7 8drawItemイベントです
public static void SetComboBoxAppearance(ComboBox cb, DrawItemEventArgs e, int[] fieldWidth, String[] fieldName) { DataTable dt = (DataTable)cb.DataSource; Pen p = new Pen(Color.Gray); Brush b = new SolidBrush(e.ForeColor); //背景の描画 e.DrawBackground(); int width = 0; for (int i = 0; i < fieldName.Length; i++) { //テキストの描画 e.Graphics.DrawString(Convert.ToString(dt.Rows[e.Index][fieldName[i]]), e.Font, b, width, e.Bounds.Y); //縦線の描画 e.Graphics.DrawLine(p, width + fieldWidth[i], e.Bounds.Top, width + fieldWidth[i], e.Bounds.Bottom); width = width + fieldWidth[i]; } cb.DropDownWidth = width; //選択状態の描画 if (Convert.ToBoolean(e.State & DrawItemState.Selected)) ControlPaint.DrawFocusRectangle(e.Graphics, e.Bounds); } 描画用の関数です
public void SetComboBox(ComboBoxCell comboBox, string sqlQuery) { try { Connect(); using (SqlCommand command = new SqlCommand(sqlQuery, cn)) { using (SqlDataAdapter adapter = new SqlDataAdapter(command)) { DataTable dataTable = new DataTable(); adapter.Fill(dataTable); comboBox.DataSource = dataTable; comboBox.DisplayMember = "Display"; comboBox.ValueMember = "Value"; comboBox.DataSource = dataTable; } } } catch (Exception ex) { MessageBox.Show("データの読み込み中にエラーが発生しました: " + ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error); } } コンボボックスのセット用関数です。
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
drawItemイベントに、無理やりドロップダウンを入れると、一瞬ドロップダウンが開いてすぐに閉じます。
データソースを1レコードにしてみても同じ現象が起こります。
表示カラムを1列にしても同じ現象が起こります。
補足
C# .net6 winforms
visual studio 2022 Version 17.5.4
他必要な情報はございますか

回答1件
あなたの回答
tips
プレビュー