Проблема в кнопке (.Net 2008, Framework 3.5) - PullRequest
3 голосов
/ 13 ноября 2010

Когда кнопка фокусируется нажатием клавиши Tab, появляется прямоугольник Это. Даже если свойство TabStop кнопки имеет значение false, когда при нажатии кнопки мыши появляется прямоугольник. Это возможно остановить прямоугольник от появления? Пожалуйста помоги. С уважением.

Ответы [ 2 ]

7 голосов
/ 13 ноября 2010

Этот прямоугольник, который появляется на вашей кнопке, называется «прямоугольником фокуса».Он указывает, какой элемент управления в форме в настоящее время имеет фокус ввода.

Объяснение проблемы, с которой вы столкнулись, заключается в том, что даже когда кнопка не является кнопкой табуляции, она все равно становится выбранной при щелчке мышью, и поэтому прямоугольник фокуса все еще появляется.Свойство TabStop определяет, может ли элемент управления получать фокус с помощью клавиши Tab , а не выбирается ли он пользователем.

Прямоугольник фокуса полезен для указанияПользователь, контроль которого имеет фокус.Нажатие клавиш Enter или Пробел с выбранной кнопкой приведет к тому, что кнопка будет нажата.Без прямоугольника фокуса пользователям клавиатуры может быть трудно ориентироваться в вашем приложении.

Если вы просто хотите полностью запретить фокусировке кнопки (и, таким образом, предотвратить появление прямоугольника фокуса)вы можете установить его Enabled свойство равным False.Конечно, это также будет препятствовать тому, чтобы пользователь нажимал на кнопку.

Если вы хотите, чтобы кнопка оставалась нажимаемой, но не позволяли рисовать прямоугольник, когда она имеет фокус (за счет удобства использования вашей программы)(Я мог бы предостеречь), вам придется создать свой собственный пользовательский элемент управления, основанный на существующем Button элементе управления.В вашем элементе управления вы можете переопределить свойство ShowFocusCues (которое по умолчанию True для элемента управления Button), чтобы вернуть False.Например:

public class NoFocusButton : Button
{
    protected override bool ShowFocusCues
    {
        get
        {
                return false;
        }
    }
}

Кроме того, вы можете переопределить событие OnPaint в производном элементе управления кнопки.Это позволит вам полностью контролировать способ рисования вашей кнопки (включая удаление прямоугольника фокуса), что сопряжено с таким же риском, что и вознаграждение.См. этот ответ на другой вопрос для получения дополнительной информации об этом маршруте.

0 голосов
/ 16 ноября 2010
class CustomButton : System.Windows.Forms.Button
   {
       private bool _DisplayFocusCues = true;
       protected override bool ShowFocusCues
       {
           get
           {
               return _DisplayFocusCues;
           }
       }

       public bool DisplayFocusCues
       {
           get
           {
               return _DisplayFocusCues;
           }
           set
           {
               _DisplayFocusCues = value;
           }
       }
   }

Используя этот класс, вы также можете установить DisplayFocusCues во время разработки.

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