在C#中编写表单时无法查看设计器

在C#中编写表单时无法查看设计器,第1张

概述我正在关注 winforms的 this教程,到目前为止,教程正在编写表单而不使用工具箱.我相信它很快就会更深入地介绍工具箱. 在本教程之后,我在以下两段代码中进行了部分类: 第一档: using System;using System.Windows.Forms;public class Numeric : System.Windows.Forms.TextBox{ public 我正在关注 winforms的 this教程,到目前为止,教程正在编写表单而不使用工具箱.我相信它很快就会更深入地介绍工具箱.

在本教程之后,我在以下两段代码中进行了部分类:

第一档:

using System;using System.windows.Forms;public class Numeric : System.windows.Forms.TextBox{    public Numeric()    {    }}public partial class Exercise{    private Numeric txtBox;    System.ComponentModel.Container components;}

第二档:

using System;using System.windows.Forms;public partial class Exercise : Form{    private voID InitializeComponent()    {        txtBox = new Numeric();        Controls.Add(txtBox);    }    public Exercise()    {        InitializeComponent();    }}public class program{    public static int Main()    {        Application.Run(new Exercise());        return 0;    }}

当我用F5运行代码时,一切看起来都很好:表单d出文本框.

但出于某种原因,当我右键单击第二个文件并选择“视图设计器”时,我收到一条错误,上面写着“变量’txtBox’未声明或未被分配”.我可以选择“忽略并继续”,这会将我引导到一个没有文本框的表单.

为什么会这样?我知道有些人认为我应该使用工具箱,这可能是最明智的做法,但我仍然想知道为什么会这样.

解决方法 在windows窗体设计器中打开窗体时,设计器会查看文件中的第一个类.如果文件具有包含该类的其他部分部分的Designer.cs,则还包括它并尝试反序列化这些文件内容.在反序列化和加载表单设计时的过程中,它创建表单基类的实例,并在这些文件中查找组件声明和InitializeComponents方法.如果找到它们使用反序列化代码创建组件并设置它们的属性,并将组件添加到创建的基类实例中.

一些有用的事实:

>表单构造函数中的代码不会在设计时执行,但表单基类的构造函数将在设计时执行.
> InitializeComponent中的代码不会在设计时执行,但这些代码将被反序列化,并将用于创建表单的设计者.
>设计器无法显示具有抽象基类的表单. (solution)
>设计者无法显示具有泛型类的表单.例如,它无法显示MyForm:SomeForm< SomeClass>,但它可以显示SomeForm< T>:Form. (solution)
>如果为表单定义新属性,则属性将不会显示在属性窗口中.属性窗口显示基类的属性,但包含表单的值.
>当一个文件包含2个类时,如果表单不是第一个类,则设计器无法加载,并且您会收到一条警告,指出该表单应该是第一个在设计器中显示的类.
>以上规则也适用于UserControls.

看看下面的代码,它有一些严重的问题:

>该类具有与类名不同的构造函数
>语句int i =“x”;
>这是一个C#类,没有分号
> InitializeComponent方法未在构造函数中调用

但有趣的是,你可以看到设计师的形式,即使有这些错误!

只需在项目中创建一个文件,并将下面的代码放在文件中,然后保存文件并关闭它.然后在不尝试构建解决方案的情况下,在设计器中打开表单.这是代码:

using Systemusing System.windows.Formsnamespace SampleApplication{    public class MyForm:Form    {        public NotMyForm()        {        }        public voID InitializeComponent()        {            int i="x";            textBox1 = new TextBox()            textBox1.Text = "Hi"            this.Controls.Add(textBox1)        }        private TextBox textBox1    }}

这是设计师的截图:

更多信息

要查找更多信息,请查看以下链接:

> How does the Windows Forms designer in Visual Studio load a Form?

解决您的问题

作为一种解决方案,您可以移动私有数字txtBox;并将它放在练习课中的第二个文件中.

总结

以上是内存溢出为你收集整理的在C#中编写表单时无法查看设计器全部内容,希望文章能够帮你解决在C#中编写表单时无法查看设计器所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/1240835.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存