通过用户控件调用 C# 窗体上的按钮
Call a button on a C# form through usercontrol
我创建了一个带有一些按钮的用户控件。当您单击 UserControl 中的按钮时,按钮的背景色会发生变化:
private void button1(object sender, EventArgs e)
{
Control ctrl = ((Control)sender);
switch (ctrl.BackColor.Name)
{
case "Crimson": ctrl.BackColor = Color.Blue; break;
case "Green": ctrl.BackColor = Color.Orange; break;
case "Orange": ctrl.BackColor = Color.Crimson; break;
case "Blue": ctrl.BackColor = Color.Green; break;
default: ctrl.BackColor = Color.Crimson; break;
}
}
在我的表单上是另一个启用的按钮 = false;
因此,当 UserControl 中的颜色发生变化时,我希望表单上的按钮启用 = true;
在您的 UserControl
中创建事件处理程序 ColorChanged
并在颜色改变时触发该事件。当事件触发时,在您的表单中添加侦听器和适当的代码。
所以,在你的控制下,EventHandler
,像这样
public partial class UserControl1 : UserControl
{
public EventHandler ColorChanged;
然后,点击按钮时触发事件,如下所示:
private void button1(object sender, EventArgs e)
{
ColorChanged?.Invoke(sender, e);
//rest of your code...
}
在您的表单中,添加侦听器:
userControl.ColorChanged += new EventHandler(UserControl_ColorChanged)
并添加将要执行的方法并启用按钮...
private void UserControl_ColorChanged(object sender, EventArgs e)
{
//enable button here
}
您可以使用 Event Aggregator 并使用户控件中的按钮将发布一个事件并让您 window 处理该事件
您可以使用此方法获取对父表单的引用
Form parentFrm = (this.Parent as Form);
然后您可以访问父窗体上的控件,方法是创建 public 或按名称查找控件
Button aButton = (Button)parentFrm.Controls["btnName"];
if (aButton != null)
aButton.Enabled = true;
我是这样修复的;
对照:
public delegate void ColorChangeEventHandler();
public partial class myControl: UserControl
{
public event ColorChangeEventHandler ColorChanged;
private void OnColorChange()
{
if(ColorChanged != null)
{
ColorChanged.Invoke();
}
}
public speelRij()
{
InitializeComponent();
}
private void Button1_Click(object sender, EventArgs e)
{
OnColorChange();
Control ctrl = ((Control)sender);
switch (ctrl.BackColor.Name)
{
case "Crimson": ctrl.BackColor = Color.Blue; break;
case "Green": ctrl.BackColor = Color.Orange; break;
case "Orange": ctrl.BackColor = Color.Crimson; break;
case "Blue": ctrl.BackColor = Color.Green; break;
default: ctrl.BackColor = Color.Crimson; break;
}
形式:
public myForm()
{
InitializeComponent();
myControl1.ColorChanged += () => { Button1.Enabled = true;};
}
我创建了一个带有一些按钮的用户控件。当您单击 UserControl 中的按钮时,按钮的背景色会发生变化:
private void button1(object sender, EventArgs e)
{
Control ctrl = ((Control)sender);
switch (ctrl.BackColor.Name)
{
case "Crimson": ctrl.BackColor = Color.Blue; break;
case "Green": ctrl.BackColor = Color.Orange; break;
case "Orange": ctrl.BackColor = Color.Crimson; break;
case "Blue": ctrl.BackColor = Color.Green; break;
default: ctrl.BackColor = Color.Crimson; break;
}
}
在我的表单上是另一个启用的按钮 = false; 因此,当 UserControl 中的颜色发生变化时,我希望表单上的按钮启用 = true;
在您的 UserControl
中创建事件处理程序 ColorChanged
并在颜色改变时触发该事件。当事件触发时,在您的表单中添加侦听器和适当的代码。
所以,在你的控制下,EventHandler
,像这样
public partial class UserControl1 : UserControl
{
public EventHandler ColorChanged;
然后,点击按钮时触发事件,如下所示:
private void button1(object sender, EventArgs e)
{
ColorChanged?.Invoke(sender, e);
//rest of your code...
}
在您的表单中,添加侦听器:
userControl.ColorChanged += new EventHandler(UserControl_ColorChanged)
并添加将要执行的方法并启用按钮...
private void UserControl_ColorChanged(object sender, EventArgs e)
{
//enable button here
}
您可以使用 Event Aggregator 并使用户控件中的按钮将发布一个事件并让您 window 处理该事件
您可以使用此方法获取对父表单的引用
Form parentFrm = (this.Parent as Form);
然后您可以访问父窗体上的控件,方法是创建 public 或按名称查找控件
Button aButton = (Button)parentFrm.Controls["btnName"];
if (aButton != null)
aButton.Enabled = true;
我是这样修复的;
对照:
public delegate void ColorChangeEventHandler();
public partial class myControl: UserControl
{
public event ColorChangeEventHandler ColorChanged;
private void OnColorChange()
{
if(ColorChanged != null)
{
ColorChanged.Invoke();
}
}
public speelRij()
{
InitializeComponent();
}
private void Button1_Click(object sender, EventArgs e)
{
OnColorChange();
Control ctrl = ((Control)sender);
switch (ctrl.BackColor.Name)
{
case "Crimson": ctrl.BackColor = Color.Blue; break;
case "Green": ctrl.BackColor = Color.Orange; break;
case "Orange": ctrl.BackColor = Color.Crimson; break;
case "Blue": ctrl.BackColor = Color.Green; break;
default: ctrl.BackColor = Color.Crimson; break;
}
形式:
public myForm()
{
InitializeComponent();
myControl1.ColorChanged += () => { Button1.Enabled = true;};
}