每次在面板中关闭任何其他用户控件时,添加默认用户控件
本文关键字:控件 用户 其他 默认 添加 任何 | 更新日期: 2023-09-27 18:33:57
每次
用户关闭同一面板上的任何其他用户控件时,我一直在尝试加载默认用户控件。我有一个名为 MainContainer 的面板,当主窗体加载时,我调用以下方法来加载名为 welcome的默认用户控件。
public void AddUserControlWelcome()
{
MainContainer.Controls.Clear();
welcome.Dock = DockStyle.Fill;
MainContainer.Controls.Add(welcome);
}
我有一个菜单条按钮,它调用以下方法,
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(),但应用程序崩溃了,我不知道为什么。
我认为,很明显为什么你会遇到这个问题。 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
。删除将自动打开欢迎屏幕