我创建了一个使用控件作为参数的函数,并使用控件的属性'enable'。
问题是控件有Enable = false,并且在函数内部是真的,
任何想法为什么?
protected override void OnPaint(PaintEventArgs pevent)
{
try
{
...
Shared.DrawTextByAlignment(pevent.Graphics, this, this.TextAlign);
}
catch (Exception ex) { MessageBox.Show("Button:OnPaint\n" + ex.Message);
}
static public void DrawTextByAlignment(Graphics g, Control myControl, ContentAlignment TextAlign)
{
...
Brush myBrush;
if (myControl.Enabled) myBrush = new SolidBrush(myControl.ForeColor);
else myBrush = Brushes.Gray;
...
}
答案 0 :(得分:1)
当传递一个控件时,你几乎普遍都在谈论一个class
/ object-instance,所以你传递的只是控件的引用 - 控件本身是相同的。
一个可能的原因是错误的检查:
if(ctrl.Enabled = true) { // spot the assignment!
DoSomething(ctrl);
}
应该是:
if(ctrl.Enabled == true) {
DoSomething(ctrl);
}
或只是:
if(ctrl.Enabled) {
DoSomething(ctrl);
}
但是编译器会在警告中告诉你......
条件表达式中的赋值始终是常量;你的意思是使用==而不是=?
这只留下几个选项:
Enabled
真的发生了变化,可能是由于状态变化,例如在控制树中移动它Enabled
财产违反所有理智并在检查时发生变化Enabled
属性是特定于线程的,您正在与多个线程进行通信我宁愿期待它成为最后一个选择......
答案 1 :(得分:1)
我认为您可能需要Visible属性而不是启用属性。
因为Enable = false,控件不会创建任何更改
答案 2 :(得分:0)
如果从Control派生类并使用new关键字覆盖Enabled属性,则您的函数仍将访问Control.Enabled。将签名更改为
static public void DrawTextByAlignment(..., MyControl myControl, ...)