2010-02-06 5 views
26

Извините за длинный титул, но я не мог придумать другого способа его поместить.C#: Как сделать нажатие enter в текстовом поле вызывает кнопку, но все же разрешить ярлыки, такие как «Ctrl + A», чтобы пройти?

У меня есть это:

private void textBoxToSubmit_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.Enter) 
     { 
      buttonSubmit_Click((object)sender, (EventArgs)e); 
     } 
    } 

... для того, чтобы ввести прессование в текстовом поле вызвать кнопку «Отправить». Однако это также препятствует прохождению ярлыков. (не совсем уверен, что это с этим связано, может быть, только с несколькими ключами?)

ShortcutsEnabled имеет значение true.

Заранее благодарен!

+0

Нет репродукции, я не ожидал. Вам понадобится e.SuppressKey = true, чтобы остановить звуковой сигнал. –

+0

Что касается названия: вы могли бы поставить еще часть в первом предложении вашего тела вопроса. В любом случае, первое предложение теперь вне темы. – Bitterblue

ответ

37

Можете ли вы использовать AcceptButton для окна свойств форм? Это задает поведение по умолчанию для . Введите нажатие клавиши, но вы по-прежнему можете использовать другие ярлыки.

+0

Я вижу! Спасибо, что разъяснил это. Я, очевидно, новичок в C#, поэтому такие простые вещи меня путают. Спасибо! –

+0

Нет проблем - с удовольствием помогите :) –

+0

Что делать, если вы хотите, чтобы несколько элементов управления для каждого принимали вход, хотя и не обязательно с кнопкой для каждого? – Nyerguds

14

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

private void textBox_Enter(object sender, EventArgs e) 
    { 
     ActiveForm.AcceptButton = Button1; // Button1 will be 'clicked' when user presses return 
    } 

    private void textBox_Leave(object sender, EventArgs e) 
    { 
     ActiveForm.AcceptButton = null; // remove "return" button behavior 
    } 
+0

В случае UserControl вы можете использовать 'ParentForm.AcceptButton' –

10

Вы можете использовать KeyPress вместо KeyUp или KeyDown его более эффективным и вот как справиться с

private void textBox1_KeyPress(object sender, KeyPressEventArgs e) 
    { 
     if (e.KeyChar == (char)Keys.Enter) 
     { 
      e.Handled = true; 
      button1.PerformClick(); 
     } 
    } 

надеюсь, что он работает

+0

Может ли он быть расширен для прослушивателей событий других элементов управления, кроме кнопок? Кажется, я не могу найти ListBox.PerformDoubleClick(), чтобы вызвать его действие двойного щелчка. – Nyerguds

+0

Ах, неважно. Легче просто вызвать основную функцию слушателя. Кстати ... этот код не работает, если у формы есть набор AcceptButton. – Nyerguds

1

Вам не нужно какой-либо стороне клиента код, если делать это это ASP.NET. Приведенный ниже пример представляет собой окно ввода буфера с кнопкой поиска со значком шрифта.

Вы увидите, что вместо обычного тэга < div> с классом «input-group» я использовал asp: Panel. Свойство DefaultButton, установленное на идентификатор моей кнопки, делает трюк.

В приведенном ниже примере, набрав что-то во входном текстовом поле, вы просто нажмете enter, и это приведет к отправке.

<asp:Panel DefaultButton="btnblogsearch" runat="server" CssClass="input-group blogsearch"> 
<asp:TextBox ID="txtSearchWords" CssClass="form-control" runat="server" Width="100%" Placeholder="Search for..."></asp:TextBox> 
<span class="input-group-btn"> 
    <asp:LinkButton ID="btnblogsearch" runat="server" CssClass="btn btn-default"><i class="fa fa-search"></i></asp:LinkButton> 
</span></asp:Panel>