gpt4 book ai didi

c# - 每次在面板中关闭任何其他用户控件时添加默认用户控件

转载 作者:行者123 更新时间:2023-11-30 18:27:03 24 4
gpt4 key购买 nike

每当用户关闭同一面板上的任何其他用户控件时,我一直在尝试加载默认用户控件。我有一个名为 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(object sender, ControlEventArgs e) 调用 AddUserControlWelcome() 但应用程序崩溃了,我不知道为什么。

最佳答案

我想,您很清楚为什么会遇到这个问题。 MainContainer_ControlRemoved 不仅在您删除“sell”时调用,而且在“welcome”时调用。因此,我认为罪魁祸首是您确实对诸如 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;

}

}

现在,在您的类中创建此管理器的实例并使用AddRemove。删除将自动打开欢迎屏幕

关于c# - 每次在面板中关闭任何其他用户控件时添加默认用户控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27430488/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com