C# Winforms: управление наследованием и использованием в дизайнереC#

Место общения программистов C#
Ответить
Anonymous
 C# Winforms: управление наследованием и использованием в дизайнере

Сообщение Anonymous »

Я «создал» RichTextLabel, по сути, RichTextBox с некоторыми свойствами для таблицы цветов и другими материалами в формате rtf. Некоторые свойства RichTextBox инициализируются в конструкторе значениями, отличными от значений по умолчанию, поэтому он действует скорее как Label, чем как TextBox (например, для BorderStyle установлено значение none, для BackColor установлено значение control, для ReadOnly установлено значение true и так далее). Все работает.
Теперь я использую эту RichTextLabel в пользовательском элементе управления. Я помещаю его в элемент управления, проектирую элемент управления, все подключаю, и в дизайнере все выглядит правильно.
У этого пользовательского элемента управления есть свойство Title для прямого доступа к тексту метки, а также сама метка как общедоступная собственность, поэтому я не нужно создавать свойства для каждого конкретного материала в формате rtf на этикетке, который может вообще не понадобиться. Это общедоступное свойство украшено атрибутом DesignerSerializationVisibility, для которого установлено значение содержимого.
Проблема: когда его перетаскивают в форму, сначала все выглядит нормально. BorderStyle RichTextLabel по-прежнему имеет значение None. Но когда я закрываю форму в дизайнере и снова открываю ее, граница устанавливается на 3dFixed. BackColor — это Window и т. д., свойства RichTextBox по умолчанию, а не те, которые я использовал в конструкторе RichTextLabel.
Может быть, дизайнер использует атрибут DefaultValue из базового класса, поскольку мой класс не переопределяет свойства (некоторые из них не переопределяются) и не может объявить новое значение DefaultValue для этих свойств?
Есть идеи, как это решить?
public sealed class RichTextLabel : RichTextBox
{
[Editor(typeof(MultilineStringEditor), typeof(UITypeEditor))]
public string RtfText { ... }
public Color Color1 { ... }
public Color Color2 { ... }
public Color Color3 { ... }

public RichTextLabel()
{
ReadOnly = true;
BorderStyle = BorderStyle.None;
TabStop = false;
ScrollBars = RichTextBoxScrollBars.None;
BackColor = SystemColors.Control;

SetStyle(ControlStyles.Selectable, false);
SetStyle(ControlStyles.UserMouse, true);

NativeMethods.HideCaret(Handle);
}
}

public class UserControl1 : UserControl
{
[Editor(typeof(MultilineStringEditor), typeof(UITypeEditor))]
public string Title { get => richTextLabel1.RtfText; set => richTextLabel1.RtfText = value; }

[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public RichTextLabel TitleLabel
{
get => richTextLabel1;
set => richTextLabel1 = value;
}
}


Подробнее здесь: https://stackoverflow.com/questions/791 ... n-designer
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»