在我們的應用程序中,我們在白色表格上有白色按鈕。當鼠標懸停在按鈕上時,我們想要在按鈕上方顯示一個淺藍色的透明矩形。C#Winforms如何在鼠標上的按鈕上畫一個矩形?
我想創建此用戶控件,但我不知道如何執行此操作。我試過谷歌,但我沒有;沒有發現任何可以幫助我的東西,所以我希望你們能指點我正確的方向。
在我們的應用程序中,我們在白色表格上有白色按鈕。當鼠標懸停在按鈕上時,我們想要在按鈕上方顯示一個淺藍色的透明矩形。C#Winforms如何在鼠標上的按鈕上畫一個矩形?
我想創建此用戶控件,但我不知道如何執行此操作。我試過谷歌,但我沒有;沒有發現任何可以幫助我的東西,所以我希望你們能指點我正確的方向。
您可以從Button
導出自己的WinForms控件並覆蓋OnPaint
事件。在事件處理程序中,您將擁有一個PaintEventArg
參數,其中包含名爲Graphics
的屬性。您可以使用此屬性在您控制的位置直接繪製任何您想要的東西。
下面是一個例子直接從MSDN:http://msdn.microsoft.com/en-us/library/system.windows.forms.control.onpaint.aspx
新增:剛剛重新閱讀你的問題,我發現我沒有不正確的回答它。
基本上,您必須重寫兩個事件並添加一個屬性,以顯示您的控件是否應繪製覆蓋的矩形,例如IsDrawRectangle
。一旦觸發OnMouseEnter
事件,您檢查是否設置了IsDrawRectangle,如果不是,則將其設置爲true並調用this.Invalidate()
。 Invalidate()
方法將強制重新繪製控件,然後在OnPaint
事件中,您只需再次檢查IsDrawRectangle
屬性的值並在需要時繪製矩形。 您還必須重寫OnMouseLeave
以將屬性設置爲false,並強制重繪以移除矩形。
加入:如果您需要重新繪製不止一個控件(如果您的矩形覆蓋了需要重新繪製的其他一些控件),然後將您想要重繪的所有內容一個容器並在事件處理程序中調用Parent.Invalidate()
方法。
是否要更改背景顏色或例如圍繞文本繪製矩形? – Reniuz