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

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

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

Re[4]: コンボボックスの初期値指定をしたい


(過去ログ 122 を表示中)

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

■72831 / inTopicNo.1)  コンボボックスの初期値指定をしたい
  
□投稿者/ mo (1回)-(2014/07/23(Wed) 10:01:28)

分類:[VB.NET/VB2005 以降] 

使用ソフト Microsoft Visual Studio 2010
フォームに置いてあるコントロール Combobox1,Combobox2

初めてこのサイトを使います。宜しくお願いします。

プログラムのエラーの解決方法を知りたいのですが、エラーは発生しているフォームにLoad時に二つのコンボボックスの項目の設定とスタイル、初期値を指定します。
次にComboBox1_SelectedIndexChangedbox1を使いbox1の選択した項目によって、box2のEnabledと項目が変わるコードを作ろうとしていますが、※印の箇所で以下のエラーが発生します。

ArgumentOutOfRangeExceptionはハンドルされませんでした。
'0' の InvalidArgument=Value は 'SelectedIndex' に対して有効ではありません。パラメーター名: SelectedIndex

どういった対策を練れば良いのか助言をお願いします。


Public Class FmA
   
    Private Sub FmA_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        With ComboBox1
            .Items.Add("魚料理")
            .Items.Add("肉料理")
            .DropDownStyle = ComboBoxStyle.DropDownList
            .SelectedIndex = 0
        End With

        With ComboBox2
            .Items.Add("ミディアム")
            .Items.Add("レア")
            .DropDownStyle = ComboBoxStyle.DropDownList
            .SelectedIndex = 0
        End With
    End Sub

    Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged

        If ComboBox1.SelectedIndex = 0 Then
            With ComboBox2
                .SelectedIndex = 0 ※
                .Enabled = True
            End With
        End If

        If ComboBox1.SelectedIndex = 1 Then
            With ComboBox2
                .SelectedIndex = 1
                .Enabled = False
            End With
        End If

    End Sub

引用返信 編集キー/
■72832 / inTopicNo.2)  Re[1]: コンボボックスの初期値指定をしたい
□投稿者/ Hongliang (211回)-(2014/07/23(Wed) 10:13:11)
FmA_Loadの、ComboBox1.SelectedIndex = 0した結果ComboBox1_SelectedIndexChangedが呼び出され、
ComboBox2にはまだItemsが空なのにSelectedIndex = 0が設定されてしまった、という状況でしょう。
FmA_LoadイベントでComboBox1.SelectedIndexを設定するのをComboBox2.Itemsセット後に移動すればいいんではないでしょうか。
引用返信 編集キー/
■72833 / inTopicNo.3)  Re[2]: コンボボックスの初期値指定をしたい
□投稿者/ mo (3回)-(2014/07/23(Wed) 10:34:15)
No72832 (Hongliang さん) に返信
> FmA_Loadの、ComboBox1.SelectedIndex = 0した結果ComboBox1_SelectedIndexChangedが呼び出され、
> ComboBox2にはまだItemsが空なのにSelectedIndex = 0が設定されてしまった、という状況でしょう。
> FmA_LoadイベントでComboBox1.SelectedIndexを設定するのをComboBox2.Itemsセット後に移動すればいいんではないでしょうか。

ヒント有難うございます。
以下のコードに修正すると欲しかった動きになりました。

   Private Sub FmA_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Dim FLG as integer = 0
        With ComboBox1
            .Items.Add("魚料理")
            .Items.Add("肉料理")
            .DropDownStyle = ComboBoxStyle.DropDownList
            .SelectedIndex = 0
        End With

        With ComboBox2
            .Items.Add("ミディアム")
            .Items.Add("レア")
            .DropDownStyle = ComboBoxStyle.DropDownList
            .SelectedIndex = 0
        End With
    FLG = 1
    End Sub

    Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
        IF FLG = 1 Then
        If ComboBox1.SelectedIndex = 0 Then
            With ComboBox2
                .SelectedIndex = 0 ※
                .Enabled = True
            End With
        End If

        If ComboBox1.SelectedIndex = 1 Then
            With ComboBox2
                .SelectedIndex = 1
                .Enabled = False
            End With
        End If
    End IF
    End  Sub

