Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
ListBoxとTextBoxの連携
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=9100#CommentId11508
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
是木
 (社会人)
投稿日時
2009/5/11 10:01:22
返事が大変遅くなり本当に申し訳ありません。
ヴァンさん こんばんわ
「変更のために記入してみる」ということでしょうか?>>>>その通りです。
どの様なエラーでしょうか>>>>該当箇所=
TextBox1.Text = ListBox1.Items(ListBox1.SelectedIndex)
内容=
InvalidArgument=Value of '-1' is not valid for 'index'. Parameter name: index
です。エラーの内容を書き忘れて申し訳ありませんでした。
刈谷さん こんばんわ
>>>ListBox1.Items(ListBox1.SelectedIndex) = TextBox1.Textを実行すると、SelectedIndexChangedが2回流れるようです。
(選択行解除、元の行の再選択)
このときの選択行解除のSelectedIndexChangedでItemsの配列外を指してしまうためにエラーになっています>>>
うーむ。かなり参考になりました。ありがとうございました。
しかし、
僕の質問の仕方が悪かったかもしれないのですが
”TextBoxを、キー入力で更新する度にListBoxの該当項目も更新される”
の意味は、
TextBoxが仮に""の場合は、ListBoxの該当項目も""
TextBoxが仮に"aaaaaaaaaa"の場合は、ListBoxの該当項目も"aaaaaaaaaa"
いけないという意味です。刈谷さんのサンプルは、
TextBoxがListBoxに用意されているアイテムのどれかひとつにも
完全に合致しない場合はListBoxはまったく変更をしないので,。。。
しかし、それはそれで、違う用途で活路のあるプログラムだと思います。
ところで、正攻法ではないと思いますが、刈谷さんのおっしゃられるSelectedIndexChangedの弊害?を
避けるためListBox1_Clickを使ったらどうかと思い試してみたところうまくいきました。
TextBox1.Text = ListBox1.Text は、うまくいくみたいです。
しかしその逆はだめで
ListBox1.Items(ListBox1.SelectedIndex) = TextBox1.Textのところは、やはりそのように書かないと
このケースでは、だめみたいです。
Changedは想定外の時点でもイベントが発生してしまいますので扱いが難しいが
Clickの場合は実際にマウスを人為的に操作した場合だけに反応するので扱いやすいということが
いえるのではないでしょうか。
また、TextBox1_TextChanged とListBox1_SelectedIndexChanged というように
Changedが2つのコントロールで互いに干渉しあう心配も要らなくなるという利点があると思います。
Public Class Form1
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
ListBox1.Items.Add("aaa")
ListBox1.Items.Add("bbb")
ListBox1.Items.Add("ccc")
ListBox1.Items.Add("ddd")
ListBox1.Items.Add("eee")
ListBox1.SelectedIndex = 0
TextBox1.Text = ListBox1.Text
End Sub
Private Sub TextBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
ListBox1.Items(ListBox1.SelectedIndex) = TextBox1.Text
End Sub
Private Sub ListBox1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListBox1.Click
TextBox1.Text = ListBox1.Text
TextBox1.Focus()
End Sub
End Class