2013-06-03 134 views
1

我是一个新手程序员。我有一个名为GravCalc的类继承自我的表单类Main。里面有很多处理不同控制的方法。这是一个代码示例。我应该在哪里/如何创建我的课程实例?

public class GravCalc : Main 
    { 
     private static float engineer = 1.0f; 

     public void ShowEngineer() 
     { 
      GravCalc.engineer = 1.1f; 
      gravEngineerLabel.Visible = true; 
      gravEngineerLine.Visible = true; 
     } 
    }; 

我会做这些方法和类的静态,但随后我就无法从Form继承或因为他们都是非静态的控制操作。

在这种情况下,我必须创建我的类的一个实例。所以我在Main班写了GravCalc myGravCalc = new GravCalc();

一切都在编译,但是当我启动程序时,会创建我的类的多个实例,直到达到堆栈帧的最大数量,因此发生System.StackOverflowException

我在做什么错?

编辑

我想做的事情是组中的所有方法和变量concernig一个面板为一类。如果它可能是静态的,那将是完美的。我已经从Main继承了我的控制权,但是你意识到我不是我想要的。

那么有没有可能让一个可以在控件上操作的类?或者我应该把一些东西扔进那个Form类?

+1

为什么您的GravCalc类继承自Main?你知道这使GravCalc成为一种形式吗? – Blorgbeard

+2

因此,'GravCalc'继承自'Main'并且'Main'实例化一个新的'GravCalc'? – 2013-06-03 22:16:13

+0

b [e]沉思无言...... –

回答

2

而是从主要继承有访问控制的,你应该通过您需要在GravCalc的构造函数中使用该类对控件的引用。

public class GravCalc 
{ 
    private ControlType _control1; 
    private ControlType _control2; 

    public GravCalc(ControlType control1, ControlType control2) 
    { 
     _control1 = control1; 
     _control2 = control2 
    } 

    private static float engineer = 1.0f; 

    public void ShowEngineer() 
    { 
     GravCalc.engineer = 1.1f; 
     gravEngineerLabel.Visible = true; 
     gravEngineerLine.Visible = true; 
    } 
}; 
5

GravCalc IS Main ...所以如果在Main中创建GravCalc,那么您将再次创建一个Main,然后再次创建一个Main,然后最终用完堆栈。

你想要做的是找到原来的主要创建,其中与GravCalc替换,并采取了new GravCalc出你的主要

+0

这取决于他在哪里写新的声明不是吗? –

+2

它会,但通过例外的性质,它很容易猜到:) –

相关问题