我正在制作一个程序,当事件发生时需要一个标签页闪烁
我用谷歌搜索了一下,发现了这个:Blink tab header on received event。这很相似,但使用 WPF,我使用的是 WinForms,我什至不确定它是否符合我的要求:L
我还发现了这个:C#: Flash Window in Taskbar via Win32 FlashWindowEx。这就是我想要的,但对于整个表单和任务栏中,而不是“在表单中”是显而易见的
有人有什么想法吗?
我正在制作一个程序,当事件发生时需要一个标签页闪烁
我用谷歌搜索了一下,发现了这个:Blink tab header on received event。这很相似,但使用 WPF,我使用的是 WinForms,我什至不确定它是否符合我的要求:L
我还发现了这个:C#: Flash Window in Taskbar via Win32 FlashWindowEx。这就是我想要的,但对于整个表单和任务栏中,而不是“在表单中”是显而易见的
有人有什么想法吗?
我并不是说这是实现这一目标的最佳方式,甚至是一种很好的方式,但它确实有效。当我需要类似的东西时,我使用了类似的代码。
tabControl1 有两个选项卡,我闪烁选项卡 1(第二个选项卡)。
对于我放在一起的示例,我将 tabControl1 的DrawMode
属性设置为“OwnerDrawFixed”,然后设置几个按钮来启动/停止计时器。间隔大约是 750 毫秒,但您当然可以选择任何值。在一个timer1_Tick
事件中,我换出当前颜色并告诉它tabControl1
自己刷新。这将使DrawItem
事件被引发,然后我将矩形绘制为当前颜色(如果它是标签页 1)或背景色(如果不是)。然后我绘制标签页的文本。
有用。可以肯定地使用一些调整。试一试!
public partial class Form1 : Form
{
Color currentColor = Color.Green;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
if (currentColor == Color.Yellow)
currentColor = Color.Green;
else
currentColor = Color.Yellow;
tabControl1.Refresh();
}
private void button2_Click(object sender, EventArgs e)
{
timer1.Stop();
}
private void tabControl1_DrawItem(object sender, DrawItemEventArgs e)
{
if (timer1.Enabled && e.Index == 1)
{
e.Graphics.FillRectangle(new SolidBrush(currentColor), e.Bounds);
}
else
{
e.Graphics.FillRectangle(new SolidBrush(this.BackColor), e.Bounds);
}
Rectangle paddedBounds = e.Bounds;
paddedBounds.Inflate(-2, -2);
e.Graphics.DrawString(tabControl1.TabPages[e.Index].Text, this.Font, SystemBrushes.HighlightText, paddedBounds);
}
}