- - PR -
【C#】 カーソルのちらつきを止めたい
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-01-26 04:25
いつもお世話になっております。
現在プログラミングエディタを開発しており、TextBoxに入力を途中まで行うと、入力支援(?)用のListBoxが開いて、入力をショートカットしてくれるような機能を実装しようとしています。 このとき、入力中に出てくるListBoxの項目をマウスでクリックすると、ソースコードが書かれているTextBoxのフォーカスが離れてしまいます。ListBoxのMouseClickイベントハンドラが呼び出されるたびにFocusを毎回テキストボックスに戻す処理をしたところ、いちおうの動作はしてくれたのですが、クリックするたびにテキストボックスのカーソルがちらつくのが気になってます。 VisualStudioなどのエディタを見ると、入力支援のListBoxをクリックしてもTextBoxのカーソルはまったく微動だにしていないです。 細かい点ですが、ぜひこれを実現したいです。 調べたところ、マウスクリックをしてFocusが移動する場合のイベントは TextBox: (LostFocus)→ Leave → Validating → Validated ↓ ListBox: Enter → (GotFocus) のように発生すると知りました。 ListBoxそのものにフォーカスを移動させないで、マウス座標からListBoxのindexを取得しようとするにも、TextBoxのLeaveイベントが発生してからではもう遅く、ちらつきが起こってしまいました。ListBoxをクリックしても、Focusの移動そのものが起こらないようにする方法(プロパティの設定など)はあるのでしょうか? 他の手段として、別の新しいスレッドをつくり、本体とは違うところからListBoxの表示をしてくれる仕組みを考えてみました。ところが、Formクラスを継承したスレッド上で、ListBoxインスタンスを生成しても、コンパイルは通るがリストボックスが表示されない始末・・もう行き詰ってます(苦笑) どんな方法でも、どなたかご教授ください。 よろしくお願いします。 | ||||
|
投稿日時: 2006-01-26 07:56
>TextBoxに入力を途中まで行うと、入力支援(?)用のListBoxが開いて、
要するに、データを入力している最中に、そのデータにあわせてGUI表示したいんですよね。 普通にデータバインディング使えばいいのでは。TextBox.Textになんかの データバインディングクラスを作って、くみこめば、例えばTextBoxに「A」と 入れたListBoxが出力するようにすればいいような、、、違うかな。 .NET frameworkは自慢ではありませんが、お勉強中でよく分かっていせません。 でも、データバインディング自体は、意外と楽ですよ。 | ||||
|
投稿日時: 2006-01-26 08:48
私は DropDown スタイルの ComboBox でいいと思います。
そのためのものですから、直感的にわかりやすいです。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2006-01-26 09:10
これだけでは何ですので解決策を。
派生クラスで色々と工夫する必要があります。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2006-01-26 09:29
インテリセンスの実装なら下記のサイトが参考になると思います。
DIY Intellisense - The Code Project - C# Programming http://www.codeproject.com/csharp/DIY-Intellisense.asp _________________ IEEE-CSDP 2004-2007 | ||||
|
投稿日時: 2006-01-26 17:30
>加納正和さん
説明に誤解があったみたいです、分かりにくくてすみません。 データを入力している最中に、その入力にあわせてGUI表示をする部分は、加納さんがおっしゃるような方法でもうすでに実装はできています。 私が今実現したいことをもっと短的に言うならば、 《フォーカスの移動》 テキストボックス(*1) → リストボックス(*2) → テキストボックス(*3) *1. カレットが出現 *2. カレットが消失 *3. カレットが出現 の一連の流れで、テキストボックスのカレットが不自然に点滅することを防ぎたいのです。こちらの説明の方が分かっていただけるでしょうか(>_<) >iStationさん サイトの紹介、ありがとうございます。 さっそくサンプルソースを見てみましたが、 private void listBoxAutoComplete_SelectedIndexChanged(object sender, System.EventArgs e) { this.richTextBox1.Focus(); } とあり、リストボックスの中身をクリックするたびに、カレットがちらつくのは解決されていないようです。 | ||||
|
投稿日時: 2006-01-26 17:37
わかっているつもりで、私はカレットをそのまま残す方法を書きました。 VS のインテリセンスを見るとカレットは "そのまま" だったので。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2006-01-26 17:39
すいません、入れ違いでしたね。(*_ _)
第三者となるコントロールへ遷移する場合を考えると結構面倒です。 HideSelection プロパティの HideCaret 版があるといいんですけどねw _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |