gpt4 book ai didi

c# - 闪烁的 ToolStripButton

转载 作者:行者123 更新时间:2023-12-03 22:56:24 25 4
gpt4 key购买 nike

我正在使用带有多个 ToolStripButtonToolStrip

我想要的是能够使其中一个按钮闪烁以引起用户的注意。

例如,如果他们更改了信息并需要点击保存按钮。

如果这是一个普通按钮,我可以使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com