在事件上使TabPage闪烁

时间:2012-08-22 15:25:31

标签: c# winforms notifications tabcontrol

我正处于制作程序的阶段,当事件发生时需要标签页闪烁

我用Google搜索过,我偶然发现了这个问题:Blink tab header on receiving event。这是类似的,但使用WPF,我使用WinForms,我甚至不确定我做了我想要的:L

我也发现了这个:C#: Flash Window in Taskbar via Win32 FlashWindowEx。这就是我想要的,但对整个表格和任务栏来说都很明显,而不是“在形式上”

有人有任何想法吗?

1 个答案:

答案 0 :(得分:2)

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

tabControl1有两个标签,我闪烁标签1(第二个标签)。

对于我扔在一起的例子,我将tabControl1的DrawMode属性设置为“OwnerDrawFixed”,然后设置几个启动/停止计时器的按钮。间隔大约是750毫秒,但你当然可以选择任何东西。在timer1_Tick事件中,我换出当前颜色并告诉tabControl1刷新自己。这将使DrawItem事件被提升,然后我将矩形绘制为当前颜色(如果是标签页1)或者背景颜色(如果不是)。然后我绘制tabpage的文本。

有效。可以肯定使用一些调整。给它一个旋转!

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);
    }
}