Из вопроса у меня изначально был запуск WinForms и у меня были похожие проблемы ...
Я решил с опцией READONLY
Первое предупреждение ... Как только вы установите заданное свойство ... размер шрифта, имя, цвет спины, цвет переднего плана и т. Д. Только для чтения и компиляции приложения, каждая форма содержит эти элементы управления, каждый элемент управления будет Нэг у вас об ошибке, пытаясь установить свойство только для чтения. Все, что вам нужно сделать, это пройти через все ошибки и удалить строки, связанные с этими свойствами только для чтения. Однако, если вы не слишком далеко в своем приложении, это не должно занять слишком много времени.
После того, как ЭТО сделано, каждый раз, когда вы изменяете свой элемент «Только для чтения» и повторно открываете форму, новые значения будут иметь приоритет над старыми, так как сериализация конструктора НЕ будет помещать эти значения в.
Как только вы получите те элементы, которые вы хотите стандартизировать / ограничить, вы несколько застряли (только немного). Даже если у вас может не быть свойства getter / setter для свойства, вы МОЖЕТЕ иметь открытый МЕТОД (который дизайнер не использует), но в коде вы МОЖЕТЕ изменить значение, например ...
public class MyTextBox : TextBox
{
public MyTextBox()
{
myBackColor = "Red";
}
private Color myBackColor
[ReadOnly]
public Color BackColor
{ get { return myBackColor; } }
public void SetNewBackColor( Color anyNewColor )
{
myBackColor = anyNewColor;
}
}
Наконец, для тех, кого вы «очистили» от явного содержимого в конструкторе формы, но не хотите оставлять элементы доступными только для чтения, вы также можете использовать атрибут для
[SerializableAttribute] и многие другие вы можете найти здесь . Это явно не будет включать сериализованный атрибут, если вы явно не установите его в конструкторе.
Надеюсь, это даст вам что-то хорошее, чтобы пережевывать.
using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
namespace WindowsApplication1
{
// Default all textboxes as string value instead of null
[DefaultValue("")]
public class MyTextbox : TextBox
{
// designer serialization is another alternative to preveting the IDE to analyze controls
// at design time, but for other tighter controls, leave explicitly as READONLY...
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
[ReadOnly(true)]
public override Font Font
{ get { return MyConstants.MyFontBase; } }
[ReadOnly(true)]
public override Color ForeColor
{ get { return Color.Red; } }
[ReadOnly(true)]
protected override Padding DefaultPadding
{ get { return MyConstants.MyPadding; } }
// Now, on to the rest of the class definition and interaction if editing mode changed
public MyTextbox()
{
base.Font = Font;
}
}
/// <summary>
/// constants used for common look / feel application wide for all controls
/// such as textbox, label, buttons, comboboxes, etc...
/// </summary>
public class MyConstants
{
public static readonly Color MyColorBlue = Color.Blue;
public static readonly Color MyFontForeColor = Color.Black;
// public static readonly Color MyFontForeColorDisabled = Color.FromArgb(38, 146, 210);
public static readonly Color MyFontForeColorDisabled = Color.Gray;
public static readonly Color MyBackColorFieldRequired = Color.LightBlue;
public static readonly Color MyBackColorFieldInvalid = Color.Red;
public static readonly Color MyBackColorFieldNormal = Color.White;
public static readonly String MyFontBaseName = "Arial";
public static readonly float MyFontBaseSizeHdr = 16F;
public static readonly float MyFontBaseSizeSubHdr = 11F;
public static readonly float MyFontBaseSize = 14F;
public static readonly Font MyFontBase = new Font(MyFontBaseName, MyFontBaseSize, FontStyle.Regular, GraphicsUnit.Point);
public static readonly Font MyFontItalic = new Font(MyFontBaseName, MyFontBaseSize, FontStyle.Italic, GraphicsUnit.Point);
public static readonly Size MyButtonSize = new Size(80, 25);
public static readonly Padding MyPadding = new Padding(2, 0, 2, 0);
}
}
Выше приведен некоторый рабочий код, демонстрирующий основы описанных мною принципов работы. У меня не было на моей другой машине с того момента, когда я ответил, но я был близок ... MyConstants - это статический класс, поэтому объект не нужно создавать, а, в свою очередь, если вы применяете эту концепцию к вашим базовым классам, тогда они ВСЕ могут иметь схожий визуальный эффект, особенности, цвета и т. д.