- ポンタ
- 会議室デビュー日: 2007/06/13
- 投稿数: 10
|
投稿日時: 2007-06-13 19:13
C#のComboBoxで、DropDownStyleをDropDownとし、Textフィールドを入力可能な状態とします。
その後、リストより選択すると入力フィールドに選択したItemが表示されます。
この状態で入力フィールドにカーソルを当てたとき、選択位置(SelectionStart)、選択文字数(SelectionLength)が0のままとなり、カーソル選択位置が取得できません。
仮に、入力フィールドに「abcde」と表示されている状態で、「b」と「c」の間にカーソルを当てても
SelectionStart=0
SelectionLength=0
となってしまいます。
TextBoxでは取得できるのですが、ComboBoxでは取得できないため、どのようにしたら取得できるのか検討がつきません。
何かのイベントなりの処理で取得できる方法をご存知の方がいましたら、お願い致します。
|
- かるあ
- ぬし
- 会議室デビュー日: 2003/11/16
- 投稿数: 1190
- お住まい・勤務地: センガワ→ムサシノ
|
投稿日時: 2007-06-13 19:33
なぜアンケート??とまぁそれはいいとして、
コンボボックスにもいろいろとイベントがありますが、長さを取得するのはいつですか?
アイテムの選択が完了したとき?、アイテムを変更したとき?
マウスでテキストを範囲指定したとき?
キーボードでアイテムを選択したとき?キーボードでテキストを選択したとき?などなど。。。
_________________
かるあ のメモ
http://karua.at.webry.info/
[ メッセージ編集済み 編集者: かるあ 編集日時 2007-06-13 19:33 ]
|
- ポンタ
- 会議室デビュー日: 2007/06/13
- 投稿数: 10
|
投稿日時: 2007-06-14 08:10
言葉がたりませんでしたね。ごめんなさい。
取得するタイミングは、
・マウスカーソルで入力フィールドを選択したとき
・KBの「→」「←」でカーソル位置が変更されたとき
・マウスで文字列を選択したとき
など、文字列に対するアクションが発生したときです。
|
- ぶさいくろう
- ぬし
- 会議室デビュー日: 2005/11/22
- 投稿数: 1232
- お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
|
投稿日時: 2007-06-14 09:07
とりあえずWindowsに投票しておいたぞwwwwwww
引用: |
|
ポンタさんの書き込み (2007-06-14 08:10) より:
言葉がたりませんでしたね。ごめんなさい。
取得するタイミングは、
・マウスカーソルで入力フィールドを選択したとき
・KBの「→」「←」でカーソル位置が変更されたとき
・マウスで文字列を選択したとき
など、文字列に対するアクションが発生したときです。
|
なんでそんなタイミングでとりたいんだろうねぇ。がちがちのコボラー仕様かな。
|
- かるあ
- ぬし
- 会議室デビュー日: 2003/11/16
- 投稿数: 1190
- お住まい・勤務地: センガワ→ムサシノ
|
投稿日時: 2007-06-14 09:15
引用: |
|
ポンタさんの書き込み (2007-06-14 08:10) より:
取得するタイミングは、
・マウスカーソルで入力フィールドを選択したとき
・KBの「→」「←」でカーソル位置が変更されたとき
・マウスで文字列を選択したとき
など、文字列に対するアクションが発生したときです。
|
コンボボックスにもいろいろとイベントがありますが、
何のイベントでとろうとしてます?
とりあえず、関連してそうなイベントで SelectionStart と SelectionLength をDebug.WrilteLine したらどうなる?
_________________ かるあ のメモ と スニペット
|
- ポンタ
- 会議室デビュー日: 2007/06/13
- 投稿数: 10
|
投稿日時: 2007-06-14 10:54
返信ありがとうございます。
確かにガチガチの仕様なんです。
どのイベントでも構わないのですが、ある文字列のカーソル状態を判定して、文字を挿入したいのです。
「abcde」という文字列があったとき、
「b」と「c」の間にカーソルが選択、または移動したときに、どの文字が選択中なのか、どの文字間なのかをチェックして、文字の挿入などのイベント処理をしたいだけなのです。
TextBoxでは、SelectionStart、SelectionStartが取得できるのですが、ComboBoxではそのまま取得できなくて、調べるだけでヘロヘロです。
ComboBoxはTextBoxとListBoxで構成されているかと思いますので、どうしたら、TextBoxと同様に取得できるかが??? なんです。
|
- かるあ
- ぬし
- 会議室デビュー日: 2003/11/16
- 投稿数: 1190
- お住まい・勤務地: センガワ→ムサシノ
|
投稿日時: 2007-06-14 12:55
コンボボックスにもいろいろとイベントがありますが、
何のイベントでとろうとしてます?
とりあえず、新しいフォームにコンボボックスをひとつおいて、
こんなコードを試してみましたけれど、どの結果が正しいのだろう。
それともどれも違う?
コード: |
|
Private Sub ComboBox1_MouseUp(...) Handles ComboBox1.MouseUp
Debug.WriteLine("MouseUp----------------------------")
Dim combo As ComboBox = DirectCast(sender, ComboBox)
Debug.WriteLine(combo.SelectionStart.ToString())
Debug.WriteLine(combo.SelectionLength.ToString())
End Sub
Private Sub ComboBox1_MouseDown(...) Handles ComboBox1.MouseDown
Debug.WriteLine("MouseDown----------------------------")
Dim combo As ComboBox = DirectCast(sender, ComboBox)
Debug.WriteLine(combo.SelectionStart.ToString())
Debug.WriteLine(combo.SelectionLength.ToString())
End Sub
Private Sub ComboBox1_KeyDown(...) Handles ComboBox1.KeyDown
Debug.WriteLine("KeyDown----------------------------")
Dim combo As ComboBox = DirectCast(sender, ComboBox)
Debug.WriteLine(combo.SelectionStart.ToString())
Debug.WriteLine(combo.SelectionLength.ToString())
End Sub
Private Sub ComboBox1_KeyPress(...) Handles ComboBox1.KeyPress
Debug.WriteLine("KeyPress----------------------------")
Dim combo As ComboBox = DirectCast(sender, ComboBox)
Debug.WriteLine(combo.SelectionStart.ToString())
Debug.WriteLine(combo.SelectionLength.ToString())
End Sub
Private Sub ComboBox1_KeyUp(...) Handles ComboBox1.KeyUp
Debug.WriteLine("KeyUp----------------------------")
Dim combo As ComboBox = DirectCast(sender, ComboBox)
Debug.WriteLine(combo.SelectionStart.ToString())
Debug.WriteLine(combo.SelectionLength.ToString())
End Sub
|
_________________ かるあ のメモ と スニペット
|
- ポンタ
- 会議室デビュー日: 2007/06/13
- 投稿数: 10
|
投稿日時: 2007-06-15 06:50
ありがとうございます。
MouseUpイベントで取得できました。
いろいろとありがとうございました。
|