2010-11-13 2 views
3

Когда кнопка сфокусирована нажатием клавиши Tab, на появляется прямоугольник. Даже если для свойства TabStop кнопки установлено значение false, при нажатии кнопки с помощью мыши появляется прямоугольник. Возможно ли, чтобы не отображал прямоугольник? Пожалуйста помоги. С уважением.Проблема в кнопке (.Net 2008, Framework 3.5)

ответ

7

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

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

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

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

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

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

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

+0

Большое спасибо. Основываясь на том, что сказал, я опубликовал свое решение. – priyamtheone

0
 
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 во время разработки.

Смежные вопросы