欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

WindowsForm實現(xiàn)警告消息框的實例代碼

 更新時間:2020年07月18日 09:23:47   作者:zhuanghamiao  
這篇文章主要介紹了WindowsForm如何實現(xiàn)警告消息框,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下

警告消息框主要是用來向用戶戶展示諸如警告、異常、完成和提示消息。一般實現(xiàn)的效果就是從系統(tǒng)窗口右下角彈出,然后加上些簡單的顯示和消失的動畫。

創(chuàng)建警告框窗口

首先我們創(chuàng)建一個警告框窗口(Form),將窗口設(shè)置為無邊框(FormBoderStyle=None),添加上圖片和內(nèi)容顯示控件

創(chuàng)建好警告框后,我們先讓他能夠從窗口右下角顯示出來,

  public partial class AlertMessageForm : Form
  {
    public AlertMessageForm()
    {
      InitializeComponent();
    }

    private int x, y;

    public void Show(string message)
    {
      this.StartPosition = FormStartPosition.Manual;
      this.x = Screen.PrimaryScreen.WorkingArea.Width - this.Width;
      this.y = Screen.PrimaryScreen.WorkingArea.Height - this.Height;
      this.Location = new Point(x, y);
      labelContent.Text = message;
      this.Show();
    }
  }

警告框顯示和關(guān)閉動畫

添加一個計時器,通過時鐘控制窗口背景漸入和淡出

  // 警告框的行為(顯示,停留,退出)
  public enum AlertFormAction
  {
    Start,
    Wait,
    Close
  }

  public partial class AlertMessageForm : Form
  {
    public AlertMessageForm()
    {
      InitializeComponent();
    }

    private int x, y;
    private AlertFormAction action;

    private void timer1_Tick(object sender, EventArgs e)
    {
      switch (action)
      {
        case AlertFormAction.Start:
          timer1.Interval = 50;//警告顯示的時間
          this.Opacity += 0.1;
          if (this.Opacity == 1.0)
          {
            action = AlertFormAction.Wait;
          }
          break;
        case AlertFormAction.Wait:
          timer1.Interval = 3000;//警告框停留時間
          action = AlertFormAction.Close;
          break;
        case AlertFormAction.Close:
          timer1.Interval = 50;//警告退出的時間
          this.Opacity -= 0.1;
          if (this.Opacity == 0.0)
          {
            this.Close();
          }
          break;
        default:
          break;
      }
    }

    public void Show(string message)
    {
      //設(shè)置窗口啟始位置
      this.StartPosition = FormStartPosition.Manual;
      this.x = Screen.PrimaryScreen.WorkingArea.Width - this.Width;
      this.y = Screen.PrimaryScreen.WorkingArea.Height - this.Height;
      this.Location = new Point(x, y);

      labelContent.Text = message;
      this.Opacity = 0.0;

      this.Show();

      action = AlertFormAction.Start;
      //啟動時鐘
      timer1.Start();
    }
  }

處理多種不同類型的警告框

添加AlertType枚舉,讓警告框顯示不同類型的消息,根據(jù)消息類型變換不同的消息主題顏色,并未Show方法添加警告框類型參數(shù)

  public enum AlertType
  {
    Info,
    Success,
    Warning,
    Error
  }

 // 設(shè)置警告框主題
 private void SetAlertTheme(AlertType type)
 {
   switch (type)
   {
     case AlertType.Info:
       this.pictureBox1.Image = Properties.Resources.info;
       this.BackColor = Color.RoyalBlue;
       break;
     case AlertType.Success:
       this.pictureBox1.Image = Properties.Resources.success;
       this.BackColor = Color.SeaGreen;
       break;
     case AlertType.Warning:
       this.pictureBox1.Image = Properties.Resources.warning;
       this.BackColor = Color.DarkOrange;
       break;
     case AlertType.Error:
       this.pictureBox1.Image = Properties.Resources.error;
       this.BackColor = Color.DarkRed;
       break;
     default:
       break;
   }
 }

 // 顯示警告框
 public void Show(string message, AlertType type){
  // ...
  SetAlertTheme(type);
 }

處理多個警告框重疊問題