解決済み
引用返信 編集キー/
■72834 / inTopicNo.4)  Re[3]: コンボボックスの初期値指定をしたい
□投稿者/ King (1回)-(2014/07/23(Wed) 11:25:51)
提示のコードだと FLG は SelectedIndexChanged イベントハンドラ内は
スコープ外なのでビルドエラーになりますよね?

やりたいことはこういうことですか?

Private _isLoading As Boolean = False

Private Sub FmA_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    Try
        _isLoading = True
        
        With ComboBox1
            .Items.Add("魚料理")
            .Items.Add("肉料理")
            .DropDownStyle = ComboBoxStyle.DropDownList
            .SelectedIndex = 0
        End With

        With ComboBox2
            .Items.Add("ミディアム")
            .Items.Add("レア")
            .DropDownStyle = ComboBoxStyle.DropDownList
            .SelectedIndex = 0
        End With
    Finally
        _isLoading = False
    End Try
End Sub

Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
    If _isLoading Then
        Return
    End If

    If ComboBox1.SelectedIndex = 0 Then
        With ComboBox2
            .SelectedIndex = 0 ※
            .Enabled = True
        End With
    End If

    If ComboBox1.SelectedIndex = 1 Then
        With ComboBox2
            .SelectedIndex = 1
            .Enabled = False
        End With
    End If
End Sub

引用返信 編集キー/
■72890 / inTopicNo.5)  Re[4]: コンボボックスの初期値指定をしたい
□投稿者/ mo (5回)-(2014/07/30(Wed) 17:09:47)
No72834 (King さん) に返信
> 提示のコードだと FLG は SelectedIndexChanged イベントハンドラ内は
> スコープ外なのでビルドエラーになりますよね?
> 
> やりたいことはこういうことですか?
> 
> Private _isLoading As Boolean = False
> 
> Private Sub FmA_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
>     Try
>         _isLoading = True
>         
>         With ComboBox1
>             .Items.Add("魚料理")
>             .Items.Add("肉料理")
>             .DropDownStyle = ComboBoxStyle.DropDownList
>             .SelectedIndex = 0
>         End With
> 
>         With ComboBox2
>             .Items.Add("ミディアム")
>             .Items.Add("レア")
>             .DropDownStyle = ComboBoxStyle.DropDownList
>             .SelectedIndex = 0
>         End With
>     Finally
>         _isLoading = False
>     End Try
> End Sub
> 
> Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
>     If _isLoading Then
>         Return
>     End If
> 
>     If ComboBox1.SelectedIndex = 0 Then
>         With ComboBox2
>             .SelectedIndex = 0 ※
>             .Enabled = True
>         End With
>     End If
> 
>     If ComboBox1.SelectedIndex = 1 Then
>         With ComboBox2
>             .SelectedIndex = 1
>             .Enabled = False
>         End With
>     End If
> End Sub

返事が遅くなってすみません。
書いて貰ったコードで欲しい動きが出来ましたが、Hongliangさんが指摘した事を勘違いしていました。
現在は、下のコードを使用しています。
Hongliangさん、kingさん本当に有難うございます。

Public Class FmA

    Private Sub FmA_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

        With ComboBox2
            .Items.Add("ミディアム")
            .Items.Add("レア")
            .DropDownStyle = ComboBoxStyle.DropDownList
            .SelectedIndex = 0
        End With

        With ComboBox1
            .Items.Add("魚料理")
            .Items.Add("肉料理")
            .DropDownStyle = ComboBoxStyle.DropDownList
            .SelectedIndex = 0
        End With

    End Sub

    Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged

        If ComboBox1.SelectedIndex = 0 Then
            With ComboBox2
                .SelectedIndex = 0
                .Enabled = True
            End With
        End If

        If ComboBox1.SelectedIndex = 1 Then
            With ComboBox2
                .SelectedIndex = 1
                .Enabled = False
            End With
        End If

    End Sub



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


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

このトピックに書きこむ

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

管理者用

- Child Tree -