【问题标题】:Visual Studio C# Windows Forms... changing button color?Visual Studio C# Windows 窗体...更改按钮颜色?
【发布时间】:2012-03-02 02:23:07
【问题描述】:

我有一个表格(见截图):

如您所见,它是一个非常基本的表单,带有一个保存按钮。我已经对其进行了编程,以便如果任何文本字段发生更改,“保存”按钮会更改颜色,因此很明显我没有单击保存并且不要忘记。不幸的是,仅仅将按钮的 BackColor 更改为红色是不够的,因为它的丑陋就像罪恶一样。

如何将按钮的颜色更改为红色,但不那么难看。如您所见,“BackColor”并没有改变整个按钮,只是改变了内部部分。边框仍然是老式的透明灰色。

【问题讨论】:

  • 也许前景色(而不是背景色)就足够了?
  • 最简单的方法是将应用程序转换为 WPF,您将拥有更大的控制权。由于这是大量的工作,您将不得不继承按钮控件,并更改按钮的绘制方式,如果更改值 BackColor 不能满足您的要求。
  • 我个人会禁用保存按钮,直到发生某些变化。在更改的详细信息上启用,然后在单击时再次禁用它。只是另一种选择:)
  • @Ramhound 我不认为可以给 OP 的更好建议是“完全重写你的应用程序”
  • @ken2k- 他不必“重写”整个应用程序。他所要做的就是使用 Window 类而不是 Win32 类。如果您有更好的解决方案,请提供一个。

标签: c# winforms


【解决方案1】:

一点点LinearGradientBrush 可以大大减轻纯红色按钮的刺耳感。

button1.ForeColor = Color.White;

Bitmap bmp = new Bitmap(button1.Width, button1.Height);
using (Graphics g = Graphics.FromImage(bmp)) {
  Rectangle r = new Rectangle(0, 0, bmp.Width, bmp.Height);
  using (LinearGradientBrush br = new LinearGradientBrush(
                                      r,
                                      Color.Red,
                                      Color.DarkRed,
                                      LinearGradientMode.Vertical)) {
      g.FillRectangle(br, r);
    }
  }

然后您可以将图像分配给按钮的BackgroundImage 属性:

  button1.BackgroundImage = bmp;

结果:

注意:分配背景图片会丢失按钮的鼠标悬停颜色。

【讨论】:

  • 我想知道您是否可以在 BackgroundImage 上使用透明度使其与原始按钮混合。
  • 我将如何删除背景图片?
  • @JasonAxelrod 只需一个简单的button1.BackgroundImage = null; 即可。
  • @LarsTech 我可以从按钮上移除边框
  • @madan 您可以尝试使用按钮的绘制事件。您可能需要重新实现鼠标悬停和鼠标按下的外观和感觉。
【解决方案2】:

另一种解决方案是向按钮添加Icon(例如感叹号),以通知用户尚未保存更改。

【讨论】:

  • 另一种解决方案是自动保存。也可以使用 Ribbon 或 ToolStrip。
【解决方案3】:

网上有很多关于如何使用 c# 创建漂亮按钮的教程。例如,这个允许您创建类似 Vista 的按钮。看看这里:http://www.codeproject.com/Articles/19318/Vista-Style-Button-in-C

对于基本颜色,请访问此 SO 问题:

C#: Changing Button BackColor has no effect

【讨论】:

  • 教程已下架:"We're sorry, but the article you are trying to view was deleted at 18 May 2013."
【解决方案4】:

您可以只使用按钮的属性之一,“FlatStyle”。默认情况下,它是标准的。但是如果你把它切换到“Popup”,你的背景颜色就会扩展到按钮的区域。您可以比较以下几点:

left-standard, right-popup

【讨论】:

  • 欢迎来到 SO!不鼓励重新提出旧问题(2012 年!),尤其是那些已经接受答案的问题。
【解决方案5】:

这在 WinForms 中不起作用,但您可能希望切换到 WPF。 它更方便,因为您可以配置一切。 (甚至是进度条的颜色)

编辑:OP 不必完全重写他的应用程序。 他只需要重做它的布局,代码就可以 C&P'd 到新的 WPF 项目中,仅供参考

Edit²:您甚至不需要使用代码来更改 WPF 按钮的颜色,您只需在 XAML 文件中定义一个不透明度为 30% 的红色叠加层。就这么简单,真的。

【讨论】:

  • 我猜这些反对意见来自从未听说过 WPF 的人。
  • 不,WPF 确实是一项很棒的技术。但是由于 OP 使用的是 Winforms,因此“重写所有应用程序,移至 WPF”的答案是一个非常糟糕的答案。
  • 查看答案的编辑以获取我的答案。 ;) 编辑:@noah1989 是的,因为它向 OP 展示了旧 WinForms 平台的局限性和 WPF 的优势。我一个月前才开始使用 WPF 进行编程,并且已经取得了成效。
  • @ken2k - 这是对所提问题的完全有效答案。作者想知道如何让按钮改变颜色而不是看起来“丑陋”,这给他留下了两个选择。使用 WPF,它可以更好地控制控件或编写自己的按钮控件。
  • 谢天谢地,没有人再支持它了,对吧? ...对吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-17
  • 2021-07-05
  • 2023-03-11
相关资源
最近更新 更多