Winformsでは、コンボボックスを2回クリックして適切にアクティブ化する必要があります。1回目はそれをフォーカスし、2回目は実際にドロップダウンリストを取得します。
最初のクリックでアクティブになるようにこの動作を変更するにはどうすればよいですか?
これは、DATAGRIDVIEWコンボボックス用です。
これは古い質問であることに気づきましたが、これを実現する必要があるかもしれない世界中の誰にでも私のソリューションを提供すると思いました。
私はこれを正確に行うための答えを見つけることができませんでしたが...私は助けてくれた別の質問に対する answer を見つけました。
これは私の解決策です:
private void datagridview_CellEnter(object sender, DataGridViewCellEventArgs e)
{
bool validClick = (e.RowIndex != -1 && e.ColumnIndex != -1); //Make sure the clicked row/column is valid.
var datagridview = sender as DataGridView;
// Check to make sure the cell clicked is the cell containing the combobox
if(datagridview.Columns[e.ColumnIndex] is DataGridViewComboBoxColumn && validClick)
{
datagridview.BeginEdit(true);
((ComboBox)datagridview.EditingControl).DroppedDown = true;
}
}
上記のコードは、datagridviewのCellEnterイベントに関連付ける必要があります。
これがお役に立てば幸いです!
edit:行全体が選択されたときにクラッシュしないように列インデックスのチェックを追加しました。
ありがとう、 p All Night 上記の編集に対して
edit2:コードは、CellClickイベントではなくCellEnterに関連付けられるようになりました。
おかげで、 HaraldDutch 上記の編集
DataGridViewで次を設定します。
EditMode = EditOnEnter
これがおそらく最も簡単な解決策であり、この質問が尋ねられたときのSO.
編集:
here ごとに以下を実行します。
編集モードを設定します:
EditMode = EditOnKeystrokeOrF2
datagridviewのEditingControlShowingイベントを変更します:
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
ComboBox ctl = e.Control as ComboBox;
ctl.Enter -= new EventHandler(ctl_Enter);
ctl.Enter += new EventHandler(ctl_Enter);
}
void ctl_Enter(object sender, EventArgs e)
{
(sender as ComboBox).DroppedDown = true;
}
これにより、目的の結果が得られます。うまくいかない場合はお知らせください。
EditMode
のdatagridview
プロパティのみをEditOnEnter
に変更しましたが、完全に機能しています。
EditMode = EditOnEnter
グリッド全体をEditOnEnterに設定すると、テキスト列にいるときにかなりファンキーなアクティビティを取得できます。ここに私の解決策がありますが、それは自明です。列名がわからない場合は、mousemoveでセルタイプを確認するだけで済みます。
Private Sub GridView_CellMouseMove(sender As Object, e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles GridView.CellMouseMove
Select Case GridView.Columns(e.ColumnIndex).Name
Case "Ad_Edit", "Size_Caption", "Demo_Code"
GridView.EditMode = DataGridViewEditMode.EditOnEnter
Case Else
GridView.EditMode = DataGridViewEditMode.EditOnKeystrokeOrF2
End Select
End Sub
コンボボックスのDropDownStyleプロパティをDropDownList ...に設定します。