2010-07-15 3 views
0

Я делаю простой C# Winform приложение. Существует форма с текстовым полем. Я хочу изменить расположение текстового поля клавишей со стрелкой, но текстовое поле имеет фокус ввода, поэтому событие KeyDown формы не вызывается. Как удалить этот фокус ввода?Как удалить фокус ввода из текстового поля?

Ввод текста в текстовое поле должен быть возможен. Я пытаюсь сделать фиктивный ярлык и сосредоточиться, но он не работает. Если я нажму любую клавишу, курсор вернется в текстовое поле. пожалуйста помогите. Как я могу решить эту проблему?

ответ

0

Хм, не уверен, если я понимаю. Если пользователь может ввести в поле редактирования, то он может иметь фокус. Если он щелкает за его пределами, на бланке формы, то он теряет фокус.

Если вы хотите иметь возможность: 1) ввести в поле редактирования и 2) переместить окно редактирования, то вам понадобится отдельный механизм для входа в режим перемещения.

Я бы предложил кнопку «щелкнуть здесь, чтобы переместить выбранный элемент управления», или контекстное меню правой кнопки мыши на элементе управления с опцией «move control».

Вам также необходимо будет указать, как пользователь указывает, что движение закончилось.

Надеюсь, это поможет.

+0

Благодарим вас за идею! Отделить до двух режимов будет отлично. Это хорошо для меня. Спасибо. – Shongky

1

Обращайтесь с событием TextBox.KeyDown. И установите e.Handled = true; в свой обработчик после перемещения TextBox, но прежде чем вы вернетесь. И, да, обрабатывайте только клавиши со стрелками.

+0

+1 и фильтр для клавиш со стрелками? Хорошая идея. – Mawg

+0

Благодарим за ответ. Это хорошая идея. но мне также нужно сделать редактирование возможным. Этот способ сделает «перемещение текстового поля» в порядке. но «движущийся курсор» - нет. Простите за мое плохое объяснение. – Shongky

+0

О, Из других ответов. Может быть, я могу поместить код для выбора этого обработчика или нет. Например If (IsMoveMode) {if (e.keyCode == Keys.Left) bula bula ~~~ – Shongky

0

ПРИМЕЧАНИЕ: Я просто понял, что это даже не приложение C# в браузере. Наверное, все это игнорируют. Служит мне правильно, чтобы не читать достаточно внимательно.


Использование Javascript, в частности, я лично рекомендую jQuery.

Они довольно хорошо документированы их библиотека: http://docs.jquery.com/Main_Page

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

Таким образом, чтобы дать вам представление о том, если вы хотите изменить расположение текстового поля с помощью нажатия клавиш (возможно, клавиши со стрелками), сделать что-то вроде этого:

/* link the jQuery source to the HTML page with script tag */ 
<script src="jquery.js" type="text/javascript"></script> 
<script type="text/javascript"> 

/* short hand for $(document).ready(function() { ... */ 
$(function() { 

    $("#textbox_id").keypress(function(e) { 
     var $this = $(this); // store the #textbox_id element in $this 
     e.preventDefault(); 
     switch (e.keyCode) { 
      // find the actual integer code for the up arrow 
      case UP_ARROW: 
       $this.animate({ 
        top : '-=10px' 
       }, 100); // time in milliseconds to complete the animation 
      /* fill in the cases */ 
     } 
    } 

}); 

Ладно, я надеюсь, вы получите картину , Узнайте больше о animate() и других функциях jQuery в документации по приведенной выше ссылке. Надеюсь, это поможет!

ПРИМЕЧАНИЕ: Очевидно, что предотвращение обработки событий по умолчанию является ужасной идеей в этом случае по причинам доступности. Используйте свое лучшее решение при выборе нажатия клавиш для запуска этих перемещающихся событий - что бы вы ни делали, не запрещайте пользователям перемещаться внутри текста, который у них есть в полях ввода.

+0

Благодарим за ответ. хмм. Мне также нужна ручная работа по умолчанию :) Возможно, я могу поместить переключатель, чтобы выбрать, какой обработчик по умолчанию или myversion переместиться. Спасибо. – Shongky

+0

Да, извините, я неверно истолковал ваш вопрос. Надеюсь, вы взяли что-то из этого ответа ... Удачи! –

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