Флажок Winforms Фокус Проблема, если текст не применяется на флажок - PullRequest
7 голосов
/ 07 января 2010

У меня есть несколько флажков на Winforms, не имея свойства Text всех флажков, так что проблема в том, что когда я наведите курсор мыши на флажок, он подсвечивается, но когда я подхожу к флажку с помощью клавиши табуляции, он никогда не выделяется ..

Если у кого-то есть подобная проблема, и она уже решена, пожалуйста, помогите ..

Ответы [ 4 ]

7 голосов
/ 18 января 2010

Проблема в том, что, когда флажок получает фокус, он выделяет только текстовую часть элемента управления, которая пуста в вашем случае.У вас есть несколько вариантов:

1) Для всех ваших «пустых» текстовых полей установите для свойства text пробел.Это создаст небольшую выделенную часть, когда вы перейдете к элементу управления.

2) Запрограммируйте события OnEnter и OnLeave флажка и нарисуйте / закрасьте квадрат вокруг всего элемента управления.) Если вы хотите поведение MouseEnter по умолчанию, которое создает желтоватую подсветку на самом флажке, создайте свой собственный элемент управления флажка следующим образом:

public class MyCB : CheckBox
{
    protected override void OnEnter(EventArgs e)
    {
      base.OnEnter(e);
      base.OnMouseEnter(e);
    }

    protected override void OnLeave(EventArgs e)
    {
      base.OnLeave(e);
      base.OnMouseLeave(e);
    }
}
3 голосов
/ 17 мая 2011

Я добавил обработчик события CheckBox.Paint и добавил следующее:

private void checkBox1_Paint(object sender, PaintEventArgs e)
{
    CheckBox checkBox = sender as CheckBox;

    if (checkBox.Focused)
    {
        // e.ClipRectangle is affected by checkBox.Padding. Be careful when changing the Padding.
        ControlPaint.DrawFocusRectangle(e.Graphics, e.ClipRectangle, checkBox.ForeColor, checkBox.BackColor);
    }
}

Я также изменил значение CheckBox.Padding на 2, 2, 0, 1, чтобы получить границу в 1 пиксель от края CheckBox.

0 голосов
/ 24 октября 2015

Если вы рисуете только границу, попробуйте установить эти свойства.

AutoSize : False
CheckAlign : MiddleCenter
Font: Courier New, 12.25pt
TextAlign: MiddleRight
Padding : 0, 5, 0, 0
Size : 26, 26
Text : "  " (two spaces)
0 голосов
/ 18 января 2010

Вы можете исправить это, установив свойство AutoSize = False. Когда AutoSize имеет значение True, он действует как метка с AutoSize, установленным в значение true, при этом пустая метка почти не занимает места на экране. С AutoSize = False вы можете вручную установить ограничивающий прямоугольник для флажка.

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