C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: radiobuttonを切り替えする時


(過去ログ 156 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■90593 / inTopicNo.1)  radiobuttonを切り替えする時
  
□投稿者/ aa (7回)-(2019/03/22(Fri) 21:30:58)

分類:[.NET 全般] 

すいませんご質問があります。

1個目
_07_Shouhin.ComboBox1.Items.Clear()をいれましたら

radiobuttonを切り替えする時に、ラジオボタン1(初期値)からラジオボタン2に切り替えしたら
「System.ArgumentException: 'データソース プロパティを設定したときに Items コレクションを変更することはできません。'」

ソースコード
module追加しました

Public Sub AAD()'すべてクリアする
        list.Clear()
        _07_Shouhin.PictureBox1.Image = Nothing
        _07_Shouhin.ComboBox1.Items.Clear()'ここです。
        _07_Shouhin.TextBox1.Clear()
        _07_Shouhin.TextBox2.Clear()
        _07_Shouhin.TextBox3.Clear()
    End Sub

2個目
 _07_Shouhin.ComboBox1.SelectedItem = Nothingに変更したら

System.NullReferenceException: 'オブジェクト参照がオブジェクト インスタンスに設定されていません。'
場所は

Public Sub AAb()'テキストボックス表示
        'Textbox1=品名
        _07_Shouhin.TextBox1.Text = _07_Shouhin.ComboBox1.GetItemText(_07_Shouhin.ComboBox1.SelectedItem)

        Dim selectedValue = DirectCast(_07_Shouhin.ComboBox1.SelectedValue, (Number As Integer, Picture As Image))'ここ

        'Textbox3=値段
        _07_Shouhin.TextBox3.Text = CStr(selectedValue.Number)
        _07_Shouhin.PictureBox1.Image = selectedValue.Picture
    End Sub

module使用しています。

radiobuttonを切り替えする時に前のコンボボックスのアイテムをクリアしたい事です。

1個目と2個目がエラー発生しました。回避させたいんですがお願いいたします。

全体のコード
---------------------------------------------------------

Imports System.ComponentModel
Imports System.Globalization
ublic Class _07_Shouhin

    Private Sub _07_shouhin_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        TextBox1.ReadOnly = True
        TextBox3.ReadOnly = True
end sub

 Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
        AAb()'テキストボックス表示

    End Sub
    Private Sub Button1_Click(sender As Object, e As EventArgs)
        '  PictureBox1.Image = DirectCast(ComboBox1.SelectedValue, (Number As Integer, Picture As Image)).Picture
    End Sub

    Private Sub RadioButton1_CheckedChanged(sender As Object, e As EventArgs) Handles RadioButton1.CheckedChanged
        If RadioButton1.Checked = True Then
            aaa()'コンボボックスのアイテム表示
        End If
    End Sub

    Private Sub RadioButton2_CheckedChanged(sender As Object, e As EventArgs) Handles RadioButton2.CheckedChanged
        If RadioButton2.Checked = True Then
            RadioButton1.Checked = False
            AAD()'クリアする
        End If
    End Sub
End Class
--------------------------------------------------------------------------------------------------------------------------
module

----------------------------------
Imports System.ComponentModel
Imports System.Globalization

Public Module Test_000
    Private list As New Dictionary(Of String, (Number As Integer, Picture As Image))()
list.Add(“あ”, (0, My.Resources.A00))
list.Add(“い”, (0, My.Resources.A00))

        _07_Shouhin.ComboBox1.DisplayMember = "key"
        _07_Shouhin.ComboBox1.ValueMember = "value"
        _07_Shouhin.ComboBox1.DataSource = New BindingSource(list, Nothing)
        _07_Shouhin.ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList
    End Sub