當然,完成上面的處理是不夠的,當有多個消息的時候,消息框會重疊在一起;多個消息時,需要將消息窗口按一定的規(guī)則排列,這里我們設(shè)置每個消息窗口間隔一定的距離

    public void Show(string message, AlertType type)
    {
      // 設(shè)置窗口啟始位置
      this.StartPosition = FormStartPosition.Manual;

      // 設(shè)置程序每個打開的消息窗口的位置,超過10個就不做處理,這個可以根據(jù)自己的需求設(shè)定
      string fname;
      for (int i = 1; i < 10; i++)
      {
        fname = "alert" + i.ToString();
        AlertMessageForm alert = (AlertMessageForm)Application.OpenForms[fname];
        if (alert == null)
        {
          this.Name = fname;
          this.x = Screen.PrimaryScreen.WorkingArea.Width - this.Width;
          this.y = Screen.PrimaryScreen.WorkingArea.Height - this.Height * i - 5 * i;
          this.Location = new Point(x, y);
          break;
        }
      }

      labelContent.Text = message;
      this.Opacity = 0.0;
      SetAlertTheme(type);
      this.Show();

      action = AlertFormAction.Start;
      //啟動時鐘
      timer1.Start();
    }

鼠標懸停警告框處理

想要警告框停留的時間長一些,一中方式是直接設(shè)置警告框停留的時間長一些,另一種方式是通過判斷鼠標在警告框窗口是否懸停,所以可以通過鼠標的懸停和離開事件進行處理

    private void AlertMessageForm_MouseMove(object sender, MouseEventArgs e)
    {
      this.Opacity = 1.0;
      timer1.Interval = int.MaxValue;//警告框停留時間
      action = AlertFormAction.Close;
    }

    private void AlertMessageForm_MouseLeave(object sender, EventArgs e)
    {
      this.Opacity = 1.0;
      timer1.Interval = 3000;//警告框停留時間
      action = AlertFormAction.Close;
    }

警告框的完整代碼

  public enum AlertType
  {
    Info,
    Success,
    Warning,
    Error
  }

  public enum AlertFormAction
  {
    Start,
    Wait,
    Close
  }

  public partial class AlertMessageForm : Form
  {
    public AlertMessageForm()
    {
      InitializeComponent();
    }

    private int x, y;
    private AlertFormAction action;

    private void timer1_Tick(object sender, EventArgs e)
    {
      switch (action)
      {
        case AlertFormAction.Start:
          timer1.Interval = 50;//警告顯示的時間
          this.Opacity += 0.1;
          if (this.Opacity == 1.0)
          {
            action = AlertFormAction.Wait;
          }
          break;
        case AlertFormAction.Wait:
          timer1.Interval = 3000;//警告框停留時間
          action = AlertFormAction.Close;
          break;
        case AlertFormAction.Close:
          timer1.Interval = 50;//警告關(guān)閉的時間
          this.Opacity -= 0.1;
          if (this.Opacity == 0.0)
          {
            this.Close();
          }
          break;
        default:
          break;
      }
    }

    public void Show(string message, AlertType type)
    {
      // 設(shè)置窗口啟始位置
      this.StartPosition = FormStartPosition.Manual;

      // 設(shè)置程序每個打開的消息窗口的位置,超過10個就不做處理,這個可以根據(jù)自己的需求設(shè)定
      string fname;
      for (int i = 1; i < 10; i++)
      {
        fname = "alert" + i.ToString();
        AlertMessageForm alert = (AlertMessageForm)Application.OpenForms[fname];
        if (alert == null)
        {
          this.Name = fname;
          this.x = Screen.PrimaryScreen.WorkingArea.Width - this.Width;
          this.y = Screen.PrimaryScreen.WorkingArea.Height - this.Height * i - 5 * i;
          this.Location = new Point(x, y);
          break;
        }
      }

      labelContent.Text = message;
      this.Opacity = 0.0;
      SetAlertTheme(type);
      this.Show();

      action = AlertFormAction.Start;
      //啟動時鐘
      timer1.Start();
    }

    private void AlertMessageForm_MouseMove(object sender, MouseEventArgs e)
    {
      this.Opacity = 1.0;
      timer1.Interval = int.MaxValue;//警告框停留時間
      action = AlertFormAction.Close;
    }

    private void AlertMessageForm_MouseLeave(object sender, EventArgs e)
    {
      this.Opacity = 1.0;
      timer1.Interval = 3000;//警告框停留時間
      action = AlertFormAction.Close;
    }

    private void buttonClose_Click(object sender, EventArgs e)
    {
      // 注銷鼠標事件
      this.MouseLeave-= new System.EventHandler(this.AlertMessageForm_MouseLeave);
      this.MouseMove -= new System.Windows.Forms.MouseEventHandler(this.AlertMessageForm_MouseMove);

      timer1.Interval = 50;//警告關(guān)閉的時間
      this.Opacity -= 0.1;
      if (this.Opacity == 0.0)
      {
        this.Close();
      }
    }

    // 設(shè)置警告框主題
    private void SetAlertTheme(AlertType type)
    {
      switch (type)
      {
        case AlertType.Info:
          this.pictureBox1.Image = Properties.Resources.info;
          this.BackColor = Color.RoyalBlue;
          break;
        case AlertType.Success:
          this.pictureBox1.Image = Properties.Resources.success;
          this.BackColor = Color.SeaGreen;
          break;
        case AlertType.Warning:
          this.pictureBox1.Image = Properties.Resources.warning;
          this.BackColor = Color.DarkOrange;
          break;
        case AlertType.Error:
          this.pictureBox1.Image = Properties.Resources.error;
          this.BackColor = Color.DarkRed;
          break;
        default:
          break;
      }
    }
  }

