2009-03-02 2 views
6

В текстовом поле, как можно предотвратить отображение мигающего курсора при нажатии на него?Предотвращение мигания курсора в текстовом поле

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

Это текстовое поле является частью окна формы, которое создается для моделирования lan messenger. Я использую C#. Форма имеет два текстовых поля, чтобы они напоминали слова google. Было бы желательно предотвратить отображение мигающего курсора в верхнем текстовом поле.

Я пробовал:

[DllImport("user32")] 
private static extern bool HideCaret(IntPtr hWnd); 
public void HideCaret() { HideCaret(TextBox1.Handle); } 

Я получаю ошибку: "DllImport не может быть найден."

+0

Просьба представить более подробную информацию об этом текстовом поле и на каком языке он был создан в Уроженец какао текстовое поле на OS X.? Текстовое поле в форме на веб-странице html? Текстовое поле в приложении win32? Текстовое поле gtk2? Текстовое поле BeOS? и т. д. – Nathan

+0

Ну, это текстовое поле является частью окна формы, которое создается для моделирования lan messenger. Я использую C#. Форма имеет два текстовых поля для того, чтобы напоминать текст разговора google, и было бы желательно предотвратить отображение мигающего курсора в верхнем текстовом поле. – Avik

+0

Редактировать вопрос своей новой информацией - люди тоже не собираются ее видеть, если они есть в комментариях. –

ответ

6

Если вы хотите запретить редактирование на текстовом поле, установите это свойство ReadOnly истину.

Если вы хотите разрешить редактирование, но все же скрыть каретку, называют Win32 API именно as specified:

[System.Runtime.InteropServices.DllImport("user32.dll")] 
static extern bool HideCaret(IntPtr hWnd); 

... 

HideCaret(myTextBox.Handle); 
+0

Это код что я столкнулся раньше тоже. Проблема заключается в том, что отображается ошибка: «Ошибка Невозможно найти имя типа или пространства имен« DllImport »(вам не хватает директивы using или ссылки на сборку?) " Есть ли какие-либо конкретные ссылки на сделанные ?? – Avik

+0

это работает отлично, спасибо! – Mike

+0

Добавьте инструкцию сверху. using System.Runtime.InteropServices; shahkalpesh

0

VB.NET код

Imports System.Runtime.InteropServices 

Public Class xxxxxxxxxxxxxxxxxxxxxx 

<DllImport("user32.dll")> 
    Private Shared Function HideCaret(ByVal hwnd As IntPtr) As Boolean 
    End Function 

............... 

Private Sub txtNotePreview_MouseMove(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtNotePreview.MouseMove, txtNotePreview.KeyPress 
     HideCaret(txtNotePreview.Handle) 
    End Sub 
+1

Возможно, вам следует объяснить немного дальше. Предоставление решения - это только одна часть ответа. – albertjan

3

Привет, попробуйте этот код

public class CustomTextBox:System.Windows.Forms.TextBox 
{ 
    [System.Runtime.InteropServices.DllImport("user32")] 
    private static extern bool HideCaret(IntPtr hWnd); 

    public CustomTextBox() 
    { 
     TabStop = false; 

     MouseDown += new System.Windows.Forms.MouseEventHandler(CustomTextBox_MouseDown); 
    } 

    void CustomTextBox_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) 
    { 
     HideCaret(this.Handle); 
    } 
} 
2

если вы положили функцию hideCaret внутри Textc hange, это решит проблему.

[DllImport("user32.dll")] 
    static extern bool HideCaret(IntPtr hWnd); 

    private void textBox1_TextChanged(object sender, EventArgs e) 
    { 
     HideCaret(textBox1.Handle); 
    } 
1

Я исследовал, чтобы узнать, как эмулировать веб-адресную строку Chrome, (частично) на TextBox и собрали код из здесь и этого one.

Он отлично работает, сначала Clic, выбирает весь текст, не показывая мерцающий кареток, трюк заключается в том, чтобы сделать показ каретки, когда вы снова нажимаете Clic на выбранном тексте, что ведет себя к тому, как ведет себя веб-адресная панель Chrome , Вот код:

[DllImport("user32.dll")] 
    static extern bool HideCaret(IntPtr hWnd); 

    private void textBox2_Enter(object sender, EventArgs e) 
    { 
     // Kick off SelectAll asyncronously so that it occurs after Click 
     BeginInvoke((Action)delegate 
     { 
      HideCaret(textBox2.Handle); 
      textBox2.SelectAll();    
     });   
    } 
+0

Это на самом деле довольно интересно и полезно! +1 – Kaitlyn

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