每次用户关闭同一面板上的任何其他用户控件时,我一直在尝试加载默认用户控件。我有一个名为 MainContainer 的面板,当主窗体加载时,我调用以下方法来加载名为 welcome 的默认用户控件。
public void AddUserControlWelcome()
{
MainContainer.Controls.Clear();
welcome.Dock = DockStyle.Fill;
MainContainer.Controls.Add(welcome);
}
我有一个menustrip按钮,它调用以下方法,
private void sellItemsToolStripMenuItem_Click(object sender, EventArgs e)
{
AddUserControlSellManager();
}
它被定义为,
public void AddUserControlSellManager()
{
MainContainer.Controls.Clear();
sellManager.Dock = DockStyle.Fill;
MainContainer.Controls.Add(sellManager);
}
因此,sellManager用户控件上有一个按钮,实际上关闭了sellManager。之后我再次从 MainContainer_ControlRemoved(对象发件人,ControlEventArgs e)调用 AddUserControlWelcome(),但应用程序崩溃了,我不知道原因。
答案 0 :(得分:0)
我认为,很清楚你为何会遇到这个问题。 MainContainer_ControlRemoved
不仅在你删除“卖”而且还“欢迎”时调用。所以,我相信的罪魁祸首是你确实添加了MainContainer_ControlRemoved
这样的事件的控制权,这是你不应该做的。和.Net一样好,有时你不得不为某些目的而不使用某些事件,否则你会遇到问题。
尝试做这样的事情。考虑到您的表面当时只能容纳一个控件
class SurfaceManager
{
private Control _defaultCtrl;
private bool _currentDefault;
private Control _surface;
void SurfaceManager(Control _surface, Control defaultCtrl)
{
_surface = surface;
_defaultCtrl = defaultCtrl;
_surface = surface.Controls.Add(_defaultCtrl);
_currentDefault = true;
}
public Control Add(Control ctrl)
{
Control c = null; // Returning removed control so you can do something else with it
if (_surface.Controls.Count > 0)
{
if (!_currentDefault)
c = _surface.Controls[0];
_surface.Controls.Clear();
}
_surface = surface.Controls.Add(ctrl);
_currentDefault = false;
Return c;
}
public Control Remove()
{
if (_currentDefault) Return // Current is default - do nothing
Control c = null; // Returning removed control so you can do something else with it
if (_surface.Controls.Count > 0)
{
c = _surface.Controls[0];
_surface.Controls.Clear();
}
_surface = surface.Controls.Add(_defaultCtrl);
_currentDefault = true;
Return c;
}
}
现在,在您的班级中创建此经理的实例并使用Add
或Remove
。删除将自动启用欢迎屏幕