这听起来很愚蠢,但是我很难弄清楚这一点。任何帮助将不胜感激:
我有两个用户控件,分别为“ Safety_Check ”和“ OEE_Track ”。在我的 MainForm 中,有一个名为“ pnl_main_controller ”的面板,这是我同时显示两个用户控件的地方。我在主窗体上有两个按钮,并且可以在两者之间进行动态切换而没有任何问题。
安全性检查用户控件;
public partial class Safety_Check : UserControl
{
private static Safety_Check _instance;
public static Safety_Check instance
{
get
{
if (_instance == null)
_instance = new Safety_Check();
return _instance;
}
}
public Safety_Check()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
///////------------------------
}
}
OEE_Track用户控件
public partial class OEE_Track : UserControl
{
private static OEE_Track _instance;
public static OEE_Track instance
{
get
{
if (_instance == null)
_instance = new OEE_Track();
return _instance;
}
}
public OEE_Track()
{
InitializeComponent();
}
}
MainForm:
public partial class MainForm : Form
{
private void btn_reg_Click(object sender, EventArgs e)
{
if (!pnl_main_controller.Contains(Safety_Check.instance))
{
pnl_main_controller.Controls.Add(Safety_Check.instance);
Safety_Check.instance.Dock = DockStyle.Fill;
Safety_Check.instance.BringToFront();
}
else
{
Safety_Check.instance.BringToFront();
} }
private void btn_OEE_Click(object sender, EventArgs e)
{
if (!pnl_main_controller.Contains(OEE_Track.instance))
{
pnl_main_controller.Controls.Add(OEE_Track.instance);
OEE_Track.instance.Dock = DockStyle.Fill;
OEE_Track.instance.BringToFront();
}
else
{
OEE_Track.instance.BringToFront();
}
}
我要做的是在“ 安全检查 ”上有一个名为“ Button1 ”的按钮”用户控件,每当我按此按钮时,我都希望“ 安全检查 ”消失在“ pnl_main_controller ”上并带来“ OEE_Track ”进入面板
答案 0 :(得分:1)
我想稍微介绍一下Reza Aghaei的答案。我认为它可能会变得比现在更好。
如果我是你,我将有一个接口ICheckedView
,该接口至少有一种实现方法,如下所示:
ICheckedView
{
void Continue();
}
现在,我们可以将此接口应用于解决方案中的任何类,但最有可能应用于视图。接下来,我将使您的主窗体实现此接口并实现所需的方法。在这种情况下,我们希望主窗体从面板中删除控件,然后添加一个新控件。坦白说,我们的安全检查控件不需要(也许不应该)知道其他控件或接下来会发生什么。它只是用于控制流程。
最后,您需要为Public_Check添加一个公共属性,或者甚至向构造函数添加一个参数(其中包含ICheckedView
)。当您的安全检查控件被点击时,它可以告诉任何传递给它的人(我们称客户)必须继续。
可以用action delegate完成。
如果将Action
委托添加到安全检查中,则可以仅弹出其签名与该委托匹配的任何方法(void methodName()
)。 Safety_Check控件的构造函数应包括一个Action,并且该Action将被分配给该类的私有字段。然后,当需要调用时,可以直接调用该动作。
因为我们可能首先是从UI线程调用的,所以我们可能还不错,但是您需要在这里考虑线程安全性。所需调用模式可以帮助您解决此问题。