我用一些按钮创建了一个用户控件。当您单击UserControl中的按钮时,按钮的BackColor会更改:
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中的颜色发生变化时,我希望表单上的按钮为enabled = true;
答案 0 :(得分:3)
在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
}
答案 1 :(得分:1)
您可以使用此
获取对父表单的引用Form parentFrm = (this.Parent as Form);
然后,您可以通过公开或通过名称
查找控件来访问父表单上的控件 Button aButton = (Button)parentFrm.Controls["btnName"];
if (aButton != null)
aButton.Enabled = true;
答案 2 :(得分:0)
你可以使用Event Aggregator并使用户控件中的按钮发布一个事件并让你窗口处理事件
答案 3 :(得分:0)
我这样修好了;
控制:
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;};
}