gpt4 book ai didi

c# - 继承的 Windows 窗体奇怪行为

转载 作者:太空宇宙 更新时间:2023-11-03 13:47:19 24 4
gpt4 key购买 nike

在加载表单时,我需要执行 X 次检查以确定是否打开或关闭表单。下面是一个简单的例子。

public partial class BaseForm : Form
{
private void BaseForm_Load(object sender, EventArgs e)
{
if(!IsUserValid())
MessageBox.Show("User is not valid");
}
private bool IsUserValid()
{
List<string> allowedUsernames = new List<string>();
using (SqlConnection con = new SqlConnection(_connectionString))
{
//Get a list of usernames, none of which are "Developer" usernames
}
return allowedUsernames.Any(username => username == Environment.UserName);
}
}
public partial class DerivedForm : BaseForm
{

}

上面的示例,无论我的用户名如何,我都可以在设计器中完美地加载表单。如果我做另一种形式,DerivedForm 并继承 base 然后它调用 Load,因此会显示一个 MessageBox,然后是 Close 设计模式下的窗体不允许我访问设计器,为什么派生的 WindowsForm 需要使用 Load 事件,而基础却不需要?如果您正在使用 WindowsForms 进行继承,那么不使用 Load 事件是否明智?

我只是觉得这很奇怪,有人知道吗?

最佳答案

还有一个question它解决了类似的问题。此外,接受的答案提供了克服此行为的解决方案:https://stackoverflow.com/a/2427420/674700 .

基本上,在您的情况下,添加 DesignTimeHelper 类并使用以下修改来查看区别:

private void BaseForm_Load(object sender, EventArgs e)
{
if (!DesignTimeHelper.IsInDesignMode)
{
if (!IsUserValid())
{
MessageBox.Show("User is not valid");
}
}
else
{
MessageBox.Show("Called from VS");
}
}

关于c# - 继承的 Windows 窗体奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14856421/

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