C# 在窗体之间传递多维数组
C# Passing multidimensional arrays between forms
我有一个主窗体,我可以在其中设置设置并显示一些内容,包括 "MenuStrip" 和第二个窗体,该窗体在单击窗体 1 中的 "Add" 按钮时打开。
在2.表单中,用户可以向文本框添加多个字符串。点击表格2中的"Done"后,所有的信息都会保存在一个多维数组[].
中
然后表单 1 使用 get/set 检索这些信息。
问题:我在 get 方法上得到一个无限循环 =/ 我认为这是因为我没有定义数组有多少 columns/rows(这是不可能的,因为用户可以添加更多信息动态)。所以也许我必须传递引用(我如何管理它?我知道如何在创建新窗体的实例时在窗体之间传递东西,但在旧窗体已经打开并且我关闭第二个窗体时不知道)或者是还有别的办法吗?
我的代码:
//in Form 1
private void btn_Add_Click(object sender, EventArgs e)
{
using (form2 = new AddStuff())
{
form2.ShowDialog();
string [,] copy = form2._NewMenuStrip.Clone() as string [,];
for (int i = 0; i < copy.GetLength(0);i++ )
{
for (int j=0; j < copy.GetLength(1);j++)
{
MessageBox.Show(copy[i, j]);
}
}
}
}
//in Form 2
public string [,] _NewMenuStrip
{
get { return _NewMenuStrip; } // Here i get the infinite Loop
set { _NewMenuStrip = value;}
}
private void btn_Done_Click(object sender, EventArgs e)
{
WriteInformationToArray();
this.Close();
}
提前致谢!
此致,
克里斯蒂安
你得到那个无限循环,因为 属性 是自引用的。您需要访问变量或将 getter 和 setter 定义留空。 .Net 将处理这些变量。像这样定义它:
public string [,] _NewMenuStrip { get; set; }
或
定义一个保存您的值的私有变量:
private string [,] _newMenuStrip;
public string [,] _NewMenuStrip
{
get { return _newMenuStrip; } //<--- Set the private one !
set { _newMenuStrip = value; } //<--- return the private one !
}
这与上面的完全相同(编译器将为您创建一个私有字段)!
我有一个主窗体,我可以在其中设置设置并显示一些内容,包括 "MenuStrip" 和第二个窗体,该窗体在单击窗体 1 中的 "Add" 按钮时打开。
在2.表单中,用户可以向文本框添加多个字符串。点击表格2中的"Done"后,所有的信息都会保存在一个多维数组[].
中然后表单 1 使用 get/set 检索这些信息。
问题:我在 get 方法上得到一个无限循环 =/ 我认为这是因为我没有定义数组有多少 columns/rows(这是不可能的,因为用户可以添加更多信息动态)。所以也许我必须传递引用(我如何管理它?我知道如何在创建新窗体的实例时在窗体之间传递东西,但在旧窗体已经打开并且我关闭第二个窗体时不知道)或者是还有别的办法吗?
我的代码:
//in Form 1
private void btn_Add_Click(object sender, EventArgs e)
{
using (form2 = new AddStuff())
{
form2.ShowDialog();
string [,] copy = form2._NewMenuStrip.Clone() as string [,];
for (int i = 0; i < copy.GetLength(0);i++ )
{
for (int j=0; j < copy.GetLength(1);j++)
{
MessageBox.Show(copy[i, j]);
}
}
}
}
//in Form 2
public string [,] _NewMenuStrip
{
get { return _NewMenuStrip; } // Here i get the infinite Loop
set { _NewMenuStrip = value;}
}
private void btn_Done_Click(object sender, EventArgs e)
{
WriteInformationToArray();
this.Close();
}
提前致谢!
此致, 克里斯蒂安
你得到那个无限循环,因为 属性 是自引用的。您需要访问变量或将 getter 和 setter 定义留空。 .Net 将处理这些变量。像这样定义它:
public string [,] _NewMenuStrip { get; set; }
或
定义一个保存您的值的私有变量:
private string [,] _newMenuStrip;
public string [,] _NewMenuStrip
{
get { return _newMenuStrip; } //<--- Set the private one !
set { _newMenuStrip = value; } //<--- return the private one !
}
这与上面的完全相同(编译器将为您创建一个私有字段)!