Сохранение свойства элемента управления в файле Designer.cs (Как правильно настроить сериализацию свойства элемента управления в файл designer.cs формы?) - PullRequest
0 голосов
/ 25 марта 2019

Как сделать так, чтобы свойство элемента управления (в частности, в данном случае тип 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, но я не могу понять, что именно он должен делать или как его использовать. TypeConverter, который можно преобразовать в InstanceDescriptor (см. Пример, приведенный в 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 - тупик ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...