gpt4 book ai didi

c# - 派生类认为我的基类被删除了

转载 作者:行者123 更新时间:2023-12-04 04:25:45 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Shown handler in Form's base class in the way of designer

(1 个回答)


上个月关门。




我试图创建一个派生的 WinForm 类,但我有一个问题:当我尝试创建我的 DerivedClass(通过添加 > 新元素 > 派生表单)时, Visual Studio 告诉我该对象不存在
我确定危险的对象是 BaseForm 因为我得到了 Setting Error消息显示在控制台中。 (我的猜测是因为调用了 Close() 函数)

public partial class BaseForm : Form
{
Port port;

public BaseForm()
{
InitializeComponent();
}

protected void Form1_Load(object sender, EventArgs e)
{
port = new Port();
if (port.Port_Setting() != 0)
{
Console.WriteLine("Setting Error");
Close();
}
}
}
目前,BaseForm 是空的,只是一个没有添加组件的表单。
我的 Port 唯一使用的部分到目前为止的类是这样的,只是初始化它以供进一步使用:
class Port
{
protected SerialPort sp = new SerialPort();
public int Port_Setting()
{
Console.WriteLine("Setting port");
if (sp.IsOpen)
{
sp.Close();
}

sp.BaudRate = 38400;
sp.DataBits = 8;
sp.StopBits = System.IO.Ports.StopBits.One;
sp.Parity = System.IO.Ports.Parity.None;
sp.PortName = "COM3";

bool Error = false;
try
{
sp.Open();
}
catch (UnauthorizedAccessException) { Error = true; }
catch (ArgumentException) { Error = true; }
catch (System.IO.IOException) { Error = true; }
if (Error)
{
return -1;
}
return 0;
}
}

最佳答案

Generating the derived class via the Visual Studio's interface (Add >New Element>Derived Form) –


啊哈现在事情对我来说越来越清楚了。
在 Visual Studio 中派生窗体并在设计器中打开派生窗体时,将执行基本窗体(从其继承的父窗体)上的一些代码。
我从头顶上不知道所有方法,但我相信 load例如,当您在设计时在设计器中加载继承的表单时,事件将在基本表单中执行。
这不是 VS 的缺陷,这是设计使然。这个想法是,当您创建自定义用户控件时,用户控件中的代码也可以在设计时执行。对设计师来说,从另一个表单继承表单有点相同。
如果您在设计时,您可以做的是检查基本表单的代码来解决这个问题。
我通过在我的基本表单上添加这个方法来做到这一点:
 protected bool IsInDesignMode
{
get { return DesignMode || LicenseManager.UsageMode == LicenseUsageMode.Designtime; }
}
你可以像这样使用它
    private void FormBase_Load(object sender, EventArgs e)
{
if (IsInDesignMode == false)
{
// write code here that should only run at runtime
}
}

关于c# - 派生类认为我的基类被删除了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67835567/

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