2

ボタンを動的に作成するコードを作成しましたが、各ボタンに異なる機能を割り当てるにはどうすればよいですか?

for (int i = 0; i < Buttons.Count; i++)
{
            Button newBtn = new Button();
            newBtn.Content = Buttons[i];
            newBtn.Name = "Button" + i.ToString();
            newBtn.Height = 23;
            stackPanel1.Children.Add(newBtn);
            newBtn.Click += new RoutedEventHandler(newBtn_Click);
}

private void newBtn_Click(object sender, RoutedEventArgs e)
{
        MessageBox.Show("Hello");
}

各ボタンに「Hello」が表示されるようになりましたが、「Hello1」、「Hello2」などにしたいと考えています。

4

5 に答える 5

2
  for (int i = 0; i < Buttons.Count; i++)
    {
                Button newBtn = new Button();
                newBtn.Content = Buttons[i];
                newBtn.Height = 23;
                newBtn.Tag=i;
                stackPanel1.Children.Add(newBtn);
                newBtn.Click += new RoutedEventHandler(newBtn_Click);
    }

private void newBtn_Click(object sender, RoutedEventArgs e)
{
       Button btn=sender as Button;
       int i=(int)btn.Tag;

       switch(i)
       {
         case 0:  /*do something*/ break;
         case 1:  /*do something else*/ break;
         default: /*do something by default*/ break;
       }
}
于 2013-10-22T12:11:49.603 に答える
1

sender関数のパラメーターを確認してくださいnewBtn_Click。クリックされたボタンのインスタンスが含まれている必要があります。ボタンにキャストして名前を確認できます。

private void newBtn_Click(object sender, RoutedEventArgs e)
{
    var btn = sender as Button;
    if(btn != null)
    {
        MessageBox.Show(btn.Name);
    }
}

Name プロパティをチェックしたくない場合は、Tag プロパティ ( http://msdn.microsoft.com/library/system.windows.frameworkelement.tag.aspx ) を使用して、任意のオブジェクトを割り当てることもできます。後でこれを確認してください:

Button newBtn = new Button();
newBtn.Tag = i;

その後、クリック ハンドラーで次のように記述します。

private void newBtn_Click(object sender, RoutedEventArgs e)
{
    var btn = sender as Button;
    if(btn != null)
    {
        if(btn.Tag is int)
            MessageBox.Show(String.Format("Hello{0}", btn.Tag));
    }
}

文字列から何かを抽出するよりも安全なので、タグを使用したソリューションをお勧めします。

于 2013-10-22T12:06:01.070 に答える
1
newBtn.Click += new RoutedEventHandler((s,e) => MessageBox.Show("hallo"+((Button)s).Name);
于 2013-10-22T12:09:58.077 に答える
1
private void newBtn_Click(object sender, RoutedEventArgs e)
{
        var button = sender as Button;
        var buttonNumber = button.Name.Remove(0, 6);

        MessageBox.Show("Hello" + buttonNumber);
}
于 2013-10-22T12:04:43.347 に答える