【问题标题】:C# unhandled exception of type 'System.StackOverflowException'System.StackOverflowException 类型的 C# 未处理异常
【发布时间】:2011-08-09 12:07:48
【问题描述】:

希望我能解释清楚。我有一个倒数计时器 - 用户输入时间等,然后选择是否要从单选按钮打开最小尺寸或最大尺寸。根据他们的选择,它将加载 Min 表单或 Max 表单,其中在 UserControl 表单中输入的时间值将被传递并开始倒计时。现在用户控制表单上有暂停/停止、重置等按钮。我希望这些改为最小/最大表格。我希望最简单的方法是隐藏用户控件表单上的按钮,然后尝试将其连接到最小/最大表单上的按钮,所以如果他们被按下它就像用户控件上的按钮一样按下。但是我在标题中收到错误 - 它以黄色突出显示下面的语句(将执行的下一个语句)......

(注意 - 这行代码是 Min 形式 - 我需要声明它的一个新实例,以便我可以调用函数 PauseMinClick(MinForm 上的暂停按钮)_ 我希望它调用 btnPauseClick 函数在 CountdownUserControl 中)。

    private CountdownUserControl CU = new CountdownUserControl();

    private void PauseMin_Click(object sender, EventArgs e)
    {
        CU.btnPause_Click(sender, e);
    }

并在下面以绿色突出显示(该线程从当前函数返回时执行的下一条语句)...

    private Min _Min = new Min();

(这是在我的 CountdownUserControl 类中 - 请注意,我需要它的一个实例来传递必须倒计时的值。有谁知道我应该怎么做才能轻松解决这个问题?理想情况下,我不想重新- 编写大量代码 - 我只想让它与新表单 Max/Min 上的按钮一起工作,但连接起来就像在 UserControl 表单上按下它们一样(它们都可以正常工作)。

非常感谢 - 科利

【问题讨论】:

    标签: c# .net winforms class


    【解决方案1】:

    听起来你有这个:

    class CountdownUserControl
    {
        private Min _Min = new Min();
    
        // Other stuff...
    }
    
    class Min
    {
        private CountdownUserControl CU = new CountdownUserControl();
    
        // Other stuff...
    }
    

    换句话说,要创建Min 的实例,您需要创建CountdownUserControl... 的实例,而Min... 的实例又需要创建Min... 的实例CountdownUserControl 的一个实例...你明白为什么会出现问题了吗?

    我不太清楚你想要达到什么目的,但这就是问题的原因。也许一个类应该在其构造函数中接受一个参数以允许它引用另一个类的实例?

    【讨论】:

    • 我在想CU.btnPause_Click 实际上会调用PauseMin_Click :-)
    • @John - 是的,这就是我所拥有的场景类型 - 我现在看到它是如何导致问题的。我不确定您的解决方案。我正在尝试使用 Min 内的 CountdownuserControl 中的功能。所以在分钟内我想打电话给 CU.btnPauseClick
    • @CollyMcK:您需要考虑真正应该创建其他类的实例。大概你想在CountdownUserControl 的特定实例上调用btnPauseClick,而不仅仅是任意一个。
    • CountdownUser 控件上有一个按钮,叫做暂停。我想在 Min 表单上连接我的暂停按钮,以便按下时就像按下倒计时用户控件上的暂停按钮一样。
    • @CollyMcK:那么这两个控件是谁创建的?听起来实际上你应该在外面进行接线,代码只知道两个对象。硬编码以了解彼此是错误的。
    【解决方案2】:

    你说这是在你的 CountdownUserControl 类中?如果是这样,这就是问题所在:

     private CountdownUserControl CU = new CountdownUserControl(); 
    

    它创建了一个新的 CountdownUserControl,它创建了一个 CountdownUserControl,它......等等直到堆栈溢出

    【讨论】:

    • 不,据我所知,那个在 Min 中......问题是这两个类都有一个引用另一个的字段并创建一个新实例。看我的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多