【问题标题】:Click event handlering from form to usercontrol从表单到用户控件的单击事件处理
【发布时间】:2021-10-14 02:14:47
【问题描述】:

大家好,我想问一下如何转发事件处理程序来点击动态生成按钮。这个按钮我生成到 Form1.cs 中的 flowlayout 面板 我在有 2 个按钮的地方生成用户控件“btnMini.cs”。 如何将这些按钮的单击事件从 Form1 转发到 UserControl - “btnMini.cs”? 我想在单击按钮转发并获取 messagebox.show 之后“按钮的父名称”在哪里,其他显示“按钮名称”。我怎样才能从 Form1 中做到这一点?

Button btn = (Button)sender;
MessageBox.Show("button name: " + btn.Name + ", Parent name control: " + btn.Parent.Name);

我试试这个,但是当我需要在单击后在 Form1 中创建 MessageBox.Show 时,我不知道该怎么做。... 谢谢你的建议????????。我有点绝望:/所以非常感谢身体的提示。 代码:

public partial class btnMini : UserControl
{
    public btnMini()
    {
        InitializeComponent();
    }
    
    [Browsable(true)]
    [Category("ActionClick")]
    [Description("Invoke when user clicks on button")]
    public event EventHandler ButtonClick;//ok
   
    private void TestingClicks(object sender, EventArgs e)
    {
        ButtonClick?.Invoke(sender, e);
    }
    
    public void OnClick(object sender, EventArgs e)
    {
        TestingClicks(sender, e);           
    }
}

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    
    #region variables
    
    private int counter = 1;
    private btnMini btnM = new btnMini();
    private List<Control> control = new List<Control>();
    
    //public event EventHandler ClickTest;
    
    #endregion

    //Using this method I adding userControl to list
    private void button1_Click(object sender, EventArgs e)
    {
        //Button btn = (Button)sender;
        //MessageBox.Show("Click btn: " + btn.Name + ", Parent name control: " + btn.Parent.Name); //Here I tried do this for get Name of parent and button UserControl - btnMini.cs

        btnM = new btnMini();
        btnM.Name = "btn_" + counter;
        btnM.Click += (s, ev) =>
        {
            Button b = (Button)sender;
            //string parent = button?.Parent?.Name;
            MessageBox.Show(b.Name.ToString());
        };
        counter++;
        control.Add(btnM);
    }
    
    //method for adding UserControl from List.
    private void button2_Click(object sender, EventArgs e)
    {
        foreach (var b in control)
        {
            this.flowLayoutPanel1.Controls.Add(b);
        }
    }
}

【问题讨论】:

    标签: c# winforms event-handling user-controls dynamically-generated


    【解决方案1】:
    btnM.ButtonClick += (sender, e) =>
    {
        Button btn = (Button)sender;
        MessageBox.Show("Parent name: " + btn.Parent.Name + ", button name: " + btn.Name);
    };
    

    经过测试和玩代码终于可以工作了。

    【讨论】:

      猜你喜欢
      • 2013-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多