2012-08-22 29 views
0

我在做一個計劃,將需要一個標籤頁時,事件發生就事件

我用Google搜索周圍閃爍的階段是一個TabPage的閃光燈,我碰到這樣的:Blink tab header on receiving event。這是類似的,但使用WPF,我使用的WinForms,我甚至不知道這是否做我想要的:L

我也發現這個:C#: Flash Window in Taskbar via Win32 FlashWindowEx。這是我想要的,但顯而易見的整個形式,並在任務欄中,不'在'形式'

任何人有任何想法?

回答

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

很好,謝謝:) – LordAro