2013-04-03 28 views
1

當鼠標放在上面時,如果僅突出顯示圖像(沒有邊框邊框,整個區域),我想使它像谷歌應用(谷歌g +在html中)一樣高亮顯示圖像。如何在c#中只顯示沒有整個區域的圖像?

在c#中我使用圖像來做到這一點,但每次當我用鼠標獲取圖像時,它會突出顯示所有區域(邊界邊框+圖像)。

所以,現在我的問題是:如何突出顯示沒有整個區域的圖像?

圖片顯示C#應用高亮圖像和整個區域(灰色矩形)。 如何繞過那些灰色的矩形?

enter image description here

更多細節:框架4.5或更高的WinForms,Win7的 如果另一控制做,在更聰明的方式......請讓我知道這並不一定是應用程序使用的圖像控制...

+0

您使用的是哪種UI框架?的WinForms? WPF?的WebForms?還有別的嗎? – 2013-04-03 22:57:51

+0

框架是4。5或更高版本,應用程序是winForms – tonni 2013-04-03 22:58:35

+0

這些PictureBox控件是用來顯示圖像的嗎? – 2013-04-03 23:06:35

回答

2

按鈕控件,就像你說的那樣,是一個好的開始。您需要一個按鈕才能使圖像變得可以聚焦和點擊。 PictureBox不支持這些事情。你顯然可以編寫代碼來手動處理這些東西,但沒有意義,因爲Button已經內置了它。所以現在這場戰鬥就是定製Button控件來做你想做的事情。

從截圖看來,您已經發現需要處理EnterLeave事件才能將圖像從「正常」狀態更改爲「熱」狀態,然後返回再次。而要得到你想要的模樣,你已經設置按鈕的FlatStyle屬性FlatStyle.FlatFlatAppearance.BorderSize屬性爲0

所以,唯一的問題是焦點提示是讓周圍的按鈕控制繪製時,它具有焦點。通常,想要這個,因爲有人用鍵盤導航你的應用程序需要一些方法來找出哪個控件當前有重點。但是你通過改變顯示的圖像來給他們一個,所以你可以安全地禁用這些焦點提示。做到這一點的方法是繼承Button類並覆蓋ShowFocusCues property

添加一個新的代碼文件到您的項目包含下面的類聲明:

public class ImageButton : Button 
{ 
    public ImageButton() 
    { 
     // Set default properties. 
     this.FlatStyle = System.Windows.Forms.FlatStyle.Flat; 
     this.FlatAppearance.BorderSize = 0; 
    } 

    protected override bool ShowFocusCues 
    { 
     get { return false; } 
    } 
} 

然後,使用ImageButton類的按鈕控件,而不是內置Button類。這種類型的控件將自動具有您所需的行爲。

如果您需要在您的自定義按鈕的外觀進行更多的控制,可以覆蓋其OnPaint方法。如果您不想要任何默認行爲,請跳過調用基類實現。例如,我們可以簡單地刪除按鈕的背景並繪製其圖像:

protected override void OnPaint(PaintEventArgs pevent) 
{ 
    // do not call the base class implementation 
    // base.OnPaint(e); 

    // erase the background 
    pevent.Graphics.FillRectangle(SystemBrushes.Control, this.ClientRectangle); 

    // draw the image at the top-left 
    pevent.Graphics.DrawImage(this.Image, Point.Empty); 
} 
+0

感謝科迪......當最需要的時候,你總是幫助我:) – tonni 2013-04-03 23:46:00

相關問題