DOBON.NET DOBON.NETプログラミング掲示板過去ログ

CmbBoxのクリア?

  • 題名: CmbBoxのクリア?
  • 著者: Shino
  • 日時: 2004/08/10 20:45:24
  • ID: 5508
  • この記事の返信元:
    • (なし)
  • この記事への返信:
  • ツリーを表示
環境/言語:[Windows2000]
分類:[.NET]

お世話にまります。
なんか簡単そうで・・・でもどうしても?なのでお願いします。

今、FormをLoad時に、

cone.Open()
cmd.Connection = cone

cmd.CommandText = "select * from XXX001 order by 〇〇番号,△△番号"
Dim reader As SqlClient.SqlDataReader = cmd.ExecuteReader

Do While reader.Read()
CmbHokenNo.Items.Add(reader("△△番号") & " " & reader("□□名称"))
Loop

reader.Close()
cone.Close()

を書いています。で、通常はCmbBoxからコードを選択します。
ですが、そのForm内で、他のTextBoxなども入力したけど、
やっぱりヤメた、という内容クリアボタンがあります。

そのクリアボタンのClickイベントに、
CmbHokenNo.Text = ""
と書いても、CmbBoxで選択した内容は消えません。

プロパティは、DropDownStyleをDropDownListにして、
CmbBoxの内容は修正不可にしています。
選択した内容は、CmbHokenNo.Text で取得出来るのに何故か分かりません。

よろしくお願い致します。
■No5508に返信(Shinoさんの記事)
> お世話にまります。
> なんか簡単そうで・・・でもどうしても?なのでお願いします。
>
> 今、FormをLoad時に、
>
> cone.Open()
> cmd.Connection = cone
>
> cmd.CommandText = "select * from XXX001 order by 〇〇番号,△△番号"
> Dim reader As SqlClient.SqlDataReader = cmd.ExecuteReader
>
> Do While reader.Read()
> CmbHokenNo.Items.Add(reader("△△番号") & " " & reader("□□名称"))
> Loop
>
> reader.Close()
> cone.Close()
>
> を書いています。で、通常はCmbBoxからコードを選択します。
> ですが、そのForm内で、他のTextBoxなども入力したけど、
> やっぱりヤメた、という内容クリアボタンがあります。
>
> そのクリアボタンのClickイベントに、
> CmbHokenNo.Text = ""
> と書いても、CmbBoxで選択した内容は消えません。
>
> プロパティは、DropDownStyleをDropDownListにして、
> CmbBoxの内容は修正不可にしています。
> 選択した内容は、CmbHokenNo.Text で取得出来るのに何故か分かりません。
>
> よろしくお願い致します。

Shinoさん、こんばんは。
comboboxに空白のデータが無いからです。
通常、DropDownListにした場合、中身が編集不可なので、何かを選択しないといけない状態です。
その為、空の選択もできるようにしないといけないのです。時々、リストの一番上が空白の選択肢を見かけませんか?あれは、その対策です。たまに「選択しない」という内容のものもありますよね?
つまり、そうゆうことです。
長々と書きましたが、

CmbHokenNo.BeginUpdate()
CmbHokenNo.Items.Add("選択しない")
Do While reader.Read()
 CmbHokenNo.Items.Add(reader("△△番号") & " " & reader("□□名称"))
Loop
CmbHokenNo.SelectedIndex = 0'一番上の選択肢にもっていく
CmbHokenNo.EndUpdate()

と記述してはどうですか?
「SelectedIndex = 0」これをつける事で選択エラーも防ぐことができます。
初期状態では SelectedIndex に -1 が入っています。
あと、BeginUpdate、EndUpdateをつけるとチラツキ防止になりますよ。

どうしても、"選択しない"や空白の選択肢が嫌というのなら、
「CmbHokenNo.Text = ""」ではなく、
「CmbHokenNo.SelectedIndex = -1」としてください。
ぺがらぼさん、夜分のレスありがとうございます!!

CmbHokenNo.Items.Add("選択しない")は、必須入力項目ですので、"選択しない"ではなく.Add("")にしました。

で、クリアボタンのところには、CmbHokenNo.SelectedIndex = -1 と書きました。
他は書いて頂いたとおり、そのまま書かせて頂きました。
実行結果もイメージ通りの動きです。

他もいくつかCmbBox使っているところがあるので同様に修正します。

おお、私の中では最短解決済み!かな?(いつも長くなる、というか皆さんいろいろ書き込んで頂いて本当に助かっています!!)
解決済み!
2004/08/10(Tue) 23:28:57 編集(投稿者)

■No5522に返信(Shinoさんの記事)
> ぺがらぼさん、夜分のレスありがとうございます!!
>
> CmbHokenNo.Items.Add("選択しない")は、必須入力項目ですので、"選択しない"ではなく.Add("")にしました。
> で、クリアボタンのところには、CmbHokenNo.SelectedIndex = -1 と書きました。
あ、「クリアボタンのところには、CmbHokenNo.SelectedIndex = -1」
とするのであれば、.Add("")を入れなくてもいいよ。
if CmbHokenNo.SelectedIndex = -1 then
 'コンボの選択はされていない
end if
としたら、判定できるから…

「.Add("")」が必要ならしょうが無いけど、「.Add("")」を入れるなら、
「CmbHokenNo.SelectedIndex = 0」とした方が理想。
なぜなら、「0」で「.Add("")」の所に選択が行くからです。
「.Add("")」を「.Add("テスト")」としたら、意味がわかると思います。
解決済み!
  • 題名: Re[4]: CmbBoxのクリア?
  • 著者: Shino
  • 日時: 2004/08/10 23:48:31
  • ID: 5524
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
ぺがらぼさん、またまたありがとうございます。

よく考えてみたら、必須項目なので、Readしてきた最初の1件目で初期値がいいな・・・と思ってきました。クリア時も同様です。

で、CmbHokenNo.Items.Add("")を削除し、
クリアボタンはCmbHokenNo.SelectedIndex = 0 にしました。

初期状態は、SelectedIndex = -1 を教えて頂いたので分かりやすかったです。
って分かったつもりなんですけど、まだ私、勘違いしてませんかね?(笑)

あともう、そろそろ時間的に頭が回らなくなってきたので・・・。
本日はありがとうございました。
また、よろしくお願い致します。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板