|
2018/04/06(Fri) 21:14:03 編集(投稿者)
■No86990 (無理ゲー さん) に返信 > ハンドルされてない例外???? どの行で例外が発生し、その時の変数の値が何であるかを調べてみると、 解決に近づくかと思いますよ。
> StarImages.Add(Properties.Resources.MATCH_STAR_1); > StarImages.Add(Properties.Resources.MATCH_STAR_2); > StarImages.Add(Properties.Resources.MATCH_STAR_3);
MATCH_STAR_0 は使わないようになったのですね。
先ほどは Add を 4 回ずつ呼び出していましたが、 今回は、 Add が 3 回だけ呼ばれているわけです。
そしてこれによって StarImages[0]、StarImages[1]、StarImages[2] が 用意されたということになります。インデックスの範囲が 0〜2 となるので [-1] や [3] を渡さないよう注意してくださいね。
> if (!UserMatchStar.Bounds.Contains(e.Location)) return; これは if (!UserMatchStar.Bounds.Contains(e.Location)) { return; } と同義ですよね。
> if (e.Delta > 0) > ++y; > { > y = Math.Max(0, Math.Min(3, y + Math.Sign(e.Delta))); > UserMatchStar.Image = StarImages[y]; > }
これは、 if (e.Delta > 0) { ++y; } { y = Math.Max(0, Math.Min(3, y + Math.Sign(e.Delta))); UserMatchStar.Image = StarImages[y]; } と同じ意味であり、すなわち if (e.Delta > 0) { ++y; } y = Math.Max(0, Math.Min(3, y + Math.Sign(e.Delta))); UserMatchStar.Image = StarImages[y]; ということになりますが、その点は把握されていますでしょうか。
それと y = Math.Max(0, Math.Min(3, y + Math.Sign(e.Delta))); が何をやっているかは分かりますか? (分かりにくいようであれば、無理に Math を使う必要は無いと思います)
【ヒント】 Math.Max(0, intValue) は、常に「0 以上の整数」を返します。 Math.Min(3, intValue) は、常に「3 以下の整数」を返します。 Math.Sign( intValue ) は、intValue の符号にあわせて「-1」「0」「+1」のいずれかを返します。
|