【问题标题】:How do I access a dynamic button's event handler? Visual Studio 2015 WPF如何访问动态按钮的事件处理程序?视觉工作室 2015 WPF
【发布时间】:2023-04-09 22:08:01
【问题描述】:

我正在尝试再次学习 C#,我想知道用什么方法来实现我需要的结果,这是我的代码,它会在我单击按钮时创建标签和按钮。

    private void button_Copy_Click(object sender, RoutedEventArgs e)
    {
        counter++;

        Label lbl = new Label();
        lbl.Content = counter.ToString();
        lbl.HorizontalAlignment = HorizontalAlignment.Center;
        lbl.VerticalAlignment = VerticalAlignment.Center;
        lbl.FontSize = 50;

        Button bt = new Button();
        bt.Content = "X";
        bt.HorizontalAlignment = HorizontalAlignment.Right;
        bt.VerticalAlignment = VerticalAlignment.Top;

        grid.Children.Add(lbl);
        grid.Children.Add(bt);
    }

但是,由于单击事件是动态创建的,因此我在确定将单击事件放置在何处时遇到了问题。我想要发生的是当我单击 X 按钮时,它将删除我单击的特定标签和 x 按钮。因此,如果我单击主按钮两次,它将在左上角显示一个带有 x 的 1,在左上角显示一个带有 x 的 2,当我单击 2 的 x 时,它将删除带有 2 和 x 的标签2 的按钮。

【问题讨论】:

  • 改用 ListView 和自定义模板,这样您就不必以编程方式创建和添加新控件(当您向 ListView 添加新项目时,它们会为您创建)。

标签: c# wpf visual-studio visual-studio-2015


【解决方案1】:

只需为按钮添加一个事件处理程序:

private void button_Copy_Click(object sender, RoutedEventArgs e)
{
    counter++;

    Label lbl = new Label();
    lbl.Content = counter.ToString();
    lbl.HorizontalAlignment = HorizontalAlignment.Center;
    lbl.VerticalAlignment = VerticalAlignment.Center;
    lbl.FontSize = 50;

    Button bt = new Button();
    bt.Content = "X";
    bt.HorizontalAlignment = HorizontalAlignment.Right;
    bt.VerticalAlignment = VerticalAlignment.Top;

    // add subscriber
    bt.Click += Button_Click;

    grid.Children.Add(lbl);
    grid.Children.Add(bt);
}

// On click event for button
private void Button_Click(object sender, EventArgs e) 
{
    // do whatever when button is clicked

    // this is a reference to the button that was clicked,
    // you can delete it here or do whatever with it
    Button buttonClicked = (Button)sender;
}

现在,当单击按钮时,“Button_Click”将被触发。

【讨论】:

    【解决方案2】:

    您可以像这样向按钮的Click添加处理程序

    bt.Click += (a,b) => grid.Children.Remove( a );
    

    但您确实应该使用 ListView 和模板,正如 slugster 建议的那样。

    【讨论】:

      猜你喜欢
      • 2016-06-02
      • 1970-01-01
      • 1970-01-01
      • 2016-02-11
      • 1970-01-01
      • 2016-02-05
      • 2016-12-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多