在做WinForm開發時,我們經常用到的提示恐怕就是MessageBox。但是有時提示過於頻繁導致使用者無法工作,比如,如果系統一直在迴圈嘗試串連到伺服器,如果串連不上則會迴圈提示使用者無法串連伺服器。這種情況下,恐怕用MessageBox就有點暴力啦。
替代方法,可以換成把提示顯示在表單介面上,但是不夠醒目,那怎樣好呢,QQ提示窗,有動畫的效果又不會頻繁的提示,好的問題解決。那麼看看怎麼實現吧
實現QQ提示框,核心是用到系統庫user32.dll
代碼1:
[DllImport("user32.dll")]
public static extern bool AnimateWindow(IntPtr hwnd, int dateTime, int dwFlags);//以動畫效果繪製表單
在添加了對庫函數的引用之後,下一步就是建立一個表單了,用來顯示系統的提示訊息。在表單上放一個Label用來顯示訊息內容。
代碼2:
public partial class Message : Office2007Form
{
#region 表單顯示參數
private int currentX;//橫座標
private int currentY;//縱座標
private int screenHeight;//螢幕高度
private int screenWidth;//螢幕寬度
int AW_ACTIVE = 0x20000; //啟用視窗,在使用了AW_HIDE標誌後不要使用這個標誌
int AW_HIDE = 0x10000;//隱藏視窗
int AW_BLEND = 0x80000;// 使用淡入淡出效果
int AW_SLIDE = 0x40000;//使用滑動類型動畫效果,預設為滾動動畫類型,當使用AW_CENTER標誌時,這個標誌就被忽略
int AW_CENTER = 0x0010;//若使用了AW_HIDE標誌,則使視窗向內重疊;否則向外擴充
int AW_HOR_POSITIVE = 0x0001;//自左向右顯示視窗,該標誌可以在滾動動畫和滑動動畫中使用。使用AW_CENTER標誌時忽略該標誌
int AW_HOR_NEGATIVE = 0x0002;//自右向左顯示視窗,該標誌可以在滾動動畫和滑動動畫中使用。使用AW_CENTER標誌時忽略該標誌
int AW_VER_POSITIVE = 0x0004;//自頂向下顯示視窗,該標誌可以在滾動動畫和滑動動畫中使用。使用AW_CENTER標誌時忽略該標誌
int AW_VER_NEGATIVE = 0x0008;//自下向上顯示視窗,該標誌可以在滾動動畫和滑動動畫中使用。使用AW_CENTER標誌時忽略該標誌
#endregion
public Message()
{
InitializeComponent();
}
public Message(string message)
{
InitializeComponent();
label1.Text = message;
}
private void Message_Load(object sender, EventArgs e)
{
Rectangle rect = Screen.PrimaryScreen.WorkingArea;//擷取工作區
screenHeight = rect.Height;//擷取工作區的高度
screenWidth = rect.Width;//擷取工作區的寬度
currentX = screenWidth - this.Width; //擷取繪製表單的橫座標
currentY = screenHeight - this.Height;//擷取繪製表單的縱座標
this.Location = new System.Drawing.Point(currentX, currentY);
PDLL.AnimateWindow(this.Handle, 1000, AW_SLIDE | AW_VER_NEGATIVE);
timer1.Enabled = true;
}
//這裡我加了Timer控制項,控制提示框的顯示時間,提示窗顯示一定時間就隱藏
private void timer1_Tick(object sender, EventArgs e)
{
this.label1.Text = "";
if (this.WindowState==FormWindowState.Normal)
{
this.Hide();
timer1.Enabled = false;
}
}
}
在主視窗中,當遇到需要提示訊息時則執行個體化提示窗,並顯示提示窗。但是我的是在多線程中使用,當我執行個體化訊息提示窗後,調用表單的show()方法,表單無法正常顯示,於是調用了ShowDialog(),表單正常顯示。
代碼3:
m.ShowMessage = "無法正常串連到裝置";
m.ShowDialog();