Windows Form 경고 메시지 상자 의 인 스 턴 스 코드 구현

경고 메시지 상 자 는 주로 사용자 사용자 에 게 경고,이상,완료,알림 메 시 지 를 보 여 주 는 데 사 용 됩 니 다.일반적으로 실현 되 는 효 과 는 시스템 창 오른쪽 아래 에서 팝 업 한 다음 에 간단 한 디 스 플레이 와 사라 진 애니메이션 을 추가 하 는 것 이다.

경고 상자 창 만 들 기
우선 경고 상자 창(Form)을 만 듭 니 다.창 을 경계선 없 음(FormBoderStyle=None)으로 설정 하고 그림 과 내용 표시 컨트롤 을 추가 합 니 다.

경고 상 자 를 만 든 후 창 오른쪽 아래 에 표시 할 수 있 도록 합 니 다.

  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();
    }
  }
경고 상자 애니메이션 표시 및 닫 기
시계 로 창 배경 점 입 과 페이드아웃 을 제어 하 는 타 이 머 를 추가 합 니 다.

  //       (  ,  ,  )
  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)
    {
      //        
      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 매 거 진 을 추가 합 니 다.메시지 형식 에 따라 메시지 테마 색상 을 바 꾸 고 경고 상자 형식 파 라미 터 를 추가 하지 않 았 습 니 다.

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

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

여러 경고 상자 중첩 문제 처리
물론 위의 처 리 를 완성 하 는 것 은 부족 합 니 다.여러 메시지 가 있 을 때 메시지 상자 가 겹 칩 니 다.여러 메시지 가 있 을 때 메시지 창 을 일정한 규칙 에 따라 배열 해 야 합 니 다.여기 서 모든 메시지 창 간격 을 설정 합 니 다.

    public void Show(string message, AlertType type)
    {
      //         
      this.StartPosition = FormStartPosition.Manual;

      //                 ,  10      ,             
      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;
    }

경고 상자 의 전체 코드

  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;//       
          this.Opacity -= 0.1;
          if (this.Opacity == 0.0)
          {
            this.Close();
          }
          break;
        default:
          break;
      }
    }

    public void Show(string message, AlertType type)
    {
      //         
      this.StartPosition = FormStartPosition.Manual;

      //                 ,  10      ,             
      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;//       
      this.Opacity -= 0.1;
      if (this.Opacity == 0.0)
      {
        this.Close();
      }
    }

    //        
    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;
      }
    }
  }
이상 은 윈도 우즈 Form 경고 메시지 상자 의 인 스 턴 스 코드 에 대한 상세 한 내용 입 니 다.윈도 우즈 Form 경고 메시지 상자 에 대한 자 료 는 다른 관련 글 을 주목 하 십시오!

좋은 웹페이지 즐겨찾기