- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用带有多个 ToolStripButton
的 ToolStrip
。
我想要的是能够使其中一个按钮闪烁以引起用户的注意。
例如,如果他们更改了信息并需要点击保存按钮。
如果这是一个普通按钮,我可以使用 Timer
并定期更改 BackColor
来执行此操作,但这不适用于 ToolStrip
.
我可以创建一个 Renderer 子类并将其分配给 ToolStrip
但这似乎只在特定情况下使用 - 即它是事件驱动的。
有没有人有什么想法?
最佳答案
好吧,只需使用自定义渲染器即可更改按钮背景的颜色。带有一个闪烁的计时器。向您的项目添加一个新类并粘贴此代码:
using System;
using System.Drawing;
using System.Collections.Generic;
using System.Windows.Forms;
class BlinkingButtonRenderer : ToolStripProfessionalRenderer {
public BlinkingButtonRenderer(ToolStrip strip) {
this.strip = strip;
this.strip.Renderer = this;
this.strip.Disposed += new EventHandler(strip_Disposed);
this.blinkTimer = new Timer { Interval = 500 };
this.blinkTimer.Tick += delegate { blink = !blink; strip.Invalidate(); };
}
public void BlinkButton(ToolStripButton button, bool enable) {
if (!enable) blinkButtons.Remove(button);
else blinkButtons.Add(button);
blinkTimer.Enabled = blinkButtons.Count > 0;
strip.Invalidate();
}
protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e) {
var btn = e.Item as ToolStripButton;
if (blink && btn != null && blinkButtons.Contains(btn)) {
Rectangle bounds = new Rectangle(Point.Empty, e.Item.Size);
e.Graphics.FillRectangle(Brushes.Black, bounds);
}
else base.OnRenderButtonBackground(e);
}
private void strip_Disposed(object sender, EventArgs e) {
blinkTimer.Dispose();
}
private List<ToolStripItem> blinkButtons = new List<ToolStripItem>();
private bool blink;
private Timer blinkTimer;
private ToolStrip strip;
}
在带有包含按钮的工具条的表单中的示例用法:
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
blinker = new BlinkingButtonRenderer(toolStrip1);
}
private void toolStripButton1_Click(object sender, EventArgs e) {
blink = !blink;
blinker.BlinkButton(toolStripButton1, blink);
}
private bool blink;
private BlinkingButtonRenderer blinker;
}
关于c# - 闪烁的 ToolStripButton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11776057/
我正在使用带有多个 ToolStripButton 的 ToolStrip。 我想要的是能够使其中一个按钮闪烁以引起用户的注意。 例如,如果他们更改了信息并需要点击保存按钮。 如果这是一个普通按钮,我
我有一个文本框、一个标准按钮和一个包含几个按钮的工具条。在文本框的验证事件中,我编码以检查它是否为空白。如果是,那么它会显示一条消息“输入值”。当单击标准按钮时文本框为空,它正在正确验证并显示消息,但
我的工具条中有一个工具条按钮,我希望在鼠标悬停时移除橙色灯光,因为我会动态更改按钮的图片.. 我该怎么做? 最佳答案 你的英语差得无可挑剔,所以我会尽力翻译。 我假设您希望在单击工具条按钮后更改它的图
如何在用户登录后从 MDIparent 禁用或隐藏 ToolStripButton? 例如,在登录表单中:如果用户输入的用户名不是 admin,则某个 ToolStripButton 将被禁用或隐藏。
有一个带有 ToolStrip 的窗体。此 ToolStrip 包含一个 ToolStripButton。我想为这个按钮分配一个图像: this.btnSaveFile.Image = Bitmap.
我想在用户将鼠标悬停在特定的 ToolStripButton 上时更改用户的光标,但不希望更改 ToolStrip 上的其他项目。如何设置按钮的光标? 最佳答案 因为 ToolStripItem 没有
我正在尝试将工具提示应用于工具条按钮,但它一直给我这个错误: 运算符“==”不能应用于“System.Windows.Forms.Control”和“System.Windows.Forms.Tool
我试图用图像显示自己的自定义工具提示,但 native 工具提示让一切变得糟糕。它仍然出现在不需要的地方。 我以这种方式创建 ToolStripButton: ToolStripButton btn
我正在实例化我自己的 ToolStripButton并将其添加到 ContextMenuStrip .它弹出,但文本被切断: string[] layouts = new string[]{"Test
我正在学习 WPF 并一直在尝试创建工具条。是否有 WinForms ToolStripButton 的直接等价物,还是仅添加普通按钮并对其进行格式化的正确使用方法? 我发现 Microsoft 有一
我有一个工具条,其中包含一个 ToolStripComboBox 和一个 ToolStripButton。我想向它们添加一个 ContextMenuStrip,但我无法直接访问工具条或其其他内容,因此
我有一个 WinForms 应用程序,其中包含一个带有 ToolStripButtons 的 ToolStrip。某些按钮操作会在按钮操作发生时禁用主窗体,并在完成后重新启用它。这样做是为了确保用户在
我正在覆盖 OnRenderButtonBackground方法以使用自定义着色,但我想知道鼠标当前是否在按钮上。 我试图获取父控件(工具条)和父窗体并将所有坐标添加在一起,但这不正确: Privat
我正在以编程方式将 ToolStripButton 项添加到上下文菜单。 那部分很简单。 this.tsmiDelete.DropDownItems.Add("The text on the item
我想将一些图像放入 ToolStripButton 中,并根据按钮的状态更改图像。 所以我将 ToolStrip 的 .ImageList 设置为我的 ImageList 并简单地更改 ToolStr
我有一个图像工具栏,我想要图像下方的文本标签。如果文本标签是多个单词,我想垂直堆叠单词。我该怎么做? 最佳答案 详细说明保罗的回答: 你不能在设计时做多行。但是在运行时,您可以像这样设置每个 Tool
我有自定义工具条按钮 BindableToolStripButton : ToolStripButton 效果很好,但我不知道是否可以将此项目添加到设计菜单中的控件.. 我可以将我的 Bindable
我的应用程序中有工具栏和具有相同选项的上下文菜单,所以我想将 ToolStripButtons 添加到 ContextMenuStrip 和 ToolStrip,不幸的是我不能这样做。即使我手动向两者
我有一个问题,场景如下: 我用一个组件 PropertyGrid 创建了用户控件。对于此 PropertyGrid,我将按钮(十六进制模式)添加到 PropertyGrid 的 ToolStrip。一
我有一个用作单选按钮的 ToolStripButton。选中时,按钮周围有蓝色轮廓,但没有背景色。对于用户来说按钮被勾选还不够清楚,所以我想改变背景颜色,让勾选状态更明显。 当 Checked 属性设
我是一名优秀的程序员,十分优秀!