40

winforms では、コンボボックスを適切にアクティブにするには、コンボボックスを 2 回クリックする必要があります。1 回目はフォーカスし、2 回目は実際にドロップダウン リストを取得します。

最初のクリックでアクティブになるように、この動作を変更するにはどうすればよいですか?

これは DATAGRIDVIEW コンボボックス用です。

4

6 に答える 6

63

これは古い質問だと思いますが、これを行う必要がある可能性のある人に私の解決策を提供すると思いました。

これを正確に行うための答えは見つかりませんでしたが...別の質問に対する答えが見つかりました。

これが私の解決策です:

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:変更はすぐにコミットされます。これにより、現在のコンボボックス セルを更新するために別のセルをクリックする必要がなくなります。

于 2014-10-23T14:38:11.530 に答える
30

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;
}

これにより、目的の結果が得られます。それができない場合はお知らせください。

于 2012-10-22T05:45:23.953 に答える
1

グリッド全体を 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
于 2013-03-17T18:59:29.077 に答える
0

コンボ ボックスの DropDownStyle プロパティを DropDownList... に設定します。

于 2012-10-22T05:20:17.620 に答える
0

おそらく古い..しかし、必ずReadOnlyプロパティをに設定してくださいfalse。そうしないと、セルが編集モードに入らないため、EditingControlnullが返さDroppedDown = trueれ、キャストがNullReferencException.

于 2020-06-24T10:16:04.417 に答える