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

c#

我试图创建一个派生的 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;
    }
}

回答

通过 Visual Studio 的接口生成派生类(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
        }
    }


以上是派生类认为我的基类被删除了的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>