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