为什么Enable在功能上改为true?

时间:2011-02-01 08:21:19

标签: c# function controls


我创建了一个使用控件作为参数的函数,并使用控件的属性'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;            

    ...
}

3 个答案:

答案 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, ...)