0

我正在制作一个程序,当事件发生时需要一个标签页闪烁

我用谷歌搜索了一下,发现了这个:Blink tab header on received event。这很相似,但使用 WPF,我使用的是 WinForms,我什至不确定它是否符合我的要求:L

我还发现了这个:C#: Flash Window in Taskbar via Win32 FlashWindowEx。这就是我想要的,但对于整个表单和任务栏中,而不是“在表单中”是显而易见的

有人有什么想法吗?

4

1 回答 1

2

我并不是说这是实现这一目标的最佳方式,甚至是一种很好的方式,但它确实有效。当我需要类似的东西时,我使用了类似的代码。

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);
    }
}
于 2012-08-22T16:05:34.857 回答