2009-03-02 14 views
6

テキストボックスで、点滅しているカーソルをクリックすると、そのカーソルが表示されないようにするにはどうすればよいですか?テキストボックス内のカーソルの点滅を防止する

いくつかのフォーラムで、特定のAPIを呼び出すことがありましたが、コードで試してみると、エラーが表示されました。可能であれば、この目的のための完全なコードを提供し、コードが実行されるべき特定のイベントがあるかどうかお知らせください。

このテキストボックスは、lanメッセンジャーのシミュレーション用に作成するフォームウィンドウの一部です。私はC#を使用しています。フォームには、Googleトークのテキストに似せるための2つのテキストボックスがあります。上部のテキストボックスに点滅カーソルを表示させないことが望ましい。

私が試した:

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

を私はエラーを取得: "DLLIMPORTが見つかりませんでした"

+0

このテキストボックスとそれがどの言語で作成されたかについての詳細をご記入ください。OS Xのネイティブココアテキストボックス? HTML Webページ上のフォームのテキストボックス? win32アプリケーションのテキストボックス? gtk2テキストボックス? BeOSのテキストボックス? – Nathan

+0

このテキストボックスは、lan messengerのシミュレーション用に作成しているフォームウィンドウの一部です.C#を使用しています。このフォームには、Googleトークのテキストに似ている2つのテキストボックスがあり、上部のテキストボックスに点滅するカーソルを表示しないようにするのが望ましいでしょう。 – Avik

+0

あなたの新しい情報で質問を編集します。コメントにコメントが含まれていても、人々はそれを見ることはありません。 –

答えて

0

TextBoxReadOnlyプロパティをtrueに設定します。この質問へ

もっと答え:Read-only textbox in C#

6

あなたはテキストボックスで編集を禁止したい場合は、それがtrueにReadOnlyプロパティだ設定。

あなたは編集を許可するが、それでもキャレットを非表示にし、正確as specifiedのWin32 APIを呼び出したい場合:

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

... 

HideCaret(myTextBox.Handle); 
+0

これはコードです"エラー型または名前空間の名前 'DllImport'が見つかりませんでした(使用しているディレクティブまたはアセンブリ参照がありませんか?)エラーが表示されています。 ) " 具体的な参照はありますか? – Avik

+0

これは完璧に動作します、ありがとう! – Mike

+0

上部にusingステートメントを追加します。 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

TextCの中にhideCaret関数を入れるとこの問題を解決します。

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

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

私はTextBoxChromeのウェブアドレスバー(部分的に)をエミュレートする方法を見つけるために研究し、両方のここと、このoneからコードを集めました。

点滅しているキャレットを表示せずにすべてのテキストを選択すると、最初に選択されたテキストで再びクリックするときにキャレットが表示されます。これは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