【问题标题】:why Enable changed to true in function?为什么Enable在函数中改为true?
【发布时间】:2011-02-01 08:21:18
【问题描述】:


我制作了一个使用控件作为参数的函数,并使用控件的属性“启用”。

问题是控件的 Enable=false 并且在函数内部它是 true,

有什么想法吗?

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;            

    ...
}

【问题讨论】:

  • 嗨 - 我们需要一些代码和您正在使用的控件类型
  • 您好,可以分享一下您说的方法吗?
  • 你能显示你的函数的代码吗?什么时候Enabled==false,什么时候变成true?尝试调试您的应用并在不同时间检查 Enabled 属性以查看它何时更改值。
  • 在控件属性的设置器上设置调试断点。让你看到触动的价值。
  • 我在调试之后写了这个问题。 enable 属性并没有真正改变只是在函数创建的控件副本中

标签: c# function controls


【解决方案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 属性是特定于线程的,您正在从多个线程与其对话
  • 或者,您的代码中还有其他问题没有告诉我们,但来源可能

我宁愿希望它是最后的选择......

【讨论】:

  • @unicorn 的编辑不允许我看到与您对Enabled 的 2 次检查相关的任何内容,也不允许我看到该方法是如何被调用的。简而言之,除了“你有一个名为 DrawTextByAlignment 的方法”
【解决方案2】:

我认为您可能需要 Visible 属性而不是启用属性。

因为 Enable = false 控件不会创建任何更改

【讨论】:

    【解决方案3】:

    如果您从 Control 派生一个类并使用 new 关键字覆盖 Enabled 属性,您的函数仍将访问 Control.Enabled。将签名更改为

    static public void DrawTextByAlignment(..., MyControl myControl, ...)
    

    【讨论】:

    • 我希望它是通用的,所以我可以使用我的任何控件来完成它,而无需为每个控件创建新功能
    • @unicorn - 那么也许最好不要覆盖 Enabled 而是例如处理 EnabledChanged 事件。显示您的 Enabled 实现代码。
    猜你喜欢
    • 2013-02-02
    • 2012-09-23
    • 2020-11-20
    • 2013-11-11
    • 2018-01-28
    • 2012-07-06
    相关资源
    最近更新 更多