0

最小値用と最大値用の 2 つのコンボボックスを作成しました。私のコードは、このコードを使用して、ユーザーが最大値より大きい最小値、または最小値より小さい最大値を選択しないようにする必要があります。

private void MaxRating_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            switch (MaxRating.SelectedIndex)
            {
                case 0:
                    if (MinRating.SelectedIndex > 0)
                        MinRating.SelectedIndex = 0;
                    break;
                case 1:
                    if (MinRating.SelectedIndex > 1)
                        MinRating.SelectedIndex = 1;
                    break;
                case 2:
                    if (MinRating.SelectedIndex > 2)
                        MinRating.SelectedIndex = 2;
                    break;
                case 3:
                    if (MinRating.SelectedIndex > 3)
                        MinRating.SelectedIndex = 3;
                    break;
                case 4:
                    if (MinRating.SelectedIndex > 4)
                        MinRating.SelectedIndex = 4;
                    break;
            }
        }

ただし、「if (MinRating.SelectedIndex > 0)」という行でデバッグすると、「NullReferenceException was unhandled by user code」が表示されます。

理由はわかりませんが、MinRating_SelectionChanged の関数もありますが、そのようなものは得られないようです。

この関数から case:0 を削除すると、エラーは発生しないようです。他の機能からでもありません。> を == に置き換えてみましたが、同じことをしているようです。私は混乱しているだけなので、どんな助けも感謝します。

編集:これらの2行を配置するだけの場合

int minrating = MinRating.SelectedIndex;
int maxrating = MaxRating.SelectedIndex;

2行目にエラーが表示されます

4

3 に答える 3

1

これだけは言えませんか?

if (MinRating.SelectedIndex > MaxRating.SelectedIndex)
{
    MinRating.SelectedIndex = MaxRating.SelectedIndex;
}

次に、まだ設定されていない値を読み取ろうとしません。また、それはずっと短いです。

サイド ノード: SelectedIndex プロパティを使用しないでください。コレクション内のオブジェクトの位置ではなく、オブジェクトの値を操作します。

于 2012-08-08T02:18:29.353 に答える
-1

私はC#の経験はあまりありませんが、MaxRating.SelectedIndexがnullの場合(0はnullと同等)にケース0が実行される可能性があるため、MaxRating.SelectedIndexがnullの場合にケースに入ります。

于 2012-08-08T02:02:07.613 に答える