winforms では、コンボボックスを適切にアクティブにするには、コンボボックスを 2 回クリックする必要があります。1 回目はフォーカスし、2 回目は実際にドロップダウン リストを取得します。
最初のクリックでアクティブになるように、この動作を変更するにはどうすればよいですか?
これは DATAGRIDVIEW コンボボックス用です。
winforms では、コンボボックスを適切にアクティブにするには、コンボボックスを 2 回クリックする必要があります。1 回目はフォーカスし、2 回目は実際にドロップダウン リストを取得します。
最初のクリックでアクティブになるように、この動作を変更するにはどうすればよいですか?
これは DATAGRIDVIEW コンボボックス用です。
これは古い質問だと思いますが、これを行う必要がある可能性のある人に私の解決策を提供すると思いました。
これを正確に行うための答えは見つかりませんでしたが...別の質問に対する答えが見つかりました。
これが私の解決策です:
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;
}
}
private void datagridview_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
datagridview.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
上記のコードは、datagridview の CellEnter イベントに関連付ける必要があります。
これが役立つことを願っています!
編集:行全体が選択されたときのクラッシュを防ぐために、列インデックス チェックを追加しました。
上記の編集をありがとう、Up All Night
edit2:コードは、CellClick イベントではなく、CellEnter に関連付けられるようになりました。
上記の編集をしてくれたHaraldDutchに感謝します
edit3:変更はすぐにコミットされます。これにより、現在のコンボボックス セルを更新するために別のセルをクリックする必要がなくなります。
DataGridView で次のように設定します。
EditMode = EditOnEnter
これはおそらく最も簡単な解決策であり、この質問が尋ねられたときに、SO の多くのユーザーにとって回避策となっています。
編集 :
ここでは、次のことを行います。
編集モードを設定します。
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;
}
これにより、目的の結果が得られます。それができない場合はお知らせください。
グリッド全体を 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... に設定します。
おそらく古い..しかし、必ずReadOnly
プロパティをに設定してくださいfalse
。そうしないと、セルが編集モードに入らないため、EditingControl
nullが返さDroppedDown = true
れ、キャストがNullReferencException
.