将控件属性保留到Designer.cs文件中(如何使控件的属性正确序列化到窗体的designer.cs文件中?)

时间:2019-03-25 00:31:38

标签: c# controls designer

如何使控件的属性(在本例中为PointF类型)正确地序列化到窗体的designer.cs文件?

我现在正在查看CodeDomSerializer的子类,该子类确实更改了designer.cs代码(按照该页面上的示例添加注释有效),但看来我只能将其应用于CustomControl类,如下所示:整体,然后尝试修改基本序列化,以将CodeCastExpression替换为CodeObjectCreateExpression。不过,这似乎是一种非常凌乱的做事方式……

我有一个自定义控件,其中包含PointF类型的属性。将此控件添加到表单并保存后,designer.cs文件不会显示以下内容:

...
this.customControl.LocationF = new System.Drawing.PointF(50.0f, 50.0f);
...

相反,它是这样说的:

...
this.customControl.LocationF = ((System.Drawing.PointF)(resources.GetObject("customControl.LocationF")));
...

我一直试图“说服”此属性以正确地序列化到设计器文件,而我的搜索已经找到了一些有希望的潜在客户:

DesignerSerializerAttribute,但是我无法确切知道它应该做什么或如何使用。 一个可以转换为InstanceDescriptor的TypeConverter(查看MSDN给出的用于生成自定义类型的代码的示例)。 我遵循了MSDN示例中给出的示例,将Point替换为PointF,将int替换为float,然后我的CustomControl如下所示:

public class CustomControl : Button
{ 
  [Category("Layout")]
  [TypeConverter(typeof(PointFConverter))]
  public PointF LocationF
  {
    get { return this.Location; }
    set { this.Location = new Point((int)value.X, (int)value.Y); }
  }
}

据我所知,这应该可以工作,但似乎对将其序列化到设计器文件的方式没有影响。

我刚刚注意到的另一件事-PointFConverter实际上在生成designer.cs文件时从未使用过-仅在设计模式下在属性框中读取或写入属性值时才使用...这个TypeConverter东西是死胡同...

0 个答案:

没有答案
相关问题