- PR -

ComboBoxでのカーソル選択位置が取得できない。

1
投票結果総投票数:20
Windows 20 100.00%
  • 投票は恣意的に行われます。統計的な調査と異なり、投票データの正確性や標本の代表性は保証されません。
  • 投票結果の正当性や公平性について、@ITは一切保証も関与もいたしません。
投稿者投稿内容
ポンタ
会議室デビュー日: 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イベントで取得できました。

いろいろとありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)