- 題名: メニューバーのアイテム
- 日時: 2010/03/18 10:32:04
- ID: 26573
- この記事の返信元:
- (なし)
- この記事への返信:
- [26575] Re[1]: メニューバーのアイテム2010/03/18 12:48:28
- ツリーを表示
masa さんこんにちは、おのでらです。 まず、メニューのテキストを変更する際に MouseDown イベントを使用しているようですが、 引数として渡されている「sender」にはメニューアイテムのインスタンスが設定されています。 Object 型として渡されていますが、ToolStripMenuItem 型にキャストすれば メニューアイテムのテキストにアクセスすることができます。 private: System::Void ToolStripMenuItem_MouseDown(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) { ToolStripMenuItem^ item = (ToolStripMenuItem^)sender; if (e->Button == System::Windows::Forms::MouseButtons::Right) { item->Text = "変ったよ!"; } } このメソッドをテキストを変更したいメニューアイテムの「MouseDown」イベントに 設定してあげれば、各メニューに対してひとつのメソッドで処理することが可能です。 // MouseDown イベントの登録(メニューの変数や数は必要に応じて) this->FileToolStripMenuItem->MouseDown += gcnew System::Windows::Forms::MouseEventHandler(this, &Form1::ToolStripMenuItem_MouseDown); this->NewToolStripMenuItem->MouseDown += gcnew System::Windows::Forms::MouseEventHandler(this, &Form1::ToolStripMenuItem_MouseDown); ファイルメニュー直下のアイテムのみであれば下のようなイベントの設定の仕方もありますね。 for (int i = 0; i < this->FileToolStripMenuItem->DropDownItems->Count; i++) { ToolStripItem^ item = this->FileToolStripMenuItem->DropDownItems[i]; item->MouseDown += gcnew System::Windows::Forms::MouseEventHandler(this, &Form1::ToolStripMenuItem_MouseDown); } 一括登録の仕方については設定対象メニューの数に合わせて考えてみてください^^
分類:[.NET]
現在、私のソフトのメニューのテキストを変更できるツールを作っています。
メニューのアイテムを右クリックするとテキストの変更ウィンドウが開きます。
VisualC++のコードですが、C#とあまり変わらないのでお願いします。
(->は.と同じですし、::も.と同じです。)
現在の方法は項目一つ一つにMouseDownイベントをつくり、
if (e->Button == System::Windows::Forms::MouseButtons::Right) {//右クリックなら
Form2^ form2 = gcnew Form2();//設定画面を作成
form2->textBox1->Text = this->FileMenu->Text;//設定画面のテキストを現在のテキストに
form2->ShowDialog();//設定画面を表示
this->FileMenu->Text = form2->textBox1->Text;//メニューのテキストを設定画面で変更したものにする
}
としています。
しかし、これをすべてのメニューのアイテムに作るのはとても大変です。
メニューのアイテムによって変わるのは
this->FileMenu->Textの部分だけです。これがメニューのアイテムのNameに変わるだけです。
長くなってしまいましたが、
どのメニューのアイテムで右クリックされたか知ることができれば、
このような面倒な作業をしなくてすみます。
どなたか分かる方回答をお願いします。