使用主窗体代码从另一个UserControl中打开一个UserControl

时间:2019-03-04 21:46:03

标签: c# winforms controls access-modifiers

我将UserControl用作FlowLayoutPanel中的按钮,因为它包含文本和其他信息。通过单击FlowLayoutPanel内的UserControl,可以在我的Main表单中显示该表单。

这是UserControl示例:

private void SelectuCControl_MouseClick(object sender, MouseEventArgs e)
{
    Main OP = new Main();
    OP.ucControl.Show();
    OP.ucControl.BringToFront();
}

Main表单中,ucControl(UserControl)的访问修饰符设置为Public。
但是,当我单击时,什么也没有发生,并且每次单击都会使CPU和内存变高。后台发生了一些事情,但我看不到。

我也尝试用不同的方式来做。
这是尝试失败的另一种方法的示例。

主要形式:

public void ShowUC()
{
    ucControl.Show();
    ucControl.BringToFront();
}

并在UserControl中:

private void SelectContacts_MouseClick(object sender, MouseEventArgs e)
{
    Main OP = new Main();
    OP.ShowUC();
}

但还是一样。
您知道如何通过单击位于FlowLayoutPanel中的另一个UserControl来显示隐藏在Main Form中的UserControl吗?

2 个答案:

答案 0 :(得分:0)

如果您编写以下代码:

Main x = new Main();
Main y = new Main();

...然后xy不相同的Main-它们是Main的两个单独实例。

如果您与x进行互动或更改,则对y毫无影响。

如果您确实希望y是同一实例,则需要执行以下操作:

Main x = new Main();
Main y = x;

在您的代码中,您需要找到一种方法来执行以下操作:

public Main OP;
private void SelectuCControl_MouseClick(object sender, MouseEventArgs e)
{
    OP.ucControl.Show();
    OP.ucControl.BringToFront();
}

现在,您可以在设置OP时将Main设置为UserControl的同一实例。

答案 1 :(得分:0)

我找到了解决方案。 我要做的就是在我用作按钮的UserControl中添加此命令。

        Main OP = (Main)ParentForm;
        OP.ShowUC();