Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何以另一种形式将信息从文本框传输到列表框_C# - Fatal编程技术网

C# 如何以另一种形式将信息从文本框传输到列表框

C# 如何以另一种形式将信息从文本框传输到列表框,c#,C#,在我的这个学生注册处,我在主窗体中有一个列表框,在第二个窗体中我添加了学生。在第二种形式中,我在“姓名”文本框中添加了一个姓名和学生的数字,需要用管道字符(“|”)分隔。当用户按下OK按钮时,在文本框中填写姓名和数字后,它应该看起来像下面硬编码的学生。代码如下 第一种形式 private void listForm1_SelectedIndexChanged(object sender, EventArgs e) { string val = list

在我的这个学生注册处,我在主窗体中有一个列表框,在第二个窗体中我添加了学生。在第二种形式中,我在“姓名”文本框中添加了一个姓名和学生的数字,需要用管道字符(“|”)分隔。当用户按下OK按钮时,在文本框中填写姓名和数字后,它应该看起来像下面硬编码的学生。代码如下

第一种形式

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();
}