
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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- JavaScript javascriptのちょっとした動作不良(原因は突き止めたのですが) 1 2023/06/15 19:58
- Visual Basic(VBA) ユーザーフォームの書き出しで追加のご相談 ユーザーフォームの値をシートに書き出す際、コードが表示され 2 2022/08/05 10:58
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- Visual Basic(VBA) 以下のVBAで該当文字列の前後に付与したい。 例 前に付与 abc ユーザーID 12345 後に付 3 2022/04/19 21:50
- Visual Basic(VBA) VBA 重複チェック後に値をワークシートに転記する方法を教えてください。 1 2023/03/19 12:43
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- Visual Basic(VBA) Excel VBA ユーザーフォーム1のコンボボックスに別ブックの値を反映させたいです。 6 2023/03/21 16:12
- HTML・CSS <!DOCTYPE html> <html> <head> <meta charset="utf-8 2 2023/01/05 01:04
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAのユーザーフォームで、テキ...
-
エクセルVBAでテキストボッ...
-
vb2010
-
momo'sさんのサンプル
-
VisualBasic2008でのツールの扱...
-
VBAで選択箇所がある場合の重複...
-
エクセルVBAについて質問です。
-
テキストボックスでMAX文字数を...
-
formからホームページ内のtextb...
-
エクセル VBA タブストップに...
-
ファイルパスの変換方法
-
Visual Basic4での並べ替え
-
メニュー追加の方法
-
FORTRAN77でプログラミング
-
g95プログラムからg++関数を呼...
-
【HTML、VBScript】HTAアプリケ...
-
最大公約数を再帰で求める(pas...
-
なんで? cEn-P^-1AP=P^-1(cEn-AP)
-
C# RichTextBoxについて
-
スタイルシート
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
アクセスできない保護レベルエ...
-
エクセルVBAでテキストボッ...
-
【VB.NET】テキストボックスに...
-
visual basic初心者です。 visu...
-
VBAで入力数値について
-
ユーザーフォームへのデータ入...
-
VBAのユーザーフォームで、テキ...
-
コンボボックスからテキストボ...
-
VBでの入力値制限について
-
テキストボックスに大文字を
-
テキストボックスにカーソルを...
-
VBでローマ字入力とかな入力を...
-
年齢の計算について
-
ACCESS 除算での小数点切上げ方法
-
Excel ユーザーフォームで計算 ...
-
【C#】コンボボックスにおけるS...
-
VB2010 TextBoxの数字の表示...
-
VBAのフォーム カーソル移動
-
TextBoxの内容を右寄せ
-
VB2005テキストボックスへのコ...
おすすめ情報