C# Winforms - 将生存能力状态从一个用户控件切换到另一个用户控件?
C# Winforms - Toggle viability states from one usercontrol to another usercontrol?
我在下面附上了我试图用我的代码完成的示例。如果可能的话,有人可以写一个片段或解释它是如何工作的吗?我尝试了几种不同的方法,none 次尝试都失败了(我不断收到范围错误或无法识别用户控件)。
目前正在尝试让 UserControl1.Button1 切换 UserControl2 的可见性状态。
层次结构:
- 表格1
- 用户控件1
- 按钮 1
- 用户控件2
- 按钮 1
我可以得到它的变体,如下所示,但是用户控件到用户控件似乎需要一些额外的步骤。求助!
private void button1_Click(object sender, EventArgs e)
{
this.Hide();
}
private void HIDE2_Click(object sender, EventArgs e)
{
userControl21.Hide();
}
正如@hans-passant 指出的那样。
事件的使用为我们提供了一种使用观察者模式的简单方法。
在 UserControl1
中实现自定义 Event
并在单击隐藏第二个控件的按钮时调用此事件(通知观察者有关更改):
public partial class UserControl1 : UserControl
{
public event EventHandler HideRequested;
...
private void button1_Click(object sender, EventArgs e)
{
if (HideRequested != null)
{
HideRequested.Invoke(this, EventArgs.Empty);
}
}
}
在 Form1 中,通过实现事件处理程序附加到事件:
public Form1()
{
InitializeComponent();
userControl11.HideRequested += userControl11_HideRequested;
}
void userControl11_HideRequested(object sender, EventArgs e)
{
userControl21.Hide();
}
当然还有其他方法可以实现这一点,但任何其他方法都可能会在您的代码中引入耦合。例如,这也是有效的(通过将用户控件 2 的访问修饰符更改为 public):
private void button1_Click(object sender, EventArgs e)
{
(Parent as Form1).userControl21.Hide();
}
你也可以这样想:(那你就不用把USerControl2的访问修饰符改成public)
在表格 1 中:
public void HideUserControl2()
{
userControl21.Hide();
}
并且在 UserControl1 中 button_click:
private void button1_Click(object sender, EventArgs e)
{
(Parent as Form1).HideUserControl2();
}
我在下面附上了我试图用我的代码完成的示例。如果可能的话,有人可以写一个片段或解释它是如何工作的吗?我尝试了几种不同的方法,none 次尝试都失败了(我不断收到范围错误或无法识别用户控件)。
目前正在尝试让 UserControl1.Button1 切换 UserControl2 的可见性状态。
层次结构:
- 表格1
- 用户控件1
- 按钮 1
- 用户控件2
- 按钮 1
- 用户控件1
我可以得到它的变体,如下所示,但是用户控件到用户控件似乎需要一些额外的步骤。求助!
private void button1_Click(object sender, EventArgs e)
{
this.Hide();
}
private void HIDE2_Click(object sender, EventArgs e)
{
userControl21.Hide();
}
正如@hans-passant 指出的那样。
事件的使用为我们提供了一种使用观察者模式的简单方法。
在 UserControl1
中实现自定义 Event
并在单击隐藏第二个控件的按钮时调用此事件(通知观察者有关更改):
public partial class UserControl1 : UserControl
{
public event EventHandler HideRequested;
...
private void button1_Click(object sender, EventArgs e)
{
if (HideRequested != null)
{
HideRequested.Invoke(this, EventArgs.Empty);
}
}
}
在 Form1 中,通过实现事件处理程序附加到事件:
public Form1()
{
InitializeComponent();
userControl11.HideRequested += userControl11_HideRequested;
}
void userControl11_HideRequested(object sender, EventArgs e)
{
userControl21.Hide();
}
当然还有其他方法可以实现这一点,但任何其他方法都可能会在您的代码中引入耦合。例如,这也是有效的(通过将用户控件 2 的访问修饰符更改为 public):
private void button1_Click(object sender, EventArgs e)
{
(Parent as Form1).userControl21.Hide();
}
你也可以这样想:(那你就不用把USerControl2的访问修饰符改成public)
在表格 1 中:
public void HideUserControl2()
{
userControl21.Hide();
}
并且在 UserControl1 中 button_click:
private void button1_Click(object sender, EventArgs e)
{
(Parent as Form1).HideUserControl2();
}