c # WinForm: удалить или настроить «прямоугольник фокуса» для кнопок - PullRequest
12 голосов
/ 09 ноября 2009

Есть ли способ отключить или еще лучше нарисовать свой собственный прямоугольник фокуса для обычного управления кнопками! (эта пунктирная линия кажется Windowss 95ish)

Я заметил, что свойства элемента управления (ДЛЯ КНОПКИ) не имеют настройки с фиксацией владельца (которую я даже не знаю, является ли это маршрутом, используемым для решения, хотя я видел, что он использовался для настройки других элементов управления ).

Ответы [ 5 ]

13 голосов
/ 09 ноября 2009

Понять это правильно сложнее, чем кажется. Без сомнения, одна из причин, по которой пользовательская роспись кнопок не может быть переопределена Это сработало, как и ожидалось:

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);
            }
        }
    }
}
11 голосов
/ 30 марта 2013

Быстрый и простой способ отключить прямоугольник фокуса - создать подкласс элемента управления и включить этот код:

public class CustomButton : Button  
{  
    protected override bool ShowFocusCues  
    {  
        get 
        {  
            return false;  
        }  
    }  
} 
2 голосов
/ 29 августа 2014

Просто простой способ.

Набор

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

FlatAppearance.BorderColor

из-за причины кода не удалось установить прозрачный цвет в режиме конструктора.

0 голосов
/ 07 сентября 2011

Одно быстрое / грязное решение, которое я нашел (для удаления только прямоугольника фокуса), явно определяло цвет фона. Для контрольного цвета по умолчанию, например:

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

РЕДАКТИРОВАТЬ: Очевидно, это не работает. Это было исправлено в моем случае по несвязанной причине. Извинения.

0 голосов
/ 09 ноября 2009

Подкласс класса Button и переопределение OnPaint. Если ваше переопределение не вызывает base.OnPaint, для кнопки ничего не будет нарисовано, и вы получите полный контроль (включая прямоугольник фокуса).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...