有沒有辦法禁用或更好地繪製自己的常規按鈕控件的焦點矩形! (虛線看起來很像Windowss 95ish)c#WinForm:刪除或自定義按鈕的「焦點矩形」
我注意到控件屬性(FOR BUTTONS)沒有ownerdrawfixed設置(我不知道這是甚至是解決方案的路線,儘管我見過它用於定製其他控件)。
有沒有辦法禁用或更好地繪製自己的常規按鈕控件的焦點矩形! (虛線看起來很像Windowss 95ish)c#WinForm:刪除或自定義按鈕的「焦點矩形」
我注意到控件屬性(FOR BUTTONS)沒有ownerdrawfixed設置(我不知道這是甚至是解決方案的路線,儘管我見過它用於定製其他控件)。
繼承Button類並覆蓋OnPaint。如果您的覆蓋不調用base.OnPaint,則不會爲該按鈕繪製任何內容,並且您將完全控制(包括焦點矩形)。
獲得這個權利比聽起來更棘手。毫無疑問,自定義按鈕繪畫不可覆蓋的原因之一。這工作如期:
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);
}
}
}
}
我發現一個快速/髒解決方案(僅用於刪除焦點矩形)明確定義背景顏色。對於默認的控制顏色,例如:
this._dropDownButton.BackColor = System.Drawing.ColorTranslator.FromHtml("#F0F0F0");
編輯:顯然這是行不通的。由於一個不相關的原因,我的情況正在被修復。道歉。
一個快速簡便的方法來禁用焦點矩形一起是繼承控制和包括此代碼:
public class CustomButton : Button
{
protected override bool ShowFocusCues
{
get
{
return false;
}
}
}
只是簡單的方式。
集
button.FlatStyle = Flat;
button.FlatAppearance.BorderColor = Color.FromArgb(0, 255, 255, 255);
button.FlatAppearance.BorderSize = 0;
button.TabStop = false;
FlatAppearance.BorderColor
上的代碼設置的原因可能在設計模式不是透明的顏色設置。
爲什麼不把'BorderSize'設置爲0?如果你想要一個可怕的平面按鈕,那就是。 – 2014-08-29 05:19:52
+1此代碼很好,但我不明白怎麼樣 - 沒有屬性(如[Browseable])通常爲自定義控件指定?謝謝。 – Sabuncu 2014-03-21 00:10:33
當然,沒有附加屬性。它只是取代了這幅畫。 – 2014-03-21 07:36:57
真的很棒,通過簡單地覆蓋基本控件中的方法,您可以創建一個新的控件! – Sabuncu 2014-03-21 08:23:33