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

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

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

コンテキストメニューを実行する方法

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

■91983 / inTopicNo.1)  コンテキストメニューを実行する方法
  
□投稿者/ CCCO (4回)-(2019/08/15(Thu) 20:44:19)

分類:[.NET 全般] 

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load

        Dim Menu1 As New ToolStripMenuItem

        Menu1.DropDownItems.Add("test1", Nothing, Sub(sender2, e2) test(sender2, 1))
        Menu1.DropDownItems.Add("test2", Nothing, Sub(sender2, e2) test(sender2, 2))
        Menu1.DropDownItems.Add("test3", Nothing, Sub(sender2, e2) test(sender2, 3))

        Me.ContextMenuStrip1.Items.Add(Menu1)

        PictureBox1.ContextMenuStrip = Me.ContextMenuStrip1


    End Sub


というコードでコンテキストメニューを作成したとします。

次に
("test2", Nothing, Sub(sender2, e2) test(sender2, 2))
をプログラム上からクリック実行したいのですが、
どのようにすれば良いですか?

sender2というのはプログラム上で
どのように生成すれば良いですか?



引用返信 編集キー/
■91984 / inTopicNo.2)  Re[1]: コンテキストメニューを実行する方法
□投稿者/ Azulean (1080回)-(2019/08/15(Thu) 21:40:27)
2019/08/15(Thu) 21:42:31 編集(投稿者)

No91983 (CCCO さん) に返信
> 次に
> ("test2", Nothing, Sub(sender2, e2) test(sender2, 2))
> をプログラム上からクリック実行したいのですが、
> どのようにすれば良いですか?

test2 が No91981No91982 のコードである(中で sender を元に分岐している)なら、test2(Me.ContextMenuStrip1.Items(1), 2) ですかねぇ…。

メニューの Click イベントにおける sender はそのメニューアイテムのオブジェクトになっているので、ContextMenuStrip1 から取り出さないといけないわけです。
(もしくは、フィールド変数に別途持っておくか)


> sender2というのはプログラム上で
> どのように生成すれば良いですか?

プログラマ相手に「生成」というと「New して新しいオブジェクトを作り出すこと」をイメージさせるので、間違った認識・理解になってしまいます。
今回の質問では「どのようにコードを書けば良いですか」の方が良いと思います。
引用返信 編集キー/
■91985 / inTopicNo.3)  Re[2]: コンテキストメニューを実行する方法
□投稿者/ CCCO (5回)-(2019/08/15(Thu) 21:47:52)
ありがとうございます。

この場合、
ContextMenuStripの下層にあるToolStripMenuItemの中のアイテムを指定する必要がありますが
どのようにコードを書けば良いですか?

引用返信 編集キー/
■91986 / inTopicNo.4)  Re[3]: コンテキストメニューを実行する方法
□投稿者/ Azulean (1081回)-(2019/08/16(Fri) 07:31:19)
No91985 (CCCO さん) に返信
> ContextMenuStripの下層にあるToolStripMenuItemの中のアイテムを指定する必要がありますが
> どのようにコードを書けば良いですか?

すみません、階層を見間違えていましたね…。
CType(ContextMenuStrip1.Items(0), ToolStripMenuItem).DropDownItems(1) ではどうですか?
引用返信 編集キー/
■91996 / inTopicNo.5)  Re[4]: コンテキストメニューを実行する方法
□投稿者/ CCCO (7回)-(2019/08/16(Fri) 11:51:52)
ありがとうございます。

しかし


エラー BC30057 'Public Overloads ReadOnly Property DropDownItems As ToolStripItemCollection' の引数が多すぎます。

というエラーが出てしまうのですが
DropDownItems(1) で1を指定しているのがまずいようです。

DropDownItemというというプロパティもないようですし
どのようにしたら良いのでしょうか?


引用返信 編集キー/
■91998 / inTopicNo.6)  Re[5]: コンテキストメニューを実行する方法
□投稿者/ とっちゃん (618回)-(2019/08/16(Fri) 12:14:29)
No91996 (CCCO さん) に返信
> というエラーが出てしまうのですが
> DropDownItems(1) で1を指定しているのがまずいようです。
>
> DropDownItemというというプロパティもないようですし
> どのようにしたら良いのでしょうか?
>
>
DropDownItems プロパティは ToolStripMenuItem の親クラスの ToolStripDropDownItem クラスのメンバーです。
コレクションクラスの ToolStripItemCollection を返すので
CType(ContextMenuStrip1.Items(0), ToolStripMenuItem).DropDownItems.Item(1)
かな?

引用返信 編集キー/
■92003 / inTopicNo.7)  Re[1]: コンテキストメニューを実行する方法
□投稿者/ shu (1188回)-(2019/08/16(Fri) 16:29:38)
No91983 (CCCO さん) に返信
> Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
>
> Dim Menu1 As New ToolStripMenuItem
>
> Menu1.DropDownItems.Add("test1", Nothing, Sub(sender2, e2) test(sender2, 1))
> Menu1.DropDownItems.Add("test2", Nothing, Sub(sender2, e2) test(sender2, 2))
> Menu1.DropDownItems.Add("test3", Nothing, Sub(sender2, e2) test(sender2, 3))
>
> Me.ContextMenuStrip1.Items.Add(Menu1)
>
> PictureBox1.ContextMenuStrip = Me.ContextMenuStrip1
>
>
> End Sub
>
>
> というコードでコンテキストメニューを作成したとします。
>
> 次に
> ("test2", Nothing, Sub(sender2, e2) test(sender2, 2))
> をプログラム上からクリック実行したいのですが、
> どのようにすれば良いですか?
この実行したいものはどういう判断で決まるものですか?
それにより変わると思いますが、
何らかの判断により該当するアイテムが分かればそれを、Item1という変数に設定
したとして、
Item1.PerformClick()
で実行出来ます。


引用返信 編集キー/
■92004 / inTopicNo.8)  Re[2]: コンテキストメニューを実行する方法
□投稿者/ CCCO (9回)-(2019/08/16(Fri) 17:45:48)
> Item1.PerformClick()

まさにこれでした

どうもありがとうございました。

解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


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

このトピックに書きこむ