3

Вопрос по – Как создать winform с кнопками, которые никогда не привлекут фокус клавиатуры

У меня есть несколько текстовых полей на моей winform. У меня тоже есть несколько кнопок. Теперь, когда я набираю одно из таких текстовых полей и нажимаю кнопку, фокус ввода теряется из текстового поля, и кнопка получает фокус ввода клавиатуры. То есть курсор теряется из текстового поля в тот момент, когда мы нажимаем кнопку. Я не хочу такого поведения. Я хочу, чтобы мое текстовое поле удерживало курсор внутри, даже когда я нажимаю кнопку. Реальная ситуация в том, что у меня есть текстовое поле и цифровые кнопки, которые можно использовать только с сенсорного экрана.

4ответа

0

Создать кастомButton класс сFocusable свойство, наборFocusable вfalse

public class ButtonEx : Button
{
    [DefaultValue(true)]
    public bool Focusable
    {
        get { return GetStyle(ControlStyles.Selectable); }
        set { SetStyle(ControlStyles.Selectable, value); }
    }
}
4

В обработчике событий нажатия кнопки мыши явно установите фокус наsome other control, Выберите любой элемент управления, который, по вашему мнению, будет иметь смысл, чтобы получить фокус после нажатия кнопки. Например, установите фокус на TextBox, используя такой код:

textBox1.Focus();

Это не позволит вашей кнопке получить фокус при нажатии кнопки.

Кроме того, установите свои кнопкиTabStop свойство ложно.

Другие ответы, предлагающие вам установитьCanFocus свойство false не будет работать, потому что это свойство доступно только для чтения кнопок.

9

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

public class ButtonEx : Button {
  public ButtonEx() {
    this.SetStyle(ControlStyles.Selectable, false);
  }
}
0

Вы можете установить фокус на текстовое поле на обработчике событий нажатия кнопок, например:

private void Button_Click(...)
{
    FocusTextBox();
    // Do things...
}

private void FocusTextBox()
{
    textBox.Focus();
}

RelatedQuestions