Public Sub AAb()
        'Textbox1=品名
        _07_Shouhin.TextBox1.Text = _07_Shouhin.ComboBox1.GetItemText(_07_Shouhin.ComboBox1.SelectedItem)

        Dim selectedValue = DirectCast(_07_Shouhin.ComboBox1.SelectedValue, (Number As Integer, Picture As Image))

        'Textbox3=値段
        _07_Shouhin.TextBox3.Text = CStr(selectedValue.Number)
        _07_Shouhin.PictureBox1.Image = selectedValue.Picture
    End Sub
 Public Sub AAD()
        list.Clear()
        _07_Shouhin.PictureBox1.Image = Nothing
        _07_Shouhin.ComboBox1.SelectedItem = Nothing
        _07_Shouhin.TextBox1.Clear()
        _07_Shouhin.TextBox2.Clear()
        _07_Shouhin.TextBox3.Clear()
    End Sub
End Module

----------------------------------------------------------


1.Public Sub AAD()=クリアする
2.Public Sub AAb()=テキストボックス表示
3.Public Sub aaa()=コンボボックスのアイテム表示です。

やりたい事
・コンボボックスのアイテム表示をすべてクリアしたい(1,2個目でエラー発生)
他は多分大丈夫だと思いますか。コンボボックスのアイテム表示をクリアが出来ずにいます。

よろしくお願いします。

引用返信 編集キー/
■90594 / inTopicNo.2)  Re[1]: radiobuttonを切り替えする時
□投稿者/ 魔界の仮面弁士 (2126回)-(2019/03/22(Fri) 22:20:55)
No90593 (aa さん) に返信
> _07_Shouhin.ComboBox1.Items.Clear()をいれましたら
> 「System.ArgumentException: 'データソース プロパティを設定したときに Items コレクションを変更することはできません。'」

ComboBox1.Items.Add(…) したデータの場合は、.Items.Clear() が使えますが、
ComboBox1.DataSource で渡したデータの場合は、.Items.Clear() は使えません。

データバインド時に、ComboBox を空にしたいのであれば、
DataSource を空の物に差し替えるか、DataView や BindingSource 等で中継しておき、
0 件となるようフィルタリングしてみてください。


> 1.Public Sub AAD()=クリアする
> 2.Public Sub AAb()=テキストボックス表示
> 3.Public Sub aaa()=コンボボックスのアイテム表示です。

AAD や AAb とか aaa ではなく、
処理内容が分かるような名前付けをしましょう。


> _07_Shouhin.ComboBox1.SelectedItem = Nothingに変更したら

これはどのアイテムも選択されていない状態になりますね。
.SelectedIndex = -1 と同じ結果。


> System.NullReferenceException: 'オブジェクト参照がオブジェクト インスタンスに設定されていません。'
> Dim selectedValue = DirectCast(_07_Shouhin.ComboBox1.SelectedValue, (Number As Integer, Picture As Image))'ここ

どのアイテムも選択されていない場合、SelectedValue は Nothing を返します。
そして
 Dim selectedValue = DirectCast(Nothing, (Number As Integer, Picture As Image))
という変換は、NullReferenceException となる仕様です。


DirectCast ではなく CType なら一応変換されますが、今回の目的にはそぐわないでしょう。

この場合は、未選択時には処理されないよう、事前に If ステートメントを用いて、
.SelectedIndex の値を判断し、それが 0 以上だった場合にのみ処理を行うようにすれば OK です。
引用返信 編集キー/
■90628 / inTopicNo.3)  Re[2]: radiobuttonを切り替えする時
□投稿者/ aa (9回)-(2019/03/26(Tue) 13:58:31)
2019/03/26(Tue) 13:58:59 編集(投稿者)

返事遅れてすいませんでした。

>AAD や AAb とか aaa ではなく、
>処理内容が分かるような名前付けをしましょう。

処理の名前をわかりやすいようにしました。

Private list As New Dictionary(Of String, (Number As Integer, Picture As Image))()
このlistで
Public Sub clear
list.Clear()
end sub

list.Clear()だけ入れてみたらラジオボタンを押すだけでcomboboxも切り替え出来ました。
ご迷惑をおかけし無事自己解決出来ました。



解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -