2012-08-16 182 views
4

我有一個PictureBox有一個地圖分配給它(基本上是一個Rectangle對象的列表)。現在我想讓它變成這樣,如果用戶將鼠標移動到這個圖片框上,並且如果鼠標移動到了列表中的一個矩形上,工具提示將彈出並顯示一些信息。工具提示picturebox和圖像地圖

映射工作正常,但問題是ToolTip會發瘋,並且不能正常顯示,它只是繼續彈出任何鼠標移動。我怎麼編碼它,只有當鼠標在矩形中時纔會彈出?

這是我的代碼,在那裏你看到的例子!

private void pictureBoxPackageView_MouseMove(object sender, MouseEventArgs e) 
{ 
    if (PackageMap == null || PackageMap.Count == 0) return; 
    var point = new Point(e.X, e.Y); 

    foreach (var map in PackageMap) 
    { 
     if (map.Rectangle.Contains(point)) 
     { 
      var tip = new ToolTip(); 
      tip.ToolTipTitle = map.Pin.Group; 
      tip.Show("Result: " + map.Pin.Mk2Result, pictureBoxPackageView, point, 200); 
      break; 
     } 
    } 
} 

enter image description here

回答

3

它不斷地彈出,因爲你只檢查是否光標是一個矩形內。請記住,您仍然可以移動鼠標數次,但仍然在該矩形內。

我想你想要的只是當你輸入一個矩形時彈出工具提示一次。 你應該記住鼠標的前一個位置。如果當前位置在矩形內,請檢查前一個位置是否不在同一個矩形中。這是顯示工具提示否則通過的時間。

3

我想添加自定義偵聽來檢測MouseEnter事件和MouseLeave事件爲要明顯的工具提示顯示每個單獨的矩形容器中,添加代碼以顯示上的MouseEnter X秒工具提示(使用Show()方法顯示)。如果用戶將光標保持在矩形內,它將繼續顯示這些X秒(使用AutoPopDelay屬性在X秒後自動隱藏)。如果用戶將光標移出,則MouseLeave事件應使用Hide()方法。

我還會設置一秒延遲,以便在一次將光標移動到多個區域時保持打開多個工具提示。爲此,請使用InitialDelay屬性。

應該是這個樣子(不顯示的屬性被設置正確):

private void area1_MouseEnter(object sender, EventArgs e) 
{ 
    tooltip.Show("text to display", window); 
} 

private void area1_MouseLeave(object sender, EventArgs e) 
{ 
    tooltip.Hide(window); 
} 

我會去將是擴展您所使用的容器和這些偵聽器添加到路由自定義容器類,特別是如果你創建了幾個類似的容器都需要這個功能。