【问题标题】:VS WinForm designer always changes custom constructor?VS WinForm 设计器总是更改自定义构造函数?
【发布时间】:2012-08-17 01:37:31
【问题描述】:

全部,

我正在使用 MSVS 2010 使用 C#/WinForms 进行项目。 我从组框派生了一个对象,并更改了它的构造函数,以便它在构造时采用整数变量。 我将我的对象添加到工具箱中,我可以成功地将该对象插入到 GUI 设计器中。

但每次我对表单进行更改时,我的自定义构造函数都会更改。

所以我需要一种方法来修复 VS,这样每次我更改表单时,代码都不会自行重建,或者我需要其他方法来修复自定义对象中的代码。

基本上,我所做的取决于我传递的参数,我正在创建不同的小部件集并将它们展示给用户。但我制作那个对象是因为我试图消除代码重复。

有人可以帮忙吗?

谢谢。

【问题讨论】:

  • @pst,但是代码会是什么样子呢?可以举个例子吗?
  • (我不知道为什么这个问题被否决了.. VS 设计师的问题可能很烦人。无论如何,你仍然可以在没有另一个构造函数的情况下消除代码重复。考虑发布你的 [相关部分]到目前为止。)

标签: c# winforms visual-studio-2010


【解决方案1】:

默认的无参数构造函数必须保留,它应该调用InitializeComponents。如果这样做了,那么添加一个 secondary 构造函数应该没问题,设计者不应该乱用它。

但是,我建议不要使用重载的构造函数,而是公开方法或属性来完成 WinForms 控件所需的任务。

在 WinRome 中,按照..


二级构造函数示例:

// Leave this constructor - in the X.designer.cs file
public MyType () {
    InitializeComponents();
}

// Add your own constructor - in the X.cs file
public MyType (int x) : this() {
    // ..
}

更新:避免手动编辑“X.designer.cs”文件;这些是给设计师的。相反,编辑镜像“X.cs”文件。部分类用于在这两个文件之间展开设计器代码和您的自定义代码。

【讨论】:

  • pst,这部分我明白了。我不明白的是如何使用 WinForms 来发挥这种魔力。您对属性的评论也令人困惑。如果我在这个类中创建一个公共属性并设置它,它是否与我将参数传递给构造函数一样?在这种情况下,我需要重写属性的 set 函数来进行必要的控制,对吗?谢谢。
  • @Igor 不一定一样,但可以达到类似的效果。想象一下,当您执行 control.Text = "blah" 时,与使用构造函数获取文本.. 这就是 WinForm 控件的设置/设计方式,它们在很大程度上基于属性。 WinForms不是关于“无副作用”的,设计者本身没有非默认构造函数的概念。
  • 我按照您在上面代码中的建议进行了更改,但它不起作用。在 GUI 编辑器中更改某些内容后,我仍然最终修复了 Form1.Designer.cs 的代码。还有其他想法吗?
  • 不要编辑设计文件——这适合你:) 编辑部分类文件:Form1.cs(这是给你的)。二级构造函数在partial class的单独部分没关系。
  • pst,当尝试在 GUI 设计器中更改某些内容时,我的对象的构造函数更改为:“this.MyType = new Form1.MyType(this.component);”在 Form1.Designer.cs 文件中。也不确定如何不更改此文件并在 Form1.cs 中进行更改。当我将控件放在表单上时,它会自动生成适当的插入代码,类似于上面的代码。而且我不能在 Form_Load 事件中覆盖它。还是我?谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
相关资源
最近更新 更多