Я «создал» 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
C# Winforms: управление наследованием и использованием в дизайнере ⇐ C#
Место общения программистов C#
-
Anonymous
1730272550
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;
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79139995/c-sharp-winforms-control-inheritance-and-usage-in-designer[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия