【发布时间】: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