我正在使用c#创建一个Windows窗体应用程序。我的表单有标签,列表框和按钮,所有这些都需要编辑。它们是从不同的类编辑的,并且还需要标签中的值来执行其他逻辑。
我的问题是从其他类访问这些控件。我尝试制作表单的实例并使用它:
Form frm = new Form();
myVar = frm.lblMylabel.Text;
然而,使用断点,我遵循代码,它在上面创建的实例和Form代码的开始之间循环,Form代码再次调用创建实例的类。
我试图在网上找到答案,但是它们似乎不适用于我想要做的事情,虽然我不确定如何去做,但它们看起来过于复杂。 所以,我的问题是:是否有一种相对简单的方法可以从另一个类的表单中的控件访问值和编辑值?
提前致谢。
编辑 - 断点从 Point 3 开始,' = new Form();'。
循环到 Point 1 。
Point 2 调用GamePlay()。
到达 Point 3 并循环重启。
public partial class frmGame : Form //Point 1
{
public frmGame()
{
InitializeComponent();
Game.GamePlay(); //Point 2
}
class Game{
public static void GamePlay()
{
frmGame form = new frmGame(); //Point 3
form.lstPrevious1.Items.Add("Item Number");
}
}
答案 0 :(得分:2)
您的问题与访问其他类的属性无关,您只是生成一个递归循环:
在Point 3
,在方法GamePlay
中,您可以创建frmGame
的新实例。创建实例(对象)时,会调用其constructor
。在这种情况下,构造函数是方法public frmGame()
。
在此构造函数中,您现在调用GamePlay
(Point 2
),正如我们之前所看到的,再次创建frmGame
的新实例(Point 3
再次) ,也再次调用其构造函数(Point 1
)。
此时,您已经创建了两个表单(虽然尚未显示)。
很快就会收到堆栈溢出。
一种可能的解决方案:将创建实例的行移动到另一个方法中,该方法保证在程序启动时只调用一次:
public partial class frmGame : Form //Point 1
{
public frmGame()
{
InitializeComponent();
Game.GamePlay(); //Point 2
}
}
class Game{
public static void GameStart(){
frmGame form = new frmGame(); //Point 3
}
public static void GamePlay()
{
form.lstPrevious1.Items.Add("Item Number");
}
}