将文本框中的用户输入从一种表单传输到另一种表单
问题描述:
我正在制作一个程序,用户可以在一个表单上的文本框中输入值,然后数据将转入其他表单。我认为这样做的最好方法是将用户数据存储在多个数组中,然后将这些数组放在一边,但此时我真的很麻烦。该文本框也被创建,一旦用户输入他们需要多少这样的文本框不存在于页面上最初将文本框中的用户输入从一种表单传输到另一种表单
string q = combobox1.SelectedItem.ToString();
int g = Convert.ToInt32(q);
MessageBox.Show("I have added " +(g-1) +" Films to the list");
TextBox[] FilmTitle1 = new TextBox[int.Parse(q)];
TextBox[] FilmBudget1 = new TextBox[int.Parse(q)];
TextBox[] FilmBoxOffice1 = new TextBox[int.Parse(q)];
TextBox[] FilmDirector1 = new TextBox[int.Parse(q)];
TextBox[] FilmRtScore1 = new TextBox[int.Parse(q)];
TextBox[] FilmGenre1 = new TextBox[int.Parse(q)];
int y = 500;
for (int i = 0; i < g; i++)
{
FilmTitle1[i] = new TextBox();
FilmTitle1[i].Text = "Film Title";
FilmTitle1[i].Size = new Size(162, 20);
FilmTitle1[i].Location = new Point(106, y);
FilmTitle1[i].Tag = 0;
this.Controls.Add(FilmTitle1[i]);
y= y + 40;
private void Createbar_Click(object sender, EventArgs e)
{
BarGraphCreation frm = new BarGraphCreation(FilmTitle.Text, FilmBudget.Text, FilmBoxOffice.Text, FilmDirector.Text, FilmGenre.Text, ft1, FilmBudget1.Text, FilmBoxOffice1.Text, FilmDirector1.Text, FilmGenre1.Text);
frm.Show();
}
但是,当我做这种方式它说,没有构建文本框,尽管事实上,它允许它在程序的其他地方。 任何类型的帮助是极为赏识
答
public class Form
{
// your code ...
string q = combobox1.SelectedItem.ToString();
int g = Convert.ToInt32(q);
MessageBox.Show("I have added " +(g-1) +" Films to the list");
public TextBox[] FilmTitle1 = new TextBox[int.Parse(q)];
public TextBox[] FilmBudget1 = new TextBox[int.Parse(q)];
public TextBox[] FilmBoxOffice1 = new TextBox[int.Parse(q)];
public TextBox[] FilmDirector1 = new TextBox[int.Parse(q)];
public TextBox[] FilmRtScore1 = new TextBox[int.Parse(q)];
public TextBox[] FilmGenre1 = new TextBox[int.Parse(q)];
int y = 500;
for (int i = 0; i < g; i++)
{
FilmTitle1[i] = new TextBox();
FilmTitle1[i].Text = "Film Title";
FilmTitle1[i].Size = new Size(162, 20);
FilmTitle1[i].Location = new Point(106, y);
FilmTitle1[i].Tag = 0;
this.Controls.Add(FilmTitle1[i]);
y= y + 40;
private void Createbar_Click(object sender, EventArgs e)
{
BarGraphCreation frm = new BarGraphCreation(this);
frm.Show();
}
}
public class BarGraphCreation
{
// your code...
Form form;
public BarGraphCreation(Form form)
{
// ...
this.form = form;
}
private void function()
{
// here you can work with your data like
// form.FilmTitle1 and so on
}
}
答
你应该避免将像TextBox
整个对象到一些其他控件。总体思路是你永远只会传递数据(信息)。
由于Form
布局是动态创建的,所以关于它的信息应该保存在某个地方,在这里可以轻松地再次访问。
实施例(包括阵列和列表作为例子):
public class Form1 : Form
{
private TextBox[] FilmTitles;
private List<TextBox> FilmBudget = new List<Textbox>();
//code removed for brevity
private void Button1_Click(/***/)
{
FilmBudget.Clear();
int count = Convert.ToInt32(q);
FilmTitles = new TextBox[count];
for (int i = 0; i < count; i++)
{
FilmTitles[i] = new TextBox()
{
Text = "Programmer in one day",
Size = new Size(162, 20)
// all other definitions
};
FilmBudget.Add(new TextBox()
{
Text = "1225",
Size = new Size(162, 20)
// all other definitions
};
this.Controls.Add(FilmTitles[i]);
this.Controls.Add(FilmBudget[i]);
//Now you are holding all the TB & text in global variables (arrays/lists)
}
}
private void Createbar_Click(object sender, EventArgs e)
{
BarGraphCreation frm = new BarGraphCreation(
FilmTitles.Select(a => a.Text).ToArray(),
FilmBudget.Select(a => a.Text).ToArray());
frm.Show();
}
}
其中:
public class BarGraphCreation : Form
{
public BarGraphCreation(string[] Titles, string[] Budgets)
{ }
}
注意,该部分是使用LINQ
选择确切属性(值)分为2个数组:
BarGraphCreation frm = new BarGraphCreation(
FilmTitles.Select(a => a.Text).ToArray(),
FilmBudget.Select(a => a.Text).ToArray());
请输入'FilmTitle'定义的行和'BarGraphCreation()'构造函数。 – Tatranskymedved
@Tatranskymedved已经在那里..第四代码线。 – BugFinder
@BugFinder:我只能看到构造函数的调用,但不是它的定义。无法找到'FilmTitle'(我只能看到'FilmTitle1')。 – Tatranskymedved