
C#でツールを作っています。
テキストボックス内に書かれている文字列中にカーソルを置いて
そのカーソル部分に任意の文字を挿入する処理に、TextBox.SelectionStart を使っています。
text_box.Text = text_box.Text.Insert(text_box.SelectionStart, string_word);
text_box …テキストボックス名
string_word …挿入する文字
これを同じようにコンボボックスの中でもやりたいのですが
ビルドエラーにはならないものの、上手く動作しません。
デバッグで見てみると、SelectionStart=0 となっており、
常にコンボボックス内の先頭に挿入されてしまいます。
コンボボックスでは無理なのでしょうか?
MSDNライブラリでは、テキストボックスと変わらない説明がされているのですが…
http://msdn2.microsoft.com/ja-jp/library/system. …
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
以下のような代替方法があります。
コンボボックスの裏でStringBuilderをつかいます。
(ただし十字キーでSelectionStartを移動した場合には対応できていません。)
コンボボックス:comboBox1
コマンドボタン:button2
----------------------------------------------------------
StringBuilder sb = new StringBuilder();
int start=0;
private void comboBox1_MouseDown(object sender, MouseEventArgs e)
{
sb.Remove(0, sb.Length);
sb.Append(comboBox1.Text);
start = comboBox1.SelectionStart;
}
private void button2_Click(object sender, EventArgs e)
{
string ins_word = "あいう";
sb.Insert(start, ins_word);
comboBox1.Text = sb.ToString();
}
private void comboBox1_TextChanged(object sender, EventArgs e)
{
sb.Remove(0, sb.Length);
sb.Append(comboBox1.Text);
start = comboBox1.SelectionStart;
}
----------------------------------------------------------
No.2
- 回答日時:
SelectionStartプロパティは、そのコントロールが非アクティブになったり、Textプロパティが変更された場合、0になります。
ですので、例えば別のButtonのClickイベントハンドラ内で参照しようとしても、既にComboBoxのフォーカスが失われた後なので上手くいきません。まずはそこを確認してみてください。
回答ありがとうございます。
やろうとしていたのは、ボックス内のどこかにカーソルを置いた状態で
別フォームをオープン→そのフォーム内から挿入文字を選択→コンボボックスに反映
という動きでしたので、上手くいかないわけですね。
う~ん、代替案はないものでしょうか…?
No.1
- 回答日時:
C#ではないですがVB.NET Express Editionユーザです。
で検証してみました。
[検証方法]
New Project > Windows Form Application > OK
[デザイン]タブ上のForm1に
ツールボックスから
テキストボックス(TextBox1)、コンボボックス(ComboBox1)をそれぞれ貼り付け、さらにコマンドボタン(CommandButton1)を貼り付けます。
この時、ComboBox1のDropDownStyleはDropDownです
Form1.vbに以下のコードを打ち込みます
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
MessageBox.Show(TextBox1.SelectionStart.ToString)
MessageBox.Show(ComboBox1.SelectionStart.ToString)
End Sub
End Class
TextBox1に「あいうえ」と打ち込み、
「い」の後にカーソルを持って行きます
CommandButton1をクリックし、
2
0
がそれぞれ表示することを確認します。
そしてそのまま
ComboBox1に「あいうえ」と打ち込み、
「い」の後にカーソルを持って行きます。
CommandButton1をクリックすると・・・・★
やはり
2
0
と表示されることが確認できます。
そこでコードを以下のように変更し
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
MessageBox.Show(TextBox1.SelectionStart.ToString)
MessageBox.Show(ComboBox1.SelectionStart.ToString)
End Sub
Private Sub ComboBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.TextChanged
MessageBox.Show(ComboBox1.SelectionStart.ToString)
End Sub
End Class
ComboBox1にテキストを打ち込んでいきます
「あ」「い」「う」と選択状態を外しながら一文字ずつ打ち込みそれぞれEnterを押し
それぞれのタイミングで
1
2
3
と表示されます(つまりきちんと変化はしているが、テキストボックスと異なり★印で選択状態が解除されてしまっている)
ここで全てのテキストを消し
「あいう」と一気に打ち込んでみたら
何故か「いうあ」という順番でテキストボックスに入力されるようで
2
1
1
と表示されました。
細かい検証、大変ありがとうございます!
なるほど、ANo.2でも書かれている通り、
フォーカスが外れてしまうとダメなのですね。。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
画像生成AIのプロンプトの作り...
-
vba 正規表現について教えてく...
-
pythonでのローカルファイルか...
-
if関数とは?
-
プログラム言語
-
今のプログラミング言語
-
vba クリップボードクリアにつ...
-
itエンジニアに就職希望で未経...
-
Pythonのエラーメッセージをコ...
-
P2P地震速報のEEW APIの仕様書...
-
著作権法について
-
プログラミングについて
-
自作scratch アニメの商用利用
-
Geminiフォーム 画像生成で 人...
-
数学、プログラミング、物理、...
-
Python 3.12.2 か一番最新のパ...
-
MOVEコマンドでサブフォルダー...
-
AIがプログラムする時代のプロ...
-
pythonについて(初心者です)
-
pythonでhtmlファイルの指定文...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
アクセスできない保護レベルエ...
-
visual basic初心者です。 visu...
-
エクセルVBAでテキストボッ...
-
【VB.NET】テキストボックスに...
-
VBAで入力数値について
-
ユーザーフォームへのデータ入...
-
VBSのプログラム
-
VBでの入力値制限について
-
VBAで選択箇所がある場合の重複...
-
【C#】コンボボックスにおけるS...
-
コンボボックスからテキストボ...
-
Excel ユーザーフォームで計算 ...
-
テキストボックスを空白にする方法
-
整数かどうかチェックする
-
VBA 文字列から日付に変更
-
VBAのユーザーフォームで、テキ...
-
VB2005テキストボックスへのコ...
-
visual studio 2008 C# で、値...
-
TextBoxの内容を右寄せ
-
VBでローマ字入力とかな入力を...
おすすめ情報