从主窗体以另一种形式获取字符串的正确方法是什么?C#

本文关键字:方法 是什么 字符串 获取 窗体 另一种 | 更新日期: 2023-09-27 18:01:53

我在将字符串从主窗体传递到另一个名为unlockForm的窗体时遇到问题。

在我的mainForm中,我创建了每个字符串,就像一样

public string race
    {
        get;set;
    }

我一直试图从unlockForm访问它们,但创建了一个新的mainForm,比如这个

mainForm mainScreen = new mainForm();
unlockRace = mainform.race;

给了我第一行的StackOverflowException未处理错误。

我在主表单中制作新表单时没有遇到这个问题,所以我想知道正确的方法是什么

编辑:

以下是@deathismyfriend 要求的完整代码

这是主窗体构造函数

public mainForm()
    {
        InitializeComponent();
    }

这是mainForm中更新比赛字符串的代码。

public string race
    {
        get;set;
    }

private void raceUpdate(object sender, EventArgs e)
    {
        if (raceBox.Text == "Human")
        {
            if (infoText != humanText)
            {
                infoText = humanText;
                infoboxUpdate(sender, e);
            }
        }
        else if (raceBox.Text == "Troll")
        {
            if (infoText != trollText)
            {
                infoText = trollText;
                infoboxUpdate(sender, e);
            }
        }
        race = raceBox.Text;
        if (race == "") 
        {
            race = "Unspecified";
        }
    }

这是我解锁表单中的代码

public unlockForm()
    {
        InitializeComponent();
        getStats();
    }
    mainForm mainScreen = new mainForm();
    private void getStats()
    {
        race = mainScreen.race;
    }

编辑#2:

即使当我使我的代码解锁形成以下

public unlockForm()
    {
        InitializeComponent();
        //getStats();
    }
    mainForm mainScreen = new mainForm();

我仍然收到错误

从主窗体以另一种形式获取字符串的正确方法是什么?C#

有两种方法1:

UnlockForm.cs

private string _race;
public UnlockForm(string race)
{
 _race = race;
}

MainForm.cs

private void LuanchUnlockForm()
{
 var unlockForm = new UnlockForm("Human");
 unlockForm.ShowDialog();
}

第二种方式:

UnlockForm.cs

private MainForm _mainForm;
public UnlockForm(MainForm mainForm)
{
 _mainForm= mainForm;
}
private void GetRace()
{
 var myRace = _mainForm.race;
}

MainForm.cs

private void LuanchUnlockForm()
{
 var unlockForm = new UnlockForm(this);
 unlockForm.ShowDialog();
}

如果你想发送多个字符串,请执行以下

像一样创建新类

Human.cs

public class Human
        {
            public string Name { get; set; }
            public int Age { get; set; }
            public string Address { get; set; }
            // or anything you want
        }

现在在UnlockForm.cs

private Human _human;
public UnlockForm(Human human)
{
  _human= human;
}
private void GetHumanAttributes()
{
  var age = _human.Age; 
  //and others ...
}

MainForm.cs

private void LuanchUnlockForm()
{
 var human = new Human();
 human.Name = "name";
 human.Age = 19;
 // others
 var unlockForm = new UnlockForm(human);
 unlockForm.ShowDialog();
}