2010-08-17 4 views
2

Если у вас есть фокус на текстовое поле, но mousecursor точно не витает на нем, mousecursor имеет форму стрелки по умолчанию или все, что вы определяете.Как предотвратить курсор от «прыжка» в текстовое поле при вводе

В то время, когда вы начинаете вводить текст, mousecursor скрывает себя, и вы видите только мигающий курсор типа IBeam в текстовом поле.

Вопрос: Как удерживать мышеловку в исходном положении, даже если вы начнете печатать?

Интересно, что этого не происходит в приложениях WPF.

+3

Мне нужно спросить, почему? Обычно люди, которые пытаются нарушить основные шаблоны пользовательского интерфейса, как это, в конечном итоге делают ужасно непригодные и раздражающие приложения. Возможно, есть лучший способ достичь своей конечной цели (не выраженной здесь)? – siride

+0

Хм .. Мне нужно было получить данные с магнитофона. Таким образом, на самом деле во время салфетки возвращается очень длинная строка с некоторым отличимым шаблоном, и она работает сравнительно медленно, так же медленно, как пользователь, который быстро набирает текст с помощью клавиатуры. Это занимает более 4 секунд. чтобы прочитать все данные от читателя. Я решил, что сразу после ввода первых символов, и если это похоже на строку читателя, я перемещаю фокус в другое текстовое поле, которое технически доступно, но перемещается за пределы формы. Пока он не получит остальную часть ввода, я должен показать занятый курсор. – Agzam

ответ

2

Ребята ... Это было смешно легко. В TextBox.KeyDown я должен переместить курсор каждый раз, когда к точке, где она была раньше ..

Cursor.Position = new Point(oldX, oldY); 

только уродливая вещь здесь - если это анимированный курсор, анимация начинается каждый раз заново. А также вы не можете вводить и перемещать мышь одновременно. То, что 's kind'a сосать, с другой стороны, кого это волнует? Приложения Winform имеют тенденцию быть более уродливыми, чем WPF, не так ли?

+0

Таким образом, в конечном счете вызывается SetCursor(). И вот он у вас есть. – JustBoo

0

Это установка Windows.

Под панелью управления, перейдите к мыши, а затем вы должны увидеть установку, аналогичную «Скрыть курсор при наборе текста»

+0

Даже если эта опция отключена, если указатель расположен над текстовым полем, он исчезнет, ​​когда пользователь начнет вводить текст. –

+0

Я только что проверил, и это не исчезает для меня. Он просто меняется на мигающий «я» вместо указателя. –

+0

Это именно проблема OP, если я читаю сообщение правильно. –

0

Насколько я знаю, нет никакого способа, чтобы сделать это. Даже после отключения настройки «Скрыть указатель во время ввода Windows» курсор исчезнет, ​​если он расположен поверх не только текстового поля, но и всей формы.

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

+0

Хм ... может быть, трудный способ сделать это? Получите позицию указателя мыши и в событии TextBox.KeyDown поместите его каждый раз, когда он был раньше? что-то вроде того? – Agzam

+0

Ввод "Cursor.Show();" в событие KeyDown заставляет курсор появляться снова, когда вы закончите печатать. –

+0

Нет ... Мне нужно показать курсор во время ввода ... Я пробовал, как вы сказали - не работал ... – Agzam

1

Я собираюсь ответить на вопрос. Побочные эффекты и последствия - ваша ответственность. Есть ли другой способ сделать это? Я уверен.

Создайте переменную «состояние», чтобы сохранить состояние ввода или отсутствия пользователя. В текстовых ящиках есть различные события, которые позволят вам узнать, когда кто-то печатает, EN_CHANGE и т. Д., Это целое семейство событий и так далее. Задайте переменную состояния true, когда пользователь печатает. Неверно, если не вводить текст, EN_LOSTFOCUS и т. Д.

Вход мыши Trap через событие PreProcessMessage или событие PreTranslateMessage или любое, что кажется уместным.

Вызовите «ShowCursor» или потенциально «SetCursor» в событии OnPaint, в то время как переменная состояния имеет значение true. Да, волосатая, а. Не вызывайте его, пока переменная состояния ложна.

Отладка, отладка, отладка после этого. HTH

Если это неясный пост, и я расширю свой ответ.

+0

См. Ответ Ike для ответа стиля «WinForm». – JustBoo

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