按鈕控件,就像你說的那樣,是一個好的開始。您需要一個按鈕才能使圖像變得可以聚焦和點擊。 PictureBox不支持這些事情。你顯然可以編寫代碼來手動處理這些東西,但沒有意義,因爲Button已經內置了它。所以現在這場戰鬥就是定製Button控件來做你想做的事情。
從截圖看來,您已經發現需要處理Enter
和Leave
事件才能將圖像從「正常」狀態更改爲「熱」狀態,然後返回再次。而要得到你想要的模樣,你已經設置按鈕的FlatStyle
屬性FlatStyle.Flat
和FlatAppearance.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);
}
您使用的是哪種UI框架?的WinForms? WPF?的WebForms?還有別的嗎? – 2013-04-03 22:57:51
框架是4。5或更高版本,應用程序是winForms – tonni 2013-04-03 22:58:35
這些PictureBox控件是用來顯示圖像的嗎? – 2013-04-03 23:06:35