【发布时间】:2019-03-15 10:58:18
【问题描述】:
我正在 c# windows 窗体应用程序上测试此代码。这是我正在做的测试。
Panel1 有一个“p1Button”。
“UserControl1”有一个“uc1Button”
单击“p1Button”以在 Panel1 中加载“UserControl1”
当我在“uc1Button”上单击事件时找不到 panel2
是否可行或有什么建议?
// Form1.cs
using System;
using System.Windows.Forms;
namespace Test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void p1Button_Click(object sender, EventArgs e)
{
if (!panel1.Controls.Contains(UserControl1.Instance))
{
panel1.Controls.Add(UserControl1.Instance);
UserControl1.Instance.BringToFront();
}
else
{
UserControl1.Instance.BringToFront();
}
}
}
}
// UserControl1.cs
using System;
using System.Windows.Forms;
namespace Test
{
public partial class UserControl1 : UserControl
{
private static UserControl1 _instance;
public static UserControl1 Instance
{
get
{
if (_instance==null)
{
_instance = new UserControl1();
}
return _instance;
}
}
public UserControl1()
{
InitializeComponent();
}
private void uc1Button_Click(object sender, EventArgs e)
{
}
}
}
// UserControl2.cs
using System.Windows.Forms;
namespace Test
{
public partial class UserControl2 : UserControl
{
private static UserControl2 _instance;
public static UserControl2 Instance
{
get
{
if (_instance == null)
{
_instance = new UserControl2();
}
return _instance;
}
}
public UserControl2()
{
InitializeComponent();
}
}
}
【问题讨论】:
-
你的用户控件是单例的,为什么?您需要了解事件和委托以及事件处理程序...
-
正如其他人已经提到的那样,将它们设为单例是没有用的,我建议阅读控件的生命周期,并稍微深入一点。 Initialize 方法是通过构造函数调用的所以现在如果你有单例,ctor 将被调用一次。因此不会发生布局。您应该问的下一个问题是布局代码在哪里,答案在类声明“部分类”中阅读所有这些