Навигация в Windows Forms с помощью клавиши ввода - PullRequest
1 голос
/ 09 апреля 2011

У меня есть текстовые поля в моем приложении Windows Forms, и я хочу, чтобы, когда пользователь нажимает клавишу ВВОД, курсор переходит в следующее текстовое поле.

Как мне это сделать?

Это хорошая привычка или мне следует ее избегать? На самом деле пользователи очень склонны и привыкли, и стали привычными нажимать клавишу ВВОД для навигации между текстовыми полями и кнопками. Поэтому для них мне нужно это сделать.

Пожалуйста, помогите мне с полным кодом, используя два текстовых поля в качестве примера.

Ответы [ 6 ]

6 голосов
/ 09 апреля 2011

Я бы сказал, что самый хороший способ - создать пользовательский элемент управления, который наследуется от TextBox, а затем переопределить метод OnKeyPress для захвата ввода и отправки вкладки.Затем фокус будет отдан следующему TabIndex в форме, как если бы фактически была введена вкладка.

Код ниже делает именно это:

public partial class CustomTextbox : TextBox
{
    public CustomTextbox()
    {
        InitializeComponent();            
    }

    protected override void OnKeyPress(KeyPressEventArgs e)
    {
        if (e.KeyChar == '\r')
        {
            e.Handled = true;
            SendKeys.Send("{TAB}");
        }

    }
} 

Вы также можете поместить подобноекод в обработчиках событий KeyPress для ваших элементов управления, но это экономит много дублирующегося кода и ненужного обработчика событий.

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

5 голосов
/ 09 апреля 2011

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

1 голос
/ 09 апреля 2011

Да, это зависит от вас

Например, вы можете поместить 4 текстовых поля в форму и использовать следующий код

private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        textBox2.Focus();
    }
}

private void textBox2_KeyUp(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        textBox3.Focus();
    }
}

private void textBox3_KeyUp(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        textBox4.Focus();
    }
}

Это может помочь вам.

Счастливого кодирования ...

1 голос
/ 09 апреля 2011

Например, вы можете перехватить событие OnKeyUp , проверить, является ли оно ВОЗВРАТОМ, и использовать управление источником процесса для использования Focus () для следующего управления ...

0 голосов
/ 09 апреля 2011

Я думаю, что лучший способ будет:

1) назначать атрибут TabIndex каждого текстового поля постепенно (сначала x, затем x + 1 и т. Д.).

2) захват события OnKeyUp во всей форме, проверьте аргумент, чтобы увидеть, был ли ключ ВОЗВРАТ

3) сфокусировать следующее текстовое поле, используя его TabIndex. Или смоделируйте клавишу TAB.

Этот код должен работать:

private void Form1_KeyUp(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        GetNextControl((TextBox)sender, true);
    }
}

Таким образом, в итоге вы пишете только одну функцию, и вы можете иметь столько текстовых полей, сколько захотите.

0 голосов
/ 09 апреля 2011

Да, вы можете запустить событие KeyDown или KeyUp в TextBox. Чтобы проверить, была ли это клавиша ввода, вы можете сделать следующее:

//e is the KeyEventArgs from the event.
e.KeyCode == Keys.Enter

Затем, если он нажал клавишу ввода, вы можете сделать:

System.Windows.Forms.Control.SelectNextControl();

Чтобы установить порядок элементов управления, в Visual Studio найдите этот маленький значок:

http://i.stack.imgur.com/nZWLO.png

Щелкните по нему, и вы перейдете в режим упорядочения вкладок, как мне нравится его называть. Просто нажмите элементы управления в том порядке, в котором вы хотите, чтобы они были, и после того, как вы закончите, нажмите маленький значок снова. Presto!

Теперь, насколько это хорошая идея, полностью зависит от того, насколько привыкли к ней ваши конечные пользователи. Если они всегда использовали это таким образом, и вы даете им что-то, что не вписывается в их модель ума, они скажут, что ваше программное обеспечение сломано.

Всегда всегда всегда попытайтесь эмулировать процессы, которые пользователь уже имеет в своей голове.

Прочитайте это, если у вас есть время, это действительно легкое и очень хорошее чтение:

http://www.joelonsoftware.com/uibook/fog0000000249.html

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