C#Winforms-将生存状态从一个用户控件切换到另一个用户控制



我在下面附上了一个我试图用代码完成的示例。如果可能的话,有人可以写一个片段或解释一下这是如何工作的吗?我尝试了几种不同的方法,但都没有成功(我不断出现范围错误或用户控件无法识别(。

当前正在尝试获取UserControl1.Button1以切换UserControl2的可见性状态。

层次结构:

  1. 表格1
    1. 用户控制1
      1. 按钮1
    2. 用户控制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按钮中单击:

private void button1_Click(object sender, EventArgs e)
{
(Parent as Form1).HideUserControl2();
}

最新更新