Top > プログラミング > .NET Tips> DataGridViewのコンボボックスのドロップダウンリストが一回のクリックで表示されるようにする

DataGridViewのコンボボックスのドロップダウンリストが一回のクリックで表示されるようにする」への評価、コメント

評価

良い / 悪い = 26 / 3 (「良い」の割合 = 0.897 , 人気度 = 1.312

評価する

コメント一覧


通常のコメント
匿名 2022/10/3 (Mon) 14:00:37
EnterイベントのF4だとなぜか動作しないので
ALT+DOWN
SendKeys.Send("%{DOWN}")
で期待動作となりました

通常のコメント
ger531 2022/05/21 (Sat) 07:56:15
うまく動かなかったのでこうしてみました。

private void dataGridView3_CellClick(object sender, DataGridViewCellEventArgs e) {
if (e.ColumnIndex == 7) {
SendKeys.Send("{F4}");
}
}

通常のコメント
匿名 2017/06/9 (Fri) 11:43:53
Alt+クリックでダイアログが閉じます。

通常のコメント
匿名 2016/11/1 (Tue) 12:59:02
DataGridView以外のコントロールがフォーカスされた状態から、
DataGridViewComboBoxColumn列のセルをクリックして
フォーカス移動した場合、
元のカレントセルのCellEnterイベント→クリックしたセルのCellEnterイベント
と発生する(元のカレントセルをクリックした場合は1回だけ発生)ので、
DataGridViewのEnterイベントでCurrentCellプロパティの値をnullに
する処理を入れた方が安定するように思います。

通常のコメント
匿名 2015/06/4 (Thu) 12:08:08
私のところでは、F4キーを別の用途に使いたいときに競合してしまったので、
F4キーを創出する代わりに、明示的に編集モードに切り替えて、
編集コントロールを取リ出してドロップダウンを出させる方法に
切り替えてみました。

dgv.BeginEdit(false);
var edt = dataGridView.EditingControl as DataGridViewComboBoxEditingControl;
edt.DroppedDown = true;

通常のコメント
zou 2011/10/27 (Thu) 16:00:54
BS Del キーで編集モードに入っていなくても他のキーと同じ用に動いてくれなくて困っていました。
キーイベントを補足してSendKeys.Send(" {DEL}")でできました。F2ではなくスペースで編集モードに入っています。
きっかけありがとうございました。

通常のコメント
げえちゃん 2010/10/1 (Fri) 16:36:09
マウス左ボタンが押されていない時の間違いでした。

通常のコメント
げえちゃん 2010/10/1 (Fri) 16:31:55
データグリッドビューを使っていて妙に疲れるのがこの現象のせいですよね。
因みにマウス左ボタンが押されている時にSendKeyを止めるのが好みです。
なお、他にも疲れる動作があります。
コンボのテキスト部クリックおよびテキストボックスクリック時に非選択でそこから挿入できるようにならいかと格闘中です。

通常のコメント
chome 2010/09/7 (Tue) 16:35:59
訂正
dgv.Columns(e.ColumnIndex) Is DataGridViewComboBoxColumn

こちらでもうまくいきました。

評価の理由
chome 2010/09/7 (Tue) 16:30:39
評価:良い
いつもお世話になってます。

たしかに mirrorさん のとおりですね。

If dgv.Columns(e.ColumnIndex).CellType.Name = "DataGridViewComboBoxCell" Then

とするとうまくいきました。

通常のコメント
ゆーすけ 2010/07/29 (Thu) 21:35:00
CellClickの中でSendKeys.SendWait("{F4}")したら自然な動きでエラーにもならなくなりました。

通常のコメント
ゆーすけ 2010/07/29 (Thu) 21:15:00
ActiveXにラップしたDataGridViewの中ではSendで例外が出てSendKeys.SendWaitを使えと言われました。
そうすると、一回の操作はうまくいきますが、Tabキー長押しでセルのフォーカスを速く動かすと、ComboBoxが開くところで以下のInvaidOperationExceptionが発生してしまいます。


「アプリケーションのコンポーネントで、ハンドルされていない例外が発生しました。[継続] をクリックすると、アプリケーションはこのエラーを無視し、続行しようとします。
SetCurrentCellAddressCore 関数への再入呼び出しを生じるため、この操作は有効ではありません。。」


C#でもSendWaitを使うと例外が出るんですが、catchすれば無視できます。ActiveXだとハンドルされていない例外になってしまうんですよね。
うーむ、なんとしたものか・・・

評価の理由
いつもお世話になっています 2010/03/29 (Mon) 09:52:49
評価:良い
面倒な3回クリックが1回で済むようになり助かっています。
ありがとうございました。

評価の理由
fumika 2009/11/11 (Wed) 18:48:46
評価:良い
わかりやすい記事、ありがとうございました。

通常のコメント
sakura 2009/09/18 (Fri) 09:57:12
なぜF4なのでしょうか?
F4にはどういった意味が。。?

評価の理由
たらたん 2009/04/3 (Fri) 03:16:41
評価:良い
プログラム例が簡潔で理解しやすかったです。

.NET Frameworkのバージョンによる違い
mirror 2008/02/20 (Wed) 19:51:28
dgv.Columns(e.ColumnIndex).Name = "" となるため、条件式が成り立たない。
下記のコードで意図した(?)動作となりました。

If dgv.Columns(e.ColumnIndex).CellType.Name = "DataGridViewComboBoxCell" Then
SendKeys.Send("{F4}")
End If

コメントの投稿

[説明]