子类控件:( 无论是在设计器中还是在运行代码时,这个问题都很明显。 有没有解决这个问题的方法,因为更新大量控件并将其置于新的控件上似乎是一个障碍?
感谢。
答案 0 :(得分:0)
如果您关闭设计器中的表单并重新打开它,它应该适当更新。如果我不得不猜测,我会认为VS正在缓存控件外观以节省处理时间。
答案 1 :(得分:0)
从一个问题我最初开始使用WinForms并遇到类似的问题......
I resolved with the READONLY option
第一个警告......一旦你设置了一个给定的属性...字体大小,名称,背面颜色,前面的颜色等,只读和编译你的应用程序,每个控件都有这些控件,每个控件都会试着设置一个只读属性的错误。您所要做的就是完成所有错误并删除与这些只读属性关联的行。但是,如果您的应用程序距离不太远,则不应该花太长时间。
一旦完成,每次更改“只读”元素并重新打开表单时,新值将优先于旧值,因为设计器的序列化不会将这些值放入。
一旦你得到那些你想要标准化/限制的元素,你就会陷入困境(只是有点)。即使您可能没有属性的属性getter / setter,您仍然可以使用公共METHOD(设计人员不使用),但在代码中,您可以更改值,例如...
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]和许多其他you can find here。除非您在设计器中明确设置它,否则不会显式包含序列化属性。
希望这能为你提供一些好的东西。
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”是一个静态类,所以对象不必实例化,但是如果你应用这个概念对于你的基类,他们可以有所有类似的视觉冲击,功能,颜色等。