C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: ToolStripMenuItemからContextMenu


(過去ログ 127 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■75689 / inTopicNo.1)  ToolStripMenuItemからContextMenu
  
□投稿者/ やんまー (3回)-(2015/04/24(Fri) 01:12:01)

分類:[VB.NET/VB2005 以降] 

2015/04/24(Fri) 01:12:49 編集(投稿者)

ToolStripMenuItemをクリックした時のイベントから、属しているContextMenuStripを取得する方法はありませんか?

DataGridViewを右クリックして実行したToolStripMenuItem1で、DataGridViewに処理を行おうとしています。

  Sub ToolStripMenuItem1Click(sender As Object, e As EventArgs)

そこで、このToolStripMenuItem1ClickのSenderから
DataGridViewが取得できれば、汎用性のあるコードになるかと思い、調べています。
しかし、どうやればいいのかわかりません。


ToolStripMenuItemが属しているContextMenuStripがわかっていれば

  Dim source As Control = ContextMenuStrip1.SourceControl

のようにしてDataGridViewが取得できることがわかりました。
でも、これだと、「ContextMenuStrip1」を明示しなければならず汎用性に欠けるような気がします。


要は、表題の通り、
ToolStripMenuItemから属するContextMenuStripを取得できれば解決のようなきがするのですが、
色々検索しても答えが出てきません・・・。


もしかして、単純すぎて見つからないのでしょうか・・・。

引用返信 編集キー/
■75690 / inTopicNo.2)  Re[1]: ToolStripMenuItemからContextMenu
□投稿者/ Hongliang (304回)-(2015/04/24(Fri) 03:26:48)
ContextMenuStripのDropDownItemsに直接格納されているToolStripMenuItemであれば、Ownerプロパティでそのアイテムが属するContextMenuStripを取得できます。

ただし、ToolStripMenuItemがContextMenuStripの直接の子では無く、直接の子の子孫である場合は問題があります。
まず、OwnerプロパティはContextMenuStripではなく、自身を表示するToolStripDropDownMenuを返します。
また、OwnerItemプロパティでOwnerItemがnullのアイテム(つまりContextMenuStripの直接の子アイテム)までアイテムツリーをさかのぼればContextMenuStripを参照できますが、不思議なことにこのときはSourceControlはnullを返します。
回避策としては、アイテムクリック時に探すのでは無く、ContextMenuStripのOpeningイベントでSourceControlを保存するようにします。
http://dobon.net/vb/dotnet/control/cmsourcecontrol.html
引用返信 編集キー/
■75697 / inTopicNo.3)  Re[2]: ToolStripMenuItemからContextMenu
□投稿者/ やんまー (4回)-(2015/04/24(Fri) 13:08:12)
Hongliang さん

ありがとうございます!!!
ownerでバッチリでした!!

Dim dgv As DataGridView = sender.owner.SourceControl


教えていただかなかったら永遠にわからなかったと思います^^;感謝いたします!!



No75690 (Hongliang さん) に返信
> ContextMenuStripのDropDownItemsに直接格納されているToolStripMenuItemであれば、Ownerプロパティでそのアイテムが属するContextMenuStripを取得できます。
>
> ただし、ToolStripMenuItemがContextMenuStripの直接の子では無く、直接の子の子孫である場合は問題があります。
> まず、OwnerプロパティはContextMenuStripではなく、自身を表示するToolStripDropDownMenuを返します。
> また、OwnerItemプロパティでOwnerItemがnullのアイテム(つまりContextMenuStripの直接の子アイテム)までアイテムツリーをさかのぼればContextMenuStripを参照できますが、不思議なことにこのときはSourceControlはnullを返します。
> 回避策としては、アイテムクリック時に探すのでは無く、ContextMenuStripのOpeningイベントでSourceControlを保存するようにします。
> http://dobon.net/vb/dotnet/control/cmsourcecontrol.html
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -