2009-11-09 89 views
9

有沒有辦法禁用或更好地繪製自己的常規按鈕控件的焦點矩形! (虛線看起來很像Windowss 95ish)c#WinForm:刪除或自定義按鈕的「焦點矩形」

我注意到控件屬性(FOR BUTTONS)沒有ownerdrawfixed設置(我不知道這是甚至是解決方案的路線,儘管我見過它用於定製其他控件)。

回答

0

繼承Button類並覆蓋OnPaint。如果您的覆蓋不調用base.OnPaint,則不會爲該按鈕繪製任何內容,並且您將完全控制(包括焦點矩形)。

12

獲得這個權利比聽起來更棘手。毫無疑問,自定義按鈕繪畫不可覆蓋的原因之一。這工作如期:

using System; 
using System.Drawing; 
using System.Windows.Forms; 
using System.Windows.Forms.VisualStyles; 

class MyButton : Button { 
    private VisualStyleRenderer renderer; 
    protected override void OnPaint(PaintEventArgs e) { 
     base.OnPaint(e); 
     if (this.Focused && Application.RenderWithVisualStyles && this.FlatStyle == FlatStyle.Standard) { 
      if (renderer == null) { 
       VisualStyleElement elem = VisualStyleElement.Button.PushButton.Normal; 
       renderer = new VisualStyleRenderer(elem.ClassName, elem.Part, (int)PushButtonState.Normal); 
      } 
      Rectangle rc = renderer.GetBackgroundContentRectangle(e.Graphics, new Rectangle(0, 0, this.Width, this.Height)); 
      rc.Height--; 
      rc.Width--; 
      using (Pen p = new Pen(Brushes.DarkGray)) { 
       e.Graphics.DrawRectangle(p, rc); 
      } 
     } 
    } 
} 
+0

+1此代碼很好,但我不明白怎麼樣 - 沒有屬性(如[Browseable])通常爲自定義控件指定?謝謝。 – Sabuncu 2014-03-21 00:10:33

+0

當然,沒有附加屬性。它只是取代了這幅畫。 – 2014-03-21 07:36:57

+0

真的很棒,通過簡單地覆蓋基本控件中的方法,您可以創建一個新的控件! – Sabuncu 2014-03-21 08:23:33

0

我發現一個快速/髒解決方案(僅用於刪除焦點矩形)明確定義背景顏色。對於默認的控制顏色,例如:

this._dropDownButton.BackColor = System.Drawing.ColorTranslator.FromHtml("#F0F0F0"); 

編輯:顯然這是行不通的。由於一個不相關的原因,我的情況正在被修復。道歉。

8

一個快速簡便的方法來禁用焦點矩形一起是繼承控制和包括此代碼:

public class CustomButton : Button 
{ 
    protected override bool ShowFocusCues 
    { 
     get 
     { 
      return false; 
     } 
    } 
} 
+2

這不幸的是沒有爲我工作 - 我仍然可以通過標籤或方向鍵在按鈕上獲得一個矩形。 – theJerm 2013-11-07 05:13:46

+1

工作完美!謝謝!無需使用此方法重寫OnPaint()。 – AlfredBr 2013-11-21 15:16:42

+0

像@theJerm一樣,這也不適用於我的網絡4.5 – Memetican 2017-08-18 04:44:11

2

只是簡單的方式。

button.FlatStyle = Flat; 
button.FlatAppearance.BorderColor = Color.FromArgb(0, 255, 255, 255); 
button.FlatAppearance.BorderSize = 0; 
button.TabStop = false; 

FlatAppearance.BorderColor

上的代碼設置的原因可能在設計模式不是透明的顏色設置。

+0

爲什麼不把'BorderSize'設置爲0?如果你想要一個可怕的平面按鈕,那就是。 – 2014-08-29 05:19:52