【问题标题】:C# - Visual Studio is forced terminated when UserControl is added on other control [duplicate]C# - 在其他控件上添加 UserControl 时强制终止 Visual Studio [重复]
【发布时间】:2017-08-20 22:02:22
【问题描述】:

.NET 框架 3.5 我做了一个简单的 UserControl,由 label1 和 label2 组成。

我覆盖字体属性。

public override Font Font  
{  
   get  
   {  
       return this.Font;
   }
   set
   {
       label1.Font = value;
       label2.Font = value;
   }
}

然后我在其他表单上添加了 UserControl。 但是视觉工作室被强制终止。
这段代码有什么问题?

【问题讨论】:

  • 查看标记的副本以了解崩溃的解释。在您的情况下,您很可能应该将 getter 更改为 return base.Font; 但是请注意,您的实现使 getter 和 setter 不对称。假设label1label2 将始终具有相同的Font 值,那么将getter 改为return label1.Font; 可能会更好。
  • @PeterDuniho 不知道怎么打电话。非常感谢。

标签: c# user-controls .net-3.5


【解决方案1】:

如果你只想覆盖 setaccessor,使用这个:

public override Font Font  
{  
  set
  {
    label1.Font = value;
    label2.Font = value;
  }
}

永远不要打电话

get
   {
     return this.Font;
   }

因为它是递归调用,它会导致你的崩溃问题。

【讨论】:

  • 谢谢。我将“get { return this.font; }”更改为“get { return _font; }”并添加类变量“private Font _font;”。没事吧?并且是否启用了“get { return base.font }?
  • 你可以 {return label1.Font };或添加 base.Font = value;进入 set 访问器,并返回 base.Font
  • 好的,谢谢。嗯.. "{ get; set; }" 是否相同 "{ get{ return base.Font} set { base.Font = value } }"?
【解决方案2】:

这是一个无限循环!如果您尝试获取 Font (auto-)property,它将尝试获取 Font (auto-)property 等等...

public override Font Font{  
   get  
   {  
       return this.Font;  ←This calls itself
   }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多