System.Windows.Forms.TextBox の入力キャレットを非表示にするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/44131

  •  09-06-2019
  •  | 
  •  

質問

可変長メッセージを表示し、テキストを選択できるようにする必要があります。TextBox を ReadOnly にしてテキストを編集できないようにしましたが、入力キャレットは表示されたままになります。

点滅する入力キャレットはわかりにくいです。どうやって隠すのですか?

役に立ちましたか?

解決

win32呼び出しを通じて実行できます

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

他のヒント

win32 呼び出しを使用する場合は、テキストボックスの GotFocus イベントでカーソルを非表示にすることを忘れないでください。

完全を期すために、 DevExpress WinForms TextEdit コントロール.

彼らはすでに提供しています ShowCaret そして HideCaret 残念ながら、それらは保護されています。そこで、その機能を提供する派生クラスを作成しました。完全なコードは次のとおりです。

public class MyTextEdit : TextEdit
{
    private bool _wantHideCaret;

    public void DoHideCaret()
    {
        HideCaret();

        _wantHideCaret = true;
    }

    public void DoShowCaret()
    {
        ShowCaret();

        _wantHideCaret = false;
    }

    protected override void OnGotFocus(EventArgs e)
    {
        base.OnGotFocus(e);

        if (_wantHideCaret)
        {
            HideCaret();
        }
    }
}

コードを使用するには、元のクラスの代わりに派生クラスを使用するだけです。 TextEdit コード内のクラスと呼び出し DoHideCaret() どこでも、例えばテキスト編集コントロールを含むフォームのコンストラクター内。

もしかしたら、これは将来誰かの役に立つかもしれません。

テキストボックスを無効にすると(設定 Enable=false)、その中のテキストはスクロールおよび選択可能です。無効なテキスト ボックス (通常は灰色の背景) の視覚的な表現が気に入らない場合は、色を手動でオーバーライドできます。

デフォルトの色/テーマ設定を使用していないシステムでは、色を手動でオーバーライドするとフォーム/コントロールが奇妙に見えることに注意してください。自分のコントロールが白だからといって、全員のコントロールも白になるとは考えないでください。そのため、可能な限り常にシステム カラーを使用する必要があります ( System.Drawing.SystemColors 列挙)など SystemColors.ControlLight.

私の知る限り、これは できない 終わり。TextBox コントロールは、実際には 多く オペレーティング システムを利用する方法により変更できない動作の一部。これが、クールなカスタム TextBox の多くが最初から作成される理由です。

やりたいことができないかもしれないと思います:(

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top