C# 如何以另一种形式将信息从文本框传输到列表框
在我的这个学生注册处,我在主窗体中有一个列表框,在第二个窗体中我添加了学生。在第二种形式中,我在“姓名”文本框中添加了一个姓名和学生的数字,需要用管道字符(“|”)分隔。当用户按下OK按钮时,在文本框中填写姓名和数字后,它应该看起来像下面硬编码的学生。代码如下 第一种形式C# 如何以另一种形式将信息从文本框传输到列表框,c#,C#,在我的这个学生注册处,我在主窗体中有一个列表框,在第二个窗体中我添加了学生。在第二种形式中,我在“姓名”文本框中添加了一个姓名和学生的数字,需要用管道字符(“|”)分隔。当用户按下OK按钮时,在文本框中填写姓名和数字后,它应该看起来像下面硬编码的学生。代码如下 第一种形式 private void listForm1_SelectedIndexChanged(object sender, EventArgs e) { string val = list
private void listForm1_SelectedIndexChanged(object sender, EventArgs e)
{
string val = listForm1.GetItemText(listForm1.SelectedItem);
string[] valArray = val.Split('|');
int sum = 0;
int scores = 0;
for (int i = 1; i < valArray.Length; i++)
{
int num = Convert.ToInt32(valArray[i]);
sum += num;
scores++;
}
int average = sum / scores;
txtAverage.Text = average.ToString();
txtTotal.Text = sum.ToString();
txtScoreCount.Text = scores.ToString();
}
private void Form1_Load(object sender, EventArgs e)
{
listForm1.Items.Add("Hamish Overtone" + "|" + 39 + "|" + 12 + "|" + 85);
listForm1.Items.Add("Claudia Dye" + "|" + 44 + "|" + 56 + "|" + 85);
listForm1.Items.Add("Mike Layne" + "|" + 12 + "|" + 47+ "|" + 28);
}
私有无效列表Form1\u SelectedIndexChanged(对象发送方,事件参数e)
{
//从所选项目获取值
string val=listForm1.GetItemText(listForm1.SelectedItem);
//根据管道字符将项的值拆分为字符串数组
字符串[]valArray=val.Split(“|”);
整数和=0;
智力得分=0;
//迭代所有可能的值并求和,
//在计算有多少个数字的同时:
for(int i=1;i
在主窗口(此处为Form1)中,您希望创建一个委托,用于传递数据,例如字符串。然后创建该委托类型的实例并订阅一个匹配的方法。然后,当您打开辅助窗口时,将该委托传递给辅助窗口
public delegate void DataTransfer(string data);
public partial class Form1 : Form
{
public DataTransfer transferDelegate;
public Form1()
{
InitializeComponent();
transferDelegate += new DataTransfer(DataMethod);
}
public void DataMethod(string data)
{
// Do what you want with your data.
MessageBox.Show(data);
}
private void button1_Click(object sender, EventArgs e)
{
InputWindow win = new InputWindow(transferDelegate);
win.Show();
}
}
现在,当您在辅助窗口中调用该委托时,将调用Form1的DataMethod()
,因此您可以在窗口之间传递信息
您的辅助窗口实现应该如下所示:
public partial class InputWindow : Form
{
DataTransfer transferDel;
public InputWindow(DataTransfer del)
{
InitializeComponent();
transferDel = del;
}
private void button1_Click(object sender, EventArgs e)
{
string data = textBox1.Text;
transferDel.Invoke(data);
}
}
如您所见,当您调用传递的委托时,它会调用主程序中相应的方法,即Form1。尝试添加按钮,并使用以下代码(在Form1类中)对其click事件处理程序进行处理
class form1
{
private void form1_addButton_Click(object sender, EventArgs e)
{
Form2 newForm = new Form2();
newForm.ShowDialog();
foreach(string s in newForm.studentInfo)
{
listForm1.Items.Add(s);
}
}
}
下面的代码将添加到form2类文件中
class form2
{
public List<string> studentInfo {get; set;} //add this to form2
private void form2_addButton_Click(object sender, EventArgs e)
{
//add scores to list here.
}
}
类格式2
{
公共列表studentInfo{get;set;}//将其添加到form2
私有void form2\u addButton\u单击(对象发送者,事件参数e)
{
//将分数添加到此处的列表中。
}
}
编辑//THIS IS IN FORM2 :)
private void btnNewOk_Click(object sender, EventArgs e)
{
string student = textBoxName.Text;
string[] scores = textBoxNewScores.Text.Trim().Split(' ');
for(int i = 0; i < scores.Length; i++)
{
student = student + "|" + scores[i];
}
studentInfo.Add(student);
this.Close();
}
//这是格式2:)
私有void btnNewOk_单击(对象发送者,事件参数e)
{
string student=textBoxName.Text;
string[]scores=textBoxNewScores.Text.Trim().Split(“”);
for(int i=0;i
编辑2
private void listForm1_SelectedIndexChanged(object sender, EventArgs e)
{
string val = listForm1.GetItemText(listForm1.SelectedItem);
string[] valArray = val.Split('|');
int sum = 0;
int scores = 0;
for (int i = 1; i < valArray.Length; i++)
{
int num = Convert.ToInt32(valArray[i]);
sum += num;
scores++;
}
int average = 0;
if (scores != 0)
average = sum / scores;
txtAverage.Text = average.ToString();
txtTotal.Text = sum.ToString();
txtScoreCount.Text = scores.ToString();
}
private void listForm1\u SelectedIndexChanged(对象发送方,事件参数e)
{
string val=listForm1.GetItemText(listForm1.SelectedItem);
字符串[]valArray=val.Split(“|”);
整数和=0;
智力得分=0;
for(int i=1;i
如果我答对了,您的主窗体(其中有一个列表框)将打开第二个窗体,在其中输入数据并单击“确定”后,是否要将该数据传输回主窗体?这是你们的要求吗?是的,在我的主表格中有一个列表框,里面有三个硬编码的学生。当按下add new student(添加新学生)按钮时,它将打开第二个表单,其中有一个姓名框和数字框/当用户按下OK(确定)按钮时,它将把学生转移到表单1中的列表框中,看起来像硬编码的学生。所有这些信息对于这个问题都是不必要的。您需要的帮助实际上是如何在两个窗口之间传递数据。你应该先弄清楚你的问题是什么。此外,如果你在谷歌上搜索或搜索这里,会有很多这样的问题。看起来很令人困惑,一点也不令人困惑。请阅读有关代理以及如何在窗口之间传递数据的更多信息。这是正确的(或正确的)方法之一。一旦你了解了它是如何工作的,它实际上是非常简单和有用的。我对C#非常陌生,就像超新一样,所以尝试复制这一点似乎不可能。如果我有一个答案可以反复背诵,以便在以后或情况再次出现时永远记住,我会学得更好
//THIS IS IN FORM2 :)
private void btnNewOk_Click(object sender, EventArgs e)
{
string student = textBoxName.Text;
string[] scores = textBoxNewScores.Text.Trim().Split(' ');
for(int i = 0; i < scores.Length; i++)
{
student = student + "|" + scores[i];
}
studentInfo.Add(student);
this.Close();
}
private void listForm1_SelectedIndexChanged(object sender, EventArgs e)
{
string val = listForm1.GetItemText(listForm1.SelectedItem);
string[] valArray = val.Split('|');
int sum = 0;
int scores = 0;
for (int i = 1; i < valArray.Length; i++)
{
int num = Convert.ToInt32(valArray[i]);
sum += num;
scores++;
}
int average = 0;
if (scores != 0)
average = sum / scores;
txtAverage.Text = average.ToString();
txtTotal.Text = sum.ToString();
txtScoreCount.Text = scores.ToString();
}