System.Windows.Forms.TextBox の入力キャレットを非表示にするにはどうすればよいですか?
質問
可変長メッセージを表示し、テキストを選択できるようにする必要があります。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 の多くが最初から作成される理由です。
やりたいことができないかもしれないと思います:(