3

我有两种颜色“红色”和“鲑鱼”。我需要创建动态面板也面板背景颜色。这些颜色必须介于两种颜色(红色

 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。这里有一个提示,当你在调试器中遇到堆栈溢出异常时,转到调试菜单 -> Windows -> 调用堆栈,你会立即看到问题。

于 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 回答
0

正如他们所说,你有一个无限递归循环,这就是你得到堆栈溢出的原因。

作为快速修复从 BackGroundColorArrangerBase 中删除此行:

BackGroundColorArranger(x, Color.FromArgb(z));

所以它看起来像这样:

        void BackGroundColorArrangerBase(int z) 
        {
           Panel panel = new Panel();
           panel.ID = z.ToString(); //this wil generate the same id for the same pair of colors
           panel.Width = 150;
           panel.Height = 50;
           panel.BackColor = Color.FromArgb(z);
           this.Controls.Add(panel);
        }

那应该停止递归。除了动态面板创建之外,您还不清楚您需要什么。因为代码只会创建一个面板,并且每次调用 BackGroundColorArranger 时都会创建一个新面板 - 使用不同的颜色对 - 因为您使用颜色对作为面板的 ID。

如果您需要多个面板,请使用不同的颜色对进行有限循环调用 BackGroundColorArranger ...在具有固定大小的原点。

于 2009-06-12T08:31:45.527 回答