2009-09-22 30 views
5

có một chương trình làm mờ đi sự kiện rời chuột.Chuột nhập/rời khỏi vấn đề sự kiện con của Nút và Nút

nhưng vấn đề là khi chuột vào con của biểu mẫu như Nút, nó kích hoạt sự kiện rời chuột. vì vậy tôi thiết lập mã này.

private void Form1_MouseLeave(object sender, EventArgs e) 
{ 
    if (this.ClientRectangle.Contains(this.PointToClient(Cursor.Position))) 
    { 
     this.Opacity = 1.0; 
    } 
    else 
    { 
     int loopctr = 0; 

     for (loopctr = 100; loopctr >= 5; loopctr -= 10) 
     { 
      this.Opacity = loopctr/99.0; 
      this.Refresh(); 
      Thread.Sleep(100); 
     } 
    } 
} 

nhưng vấn đề bây giờ là hình thức thường không kích hoạt các sự kiện nghỉ chuột, trông đến là do các nút rất gần với hình thức cạnh đó nó không bao giờ registrer rằng chuột trái ranh giới hình thức, có lẽ bởi vì con trỏ chuột nhanh và bỏ qua biểu mẫu khi nó di chuyển.

bất kỳ đề xuất nào về cách thực hiện việc này?

Trả lời

2

Đây là một lớp tiện ích đơn giản để làm được điều này, đầu tiên sử dụng nó trong hình thức của bạn như thế này:

partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
     new FadeForm(this, TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(0.25), 0.05); 
    } 
} 

Sau đó thêm mã này vào dự án của bạn:

class FadeForm 
{ 
    readonly Form _top; 
    readonly Timer _timer; 
    readonly TimeSpan _delayToFade; 
    readonly double _fadeAmount; 

    Control _lastControl; 
    DateTime _lastActivity; 

    public FadeForm(Form ctrl, TimeSpan delayToFade, TimeSpan delaySpeed, double fadeAmount) 
    { 
     _top = ctrl; 
     _delayToFade = delayToFade; 
     _fadeAmount = fadeAmount; 
     _lastActivity = DateTime.Now; 

     WatchControl(_top); 

     _timer = new Timer(); 
     _timer.Interval = (int)delaySpeed.TotalMilliseconds; 
     _timer.Enabled = true; 
     _timer.Tick += new EventHandler(Tick); 
    } 

    void Tick(object sender, EventArgs e) 
    { 
     if (_lastControl != null || (DateTime.Now - _lastActivity) < _delayToFade) 
     { 
      if (_top.Opacity != 1) 
       _top.Opacity = 1; 
     } 
     else 
     { 
      double newvalue = _top.Opacity -= _fadeAmount; 
      if (newvalue > 0.0) 
       _top.Opacity = newvalue; 
      else 
       _top.Close(); 
     } 
    } 

    void WatchControl(Control c) 
    { 
     c.MouseEnter += new EventHandler(MouseEnter); 
     c.MouseLeave += new EventHandler(MouseLeave); 
    } 

    void MouseEnter(object sender, EventArgs e) 
    { 
     _lastControl = sender as Control; 
    } 

    void MouseLeave(object sender, EventArgs e) 
    { 
     _lastControl = null; 
     _lastActivity = DateTime.Now; 
    } 
} 
0

Hãy thử sự kiện Deactive của hình thức thay vì

+0

Tôi nghĩ điều này chỉ xảy ra khi một số cửa sổ khác hoạt động - không phải khi chuột rời khỏi biểu mẫu. – ChrisF

Các vấn đề liên quan