web-dev-qa-db-ja.com

最初のクリックでコンボボックスをアクティブにする方法(Datagridview)

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

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

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

33
l46kok

これは古い質問であることに気づきましたが、これを実現する必要があるかもしれない世界中の誰にでも私のソリューションを提供すると思いました。

私はこれを正確に行うための答えを見つけることができませんでしたが...私は助けてくれた別の質問に対する 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 上記の編集

53
Jeff Click

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

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

27
KreepN

EditModedatagridviewプロパティのみをEditOnEnterに変更しましたが、完全に機能しています。

EditMode  = EditOnEnter
2
Yudit

グリッド全体を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
1
jefferp

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

0
Abdul Majid