- - PR -
DataGridViewスクロールバーのContextMenu
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-02-27 08:44
.Net Framework 2.0 C#で開発しているのですが、DataGridViewのスクロールバーを右クリックすると、ContextMenuが表示されてしまいます。
右クリックをしてもContextMenuを表示しないようにする方法がありましたら、教えていただけないでしょうか。 宜しくお願いします。 | ||||||||
|
投稿日時: 2008-02-27 10:35
そもそもスクロールバー自体に規定の動きを変更する口が無いので、
DataGridViewが包含しているスクロールバーなら、なおさらですよね。 (DataGridViewからスクロールバーを取得することはできますが。。) 個人的には、スクロールバー上で右クリックすることは少ないと思いますし、 あえて右クリックするということは、メニューを使いたいときかなと。 (つまり、表示されてもいいじゃないか、、と。) この辺りは作りたいモノによって違うでしょうから、一概に言えないとは思いますが、、、。 | ||||||||
|
投稿日時: 2008-02-27 11:02
ContextMenuがNull(Nothing)の場合、規定のメニューが呼ばれるようなので
簡単な例としてですが・・・下記の様にすることで、非表示が出来るかと。 DataGridViewの垂直スクロールバーのContextMenuに設定。(Page_Load等で)
水平スクロールバーはControls(0)でHScrollBarとして取得できます。 ただ、DataGridView.Controlsでコントロール取得の際は Findや型チェックを行った方が安全かと思われ。 [修正] ContextMenuを継承したカスタムContextMenuを設定するよう記述しましたが Itemが空のContextMenuを設定するだけで実現できるので、コード修正しました。 [ メッセージ編集済み 編集者: くまっち 編集日時 2008-02-27 11:09 ] | ||||||||
|
投稿日時: 2008-02-27 11:23
!! 試してみたら出来ました。 素晴らしいっす。
と強引に取ってみたけど、DataGridViewのControlsから探すのがいいですね。 | ||||||||
|
投稿日時: 2008-02-27 14:12
みなさん、ありがとうございます。
Controlsから取得してみます。 | ||||||||
|
投稿日時: 2008-02-27 15:42
ControlsからVScrollBarを取得してContextMenuをNewしたら、右クリックで表示されなくなりました。
でも、右クリックのまま、ドラッグ&ドロップすると、ショートカットが表示されてしまいます。 TextBoxとかでは、ShortCutsEnableをFalseにすることによりショートカットを非表示にできたのですが、ScrollBarでは無理なのでしょうか。 | ||||||||
|
投稿日時: 2008-02-27 16:46
確かに右クリックしたままドロップしたらContextMenuが表示されますね
ScrollBarを継承したりなどすれば、WndProcメソッドでメッセージをフックして 表示させないようにすることはできますが、現状は厳しそうですね、、、。 | ||||||||
|
投稿日時: 2008-02-27 20:05
うーん・・・厄介ですね。
右D&D時は、また別のContextMenuを呼び出していますね、、、 (どうも規定ContextMenuしか呼び出していないような) 実現させるには、ガルマ・ザビさんの提言の通り、WndProcにて WM_RMOUSEDOWNを捕らえて・・って事になるのではないかと思うのですが このアプローチはDataGridViewから、テコ入れが必要で相当な苦労をしますね。 (そして得られる物が少ない←ガルマ・ザビさん最初のレスの通り) そこで・・・・・・・
上記はPage_Loadなどで。 あと、下記メソッドを宣言。
・・・かなり強引ですが、よろしいですかね。 [コード修正] 見難かったので改行等にて整形 [ メッセージ編集済み 編集者: くまっち 編集日時 2008-02-27 20:15 ] |