我正处于制作程序的阶段,当事件发生时需要标签页闪烁
我用Google搜索过,我偶然发现了这个问题:Blink tab header on receiving event。这是类似的,但使用WPF,我使用WinForms,我甚至不确定我做了我想要的:L
我也发现了这个:C#: Flash Window in Taskbar via Win32 FlashWindowEx。这就是我想要的,但对整个表格和任务栏来说都很明显,而不是“在形式上”
有人有任何想法吗?
答案 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);
}
}