スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[VB.NET] DataGridView のコンボボックスのセルをフォーカス時に自動的にドロップダウンさせたい

やりたいことはタイトルそのままです。
DataGridView の中のコンボボックスでフォーカスがあたっただけでは、その内容がドロップ展開されないので、すぐには選べないわけですね。
キーボードでオペレーションをしているときには、すぐにドロップされて上下キーで選択を行いたいところです。

検索してみると、そのままズバリのものが見つかったのですが、

DataGridViewのComboBoxを自動的にドロップダウンさせたいのですが
http://social.msdn.microsoft.com/Forums/ja-JP/vbgeneralja/thread/a1173289-8674-4b68-aca8-ac02559a5c9d

どうもこれがうまくいかない、というか思っていた動きと違う。
読んで理屈はわかるのですが、コンボボックスのセルにフォーカスが当たっただけではEditingControlShowing() のイベントが走ってくれないので、この動作が駆動されないわけです。

いろいろ試行錯誤してみるものの、CellEnter() にいろいろ処理を書くと駆動されて処理には入ってくれるものの、肝心の DroppedDown に true を与えるのがうまくいかない。原因としては、エディットコントロールをうまく操作する手立てがわからないため。

で、またいろいろ調べて答えに限りなく近いものを見つける。

DataGridViewのコンボボックスを1クリックでドロップダウン表示させたい
http://uenomemo.blog31.fc2.com/blog-entry-208.html

このソースは C# なんですかね?(よくわかっていない)
でもミソなところは一発でわかる簡潔なソースなのでほぼ答え発見。

そのままではエディットコントロールを取れないのなら、エディットモードにしてあげればいいじゃない! いいじゃない! じゃない!(残響音)
というわけで、VB.NET のソースで書くとこんな感じです。

Private Sub DataGridView1_CellEnter(ByVal sender As Object, _
ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) _
Handles DataGridView1.CellEnter

'エディットコントロール
Dim edt As DataGridViewComboBoxEditingControl

'コンボボックスであれば処理開始
If TypeName(Me.DataGridView1.Item(e.ColumnIndex, e.RowIndex)) = _
"DataGridViewComboBoxCell" Then
'編集モードにする
Me.DataGridView1.BeginEdit(False)
'編集モードにすることでエディットコントロールを得られる
edt = Me.DataGridView1.EditingControl
'ドロップダウンを真にする
edt.DroppedDown = True
End If

End Sub



追記:拍手コメントお返事(2010/03/03)
お役にたてたなら何よりです。拍手ありがとうございます。
スポンサーサイト

[FC2 BLOG] いきなり category tag must close と表示されてブログが閲覧できなくなる件

さっきなったのでメモ。

正直原因はよくわからんのですが、事象としては、「プラグインの設定」をいじっていると一定の条件でブログが "category tag must close" の文字列のみ表示されるようになって閲覧できないようになります。

少なくとも、私のいまの状態としては「カテゴリ」の一覧を出すプラグインを表示にするとそうなります。というわけでいまは非表示状態。同様の事象が発生しましたら、そのあたりをいじってみてください。
検索フォーム
リンク
最新記事
最新コメント
カテゴリ
RSSリンクの表示
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。