我有一个继承自System.Windows.Forms.TextBox
。
基本上我将其设置为每次文本更改时自动检查输入的值是否为数字。示例代码:
public class MyTextBox : TextBox {
public MyTextBox() : base() {
base.TextChanged += MyTextBox_TextChanged;
base.BackColor = Color.White;
base.ForeColor = Color.Black;
}
private void MyTextBox_TextChanged(object sender, EventArgs e) {
try {
int.Parse(base.Text);
base.BackColor = Color.White;
base.ForeColor = Color.Black;
} catch(FormatException) {
base.BackColor = Color.Red;
base.ForeColor = Color.White;
}
}
}
如上所示,我分别拥有White
和Black
的默认背景和前景,但WinForms设计器将组件绘制为具有红色背景,当我启动时它会出现这种情况该计划也是如此。然而,当我开始输入数字时,它确实会变回黑/白,否则表现得像预期的那样。
但为什么控件似乎会覆盖我在构造函数中设置的属性?最初绘制控件时,文本没有更改......或者是它?
答案 0 :(得分:1)
将控件放到窗体上时,窗体设计器会保存其当前属性。
这包括:
构造表单时,会将这些属性设置回控件。
在控件的构造函数中,您将背景颜色设置为白色,但不要更改文本,因此text属性保持为空字符串。
无法解析此空字符串,因此现在我们有两种可能的情况:
控件属性按字母顺序设置(如果我没有弄错的话),所以第一个场景是你看到的场景。
简而言之,您有几种方法可以解决这个问题:
0
可以想到)