【问题标题】:Designer failing because parent form "does not have property named..."设计器失败,因为父表单“没有名为...的属性”
【发布时间】:2016-04-14 18:19:45
【问题描述】:

我使用了一个名为“CustomForm”的表单,以便在我制作的所有表单中都有一致的设计。所有子表单都从它继承,就像在“class childForm:CustomForm”中一样。我删除了自定义表单上的窗口边框并制作了我自己的,所以我有窗口标题的标签。我创建了一个受保护的属性来修改该标签的文本。

由于某种原因,当我尝试打开子窗体的设计器时,它说:

“Quiz.CustomForm”类型没有名为“WindowTitle”的属性。

我希望能够通过表单属性的“杂项”部分中的设计器来编辑此属性。这以前有效,我不知道我做了什么来打扰它。如果我进入设计器文件并进入 InitalizeComponent,它会显示 'this.WindowTitle = "The string here"'。并且没有错误,因为我在父表单中为它创建了一个受保护的属性。 IDE 没有下划线,但是当我尝试加载设计器时收到上述错误。

CustomForm 类中的属性如下所示:

protected string WindowTitle
    {
        get { return lbl_windowTitle.Text; }
        set { lbl_windowTitle.Text = value; }
    }

我尝试公开该属性,但没有任何区别。

【问题讨论】:

  • @IvanStoev OP 声称他们在最后一句话中尝试过没有区别
  • @rene 虽然我很确定非公共属性不会显示在属性网格中,所以没有办法通过设计器编辑它。因此,无论 OP 声明如何,问题肯定是由属性不是 public 引起的。

标签: c# forms inheritance


【解决方案1】:

这以前有效,但我不知道我做了什么来打扰它。

我很确定您的(当前为 protected)WindowTitle 属性是 public,否则无法在属性表单中查看/编辑它 - 设计时支持(以及一般的 System.ComponentModel ) 仅适用于 public 属性。

我执行了类似的操作并且得到了同样的错误。

我尝试公开该属性,但没有任何区别。

它会有所作为。只需在创建public 属性后重建您的项目,问题就会消失。

【讨论】:

  • 你是对的。我确实尝试将其公开,但没有重建可能导致持续问题的项目。谢谢!
【解决方案2】:

您说过您尝试过使用公共属性,但使用它和属性属性应该可以正常工作,就像我制作的这个示例一样:https://www.dropbox.com/s/45blckvgiz460h7/WindowsFormsApplication1.rar?dl=0

public partial class BaseForm : Form
    {
        public BaseForm()
        {
            InitializeComponent();
        }

        [Browsable(true)]
        [Category("Base Form")]
        [Description("Define the window title.")]
        public String WindowTitle
        {
            get { return label1.Text; }
            set { label1.Text = value; }
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-03
    • 2017-08-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-07
    • 1970-01-01
    • 2014-08-06
    • 2014-10-29
    相关资源
    最近更新 更多