2012-02-19 7 views
0

あなたはシステムメニューを見てきたように、彼らはこのような構文を持っている:システムメニューと各国代表

MainMenu mainMenu = new MainMenu(); 
MenuItem fileMenuItem = new MenuItem("File"); 

mainMenu.MenuItems.Add(fileMenuItem); 
this.Menu = mainMenu; 

Clickイベントのイベントを書き込むには、私はこのような何かを行うことができますか?どうやって ?

fileMenuItem.MenuItems.Add(new MenuItem("New", 
MyMenuItemEventArgs(this, new MyMenuItemEventArgs("New"))) 

だからMyMenuItemEventArgsでは、私はこのケースoperates.in私は「新規」合格した一つの機能に私のopearionを渡すことができます。

私は10人以上のハンドラを書きたくないので、多くのイベント引数を持つハンドラを1つだけ書きたいと思います。

+1

ワイヤーのメニュー項目のすべてが同じハンドラメソッドを使用するためには、その後、使用を 'どのメニュー項目がイベントを発生させたかを区別するために「送信者」パラメータを使用します。 'System.Object'から' MenuItem'にキャストします。 –

答えて

1

新しいmenuItemをインスタンス化し、次にClick属性を使用してハンドラを追加する必要があります。

MenuItem menuItem1=new MenuItem("Item text"); 

menuItem1.Click += new System.EventHandler(handler_method); 

その後、あなたのメニューに追加することができます

fileMenuItem.MenuItems.Add(menuItem1); 
+0

私は多くのハンドラメソッドを作りたくありません。私は多くのイベント引数を持つハンドラメソッドを1つ使用したいだけです! – sap

+0

多くのボタンが押されているハンドラを1つ持っている場合、どのボタンが押されたかを示すパラメータとして渡されている "送信者"オブジェクトを使用する必要があります。その方法で、グローバルハンドラで、押されているボタンに基づいて実行するアクションを判断できます。これがあなたが達成したいと思っているものなら。各ボタンに必要な情報を割り当てることができます(たとえば、そのボタンに「新規」を割り当てた例のように)。 –

1

EventArgsパラメータの値は、この場合、MenuItemあるイベントを、焼成オブジェクトによって提供されます。そのため、1つのハンドラで複数のMenuItemオブジェクトのOnClickイベントを処理する唯一の方法は、senderパラメータを使用することです。

var mainMenu = new MainMenu(); 
var fileMenuItem = new MenuItem("file"); 
var openMenuItem = new MenuItem("open", OnClick); 
var exitMenuItem = new MenuItem("exit", OnClick); 

openMenuItem.Name = "open"; 
exitMenuItem.Name = "exit"; 

fileMenuItem.MenuItems.Add(openMenuItem); 
fileMenuItem.MenuItems.Add(exitMenuItem); 

mainMenu.MenuItems.Add(fileMenuItem); 
this.Menu = mainMenu; 

そして、イベントハンドラで

:あなたはこのようないくつかのコードを使用してクリックされたメニュー項目をチェックでき

private void OnClick(object sender, EventArgs eventArgs) 
{ 
    var senderName = ((MenuItem) sender).Name; 
    if (senderName == "open") 
    { 
     //open was clicked 
    } 
    else if (senderName == "exit") 
    { 
     //exit was clicked 
    } 
} 
関連する問題