winform在设置控件enabled=false后,无法更改控件字体颜色的问题

时间:2022-08-12 21:29:35

项目界面设计的时候,发现在设置button的enabled=false后,原本设计的字体颜色跟预设的不一样,查了一些资料后,在网上看到这样一段代码:

        [System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern int SetWindowLong(IntPtr hWnd, int nIndex, int wndproc);
[System.Runtime.InteropServices.DllImport(
"user32.dll")]
public static extern int GetWindowLong(IntPtr hWnd, int nIndex);

public const int GWL_STYLE = -16;
public const int WS_DISABLED = 0x8000000;

public static void SetControlEnabled(Control c, bool enabled)
{
if (enabled)
{ SetWindowLong(c.Handle, GWL_STYLE, (
~WS_DISABLED) & GetWindowLong(c.Handle, GWL_STYLE)); }
else
{ SetWindowLong(c.Handle, GWL_STYLE, WS_DISABLED
+ GetWindowLong(c.Handle, GWL_STYLE)); }
}

private void button2_Click(object sender, System.EventArgs e)
{
SetControlEnabled(
this.button1, false);
this.button1.ForeColor = Color.White;
}

就去试了效果,发现刚好实现了我想要的效果,于是便在项目中涉及到控件的enabled设置的地方全部都改成了这种方法。于是,项目运行,反复测试,那么问题就来了~

在反复SetControlEnabled(this.button1, false);后SetControlEnabled(this.button1, true);没有用了,不仅如此,窗口事件全部都不响应了。查了一上午的资料,在偶然的情况下,发现别人的评论,说是把+换成|就可以避免。于是测试,发现prefect!

特此记录下来,方便自己也方便大家。(参考:http://bbs.csdn.net/topics/80106565