从另一种形式的主表单中获取字符串的正确方法是什么? C#

时间:2015-07-10 03:05:52

标签: c# forms winforms

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

在我的mainForm中,我创建了每个字符串,如此

public string race
    {
        get;set;
    }

我一直试图从unlockForm访问它们,但是像这样创建一个新的mainForm

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

给我一​​个StackOverflowException,第一行是未处理的错误。

我在主表单中创建新表单时没有遇到此问题,所以我想知道正确的方法是什么。

编辑:

以下是@deathismyfriend

所要求的完整代码

这是mainForm构造函数

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";
        }
    }

这是我的unlockForm中的代码

public unlockForm()
    {
        InitializeComponent();
        getStats();
    }

    mainForm mainScreen = new mainForm();

    private void getStats()
    {
        race = mainScreen.race;
    }

编辑#2:

即使我为unlockForm创建了以下代码

public unlockForm()
    {
        InitializeComponent();
        //getStats();
    }

    mainForm mainScreen = new mainForm();

我仍然收到错误

1 个答案:

答案 0 :(得分:2)

有两种方法 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();
}