3

「赤」と「鮭」の2色があります。パネルの背景色も動的に作成する必要があります。これらの色は2色(赤)の間にある必要があります

 public Color x, y;
        protected void Page_Load(object sender, EventArgs e)
        {
            BackGroundColorArranger(Color.Red, Color.Salmon);
        }
        void BackGroundColorArranger(Color x, Color y)
        {

            BackGroundColorArrangerBase(Convert.ToInt32((float)(x.ToArgb() + y.ToArgb()) / 2));
        }
        void BackGroundColorArrangerBase(int z)
        {
            Panel panel = new Panel();
            panel.ID = z.ToString();
            panel.Width = 150;
            panel.Height = 50;
            panel.BackColor = Color.FromArgb(z);
            this.Controls.Add(panel);
            BackGroundColorArranger(x, Color.FromArgb(z));
        }

しかし、どうすればこれを行うことができますか。上記のコードは私にstackoverflowエラーを与えます。

4

5 に答える 5

4

終了条件なしで BackGroundColorArranger を再帰的に呼び出すためです。ここにヒントがあります。デバッガーでスタック オーバーフロー例外が発生した場合は、[デバッグ] メニュー -> [ウィンドウ] -> [コール スタック] に移動すると、問題がすぐにわかります。

于 2009-06-12T08:05:37.230 に答える
2

C# 開発者ではありませんが、そこには単純な無限再帰があるように見えます。

これは冗談の質問ですか、それともこれはどういうことですか?

于 2009-06-12T08:06:26.353 に答える
0

これらのそれぞれが互いに呼び出しているため、スタック オーバーフローが発生しています (その後、スタック オーバーフローまで他の呼び出しが繰り返されます)。

あなたのコードは効果的です:

    void BackGroundColorArranger(Color, Color)
    {
        BackGroundColorArrangerBase(int);
    }
    void BackGroundColorArrangerBase(int)
    {
        BackGroundColorArranger(Color, Color);
    }
于 2009-06-12T08:05:41.223 に答える
0

同じ関数を再帰的に呼び出しています。ストック オーバーフロー エラーは、再帰が終わらないことを意味します。

メソッドが自分自身を呼び出すときに最終的に終了するように、パラメーターを変更する必要があります。

于 2009-06-12T08:05:48.867 に答える