以上就是WindowsForm實現(xiàn)警告消息框的實例代碼的詳細內(nèi)容,更多關(guān)于WindowsForm實現(xiàn)警告消息框的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#任務(wù)并行Parellel.For和Parallel.ForEach

    C#任務(wù)并行Parellel.For和Parallel.ForEach

    這篇文章介紹了C#任務(wù)并行Parellel.For和Parallel.ForEach的用法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • unity實現(xiàn)文字滾動效果

    unity實現(xiàn)文字滾動效果

    這篇文章主要為大家詳細介紹了unity實現(xiàn)文字滾動效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-02-02
  • Winform應(yīng)用程序如何使用自定義的鼠標圖片

    Winform應(yīng)用程序如何使用自定義的鼠標圖片

    這篇文章主要介紹了Winform應(yīng)用程序如何使用自定義的鼠標圖片,在window系統(tǒng)中,自帶的鼠標外觀可能看起來比較小,因此我們需要使用自己的鼠標圖片外觀
    2020-11-11
  • C# 對PDF文檔加密、解密(基于Spire.Cloud.SDK for .NET)

    C# 對PDF文檔加密、解密(基于Spire.Cloud.SDK for .NET)

    這篇文章主要介紹了C# 基于Spire.Cloud.SDK for .NET對PDF文檔進行加密解密,文中講解非常細致,幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-07-07
  • Quartz.Net使用方法詳解

    Quartz.Net使用方法詳解

    本文詳細講解了Quartz.Net的使用方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • asp.net新聞列表生成靜態(tài)頁之批量和單頁生成

    asp.net新聞列表生成靜態(tài)頁之批量和單頁生成

    web程序的高訪問量、大數(shù)據(jù)量、高效的用戶體驗度,使靜態(tài)頁技術(shù)在越來越多的網(wǎng)站上發(fā)揮作用。這篇文章主要介紹asp.net新聞列表生成靜態(tài)頁之批量和單頁生成,有需要的朋友可以參考下
    2015-08-08
  • 詳解C#泛型的類型參數(shù)約束

    詳解C#泛型的類型參數(shù)約束

    這篇文章主要介紹了C#泛型的類型參數(shù)約束的相關(guān)資料,文中講解非常細致,幫助大家更好的理解和學習c#,感興趣的朋友可以了解下
    2020-07-07
  • C# 中的??操作符淺談

    C# 中的??操作符淺談

    (??) 用于如果類不為空值時返回它自身,如果為空值則返回之后的操作
    2013-04-04
  • C#縮略圖多路徑多格式保存的實例

    C#縮略圖多路徑多格式保存的實例

    這篇文章介紹了C#縮略圖多路徑多格式保存的實例,有需要的朋友可以參考一下
    2013-07-07
  • C#快速配置NLog日志的教程詳解

    C#快速配置NLog日志的教程詳解

    這篇文章主要為大家詳細介紹了C#快速配置NLog日志的教程相關(guān)知識,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以了解一下
    2024-02-02

最新評論