Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么启用在函数中更改为true?_C#_Function_Controls - Fatal编程技术网

C# 为什么启用在函数中更改为true?

C# 为什么启用在函数中更改为true?,c#,function,controls,C#,Function,Controls,我创建了一个使用控件作为参数的函数,并使用控件的属性“enable” 问题是控件的Enable=false在函数中为true 你知道为什么吗 protected override void OnPaint(PaintEventArgs pevent) { try { ... Shared.DrawTextByAlignment(pevent.Graphics, this, this.TextAlign); } catch (Exception e


我创建了一个使用控件作为参数的函数,并使用控件的属性“enable”

问题是控件的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); 
}


传递控件时,几乎所有人都在谈论
/对象实例,因此传递的只是对控件的引用-控件本身是相同的

一个可能的原因是检查不正确:

if(ctrl.Enabled = true) { // spot the assignment!
    DoSomething(ctrl);
}
应该是:

if(ctrl.Enabled == true) {
    DoSomething(ctrl);
}
或者只是:

if(ctrl.Enabled) {
    DoSomething(ctrl);
}
但是编译器会在警告中告诉你

条件表达式中的赋值总是常量;你的意思是用==代替=

这只剩下几个选项:

  • 启用的
    已真正更改,可能是由于状态更改,例如在控制树中移动它
  • 已启用
    属性不符合检查时的所有健全性和更改
  • Enabled
    属性是特定于线程的,您可以从多个线程与它对话
  • 或者,您的代码中还存在其他一些问题,您的问题没有告诉我们,但源代码可能会告诉我们

我希望它是最后一个选项…

我认为您可能需要Visible属性,而不是enabled属性


由于Enable=false,如果从控件派生类并使用new关键字重写Enabled属性,则控件不会创建任何更改,因此函数仍将访问control.Enabled。将签名更改为

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

您好-我们需要一些代码和您正在使用的控件类型。我,您能和我们分享一下您正在谈论的方法吗?您能展示一下您函数的代码吗?什么时候Enabled==false,什么时候变为true?尝试在不同时间调试应用程序并检查Enabled属性,以查看它何时更改值。在setter上为控件的属性设置调试断点。允许您查看哪些内容会影响该值。我在调试后编写了此问题。enable属性不会仅在该函数创建的控件的副本中真正更改created@unicorn该编辑不允许我查看与启用的
上的2个检查相关的任何内容,也不允许我查看该方法的调用方式。简而言之,除了“您有一个名为
DrawTextByAlignment
”的方法外,这告诉我什么都没有。我希望它是通用的,这样我就可以用我的任何控件来实现它,而无需为它创建新的函数each@unicorn-那么最好不要覆盖Enabled,而是处理EnabledChanged事件。显示已启用的实现的代码。
static public void DrawTextByAlignment(..., MyControl myControl, ...)