按钮被禁用时如何避免颜色变化?

我们有一个Windows Forms项目,有很多FlatStyle按钮。

当我们禁用按钮时,按钮的颜色会自动更改Frown | 🙁

有可能以某种方式覆盖它,所以我们可以自己控制颜色吗?

您需要使用EnabledChanged事件来设置所需的颜色。 这是一个例子。

private void Button1_EnabledChanged(object sender, System.EventArgs e) { Button1.ForeColor = sender.enabled == false ? Color.Blue : Color.Red; Button1.BackColor = Color.AliceBlue; } 

根据您的要求使用所需的颜色。

您还需要使用paint事件。

 private void Button1_Paint(object sender, System.Windows.Forms.PaintEventArgs e) { dynamic btn = (Button)sender; dynamic drawBrush = new SolidBrush(btn.ForeColor); dynamic sf = new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center }; Button1.Text = string.Empty; e.Graphics.DrawString("Button1", btn.Font, drawBrush, e.ClipRectangle, sf); drawBrush.Dispose(); sf.Dispose(); } 

要获得较少模糊的文本,请改用TextRenderer类:

 private void Button1_Paint(object sender, PaintEventArgs e) { Button btn = (Button)sender; // make sure Text is not also written on button btn.Text = string.Empty; // set flags to center text on button TextFormatFlags flags = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter | TextFormatFlags.WordBreak; // center the text // render the text onto the button TextRenderer.DrawText(e.Graphics, "Hello", btn.Font, e.ClipRectangle, btn.ForeColor, flags); } 

与Harsh的答案中的Button1_EnabledChanged方法一样。

我遵循以下方法: – 可以使用自定义变量控制按钮的Click()事件。

 private bool btnDisabled; private void btnClick(object sender, EventArgs e){ if(!btnDisabled) return;} 

这样,甚至不需要禁用按钮。 该按钮仍然具有点击感,但不会采取任何操作。 必须使用正确的颜色来表示按钮被禁用。

当按钮被部分重绘时,我使用ClientRectangle而不是e.ClipRectangle来避免剪辑效果:

 e.Graphics.Clear(BackColor); using (var drawBrush = new SolidBrush(ForeColor)) using (var sf = new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center }) { e.Graphics.DrawString(Text, Font, drawBrush, ClientRectangle, sf); }