将数据从另一个表单传递到另一个表单

时间:2016-08-28 09:43:59

标签: c# forms

我有关于将数据从表单传递到另一种形式的问题 这是我在学校的任务 在我的第一个表单中,我有一个按钮和3个文本框,标记为id,name和address。当我单击按钮时,将出现另一个表单,我也希望第一个表单不可访问。第二个表单显示了我已创建的数据库中的数据列表(ID,名称,地址)。选择所需数据后,会出现一个标有“select”的按钮,其代码如下:

private void metroButtonSelect_Click(object sender, EventArgs e)
{
    string selectedwcNo = metroGrid1.SelectedRows[0].Cells[0].Value.ToString();
    string selectedwcFullname = metroGrid1.SelectedRows[0].Cells[1].Value.ToString();
    string selectedwcAddress = metroGrid1.SelectedRows[0].Cells[2].Value.ToString();

}

我不知道接下来该做什么。我想将这些数据传递给我的第一个表格

3 个答案:

答案 0 :(得分:1)

为您的值创建一个类:

public class Person
{
    public string No {get; set;}
    public string Name {get; set;}
    public string Address {get; set;} 
}

在您的第二个表单中添加readonly公共属性,从中获取所选数据。

public class SecondForm
{

    private Person _SelectedPerson;
    public Person SelectedPerson
    {
        get { return _SelectedPerson; }
    }

    //Set data to the SelectedPerson in your click eventhandler
    private void metroButtonSelect_Click(object sender, EventArgs e)
    {
        _SelectedPerson = new Person();
        _SelectedPerson.No = metroGrid1.SelectedRows[0].Cells[0].Value.ToString();
        _SelectedPerson.Name = metroGrid1.SelectedRows[0].Cells[1].Value.ToString();
        _SelectedPerson.Address = metroGrid1.SelectedRows[0].Cells[2].Value.ToString();
    }

}

然后在第一个方法中创建方法,打开第二个表单并返回所选数据

public class FirstForm
{

    private Person GetSelectedPerson();
    {
        Person selected = null;
        using(var secondForm = new SecondForm())
        {
            secondForm.ShowDialog();
            selected = secondForm.SelectedPerson;
        }
        return selected;
    }

    //And use above method in button click eventhandler
    private void Button_Click(object sender, EventArgs e)
    {
        Person selected = this.GetSelectedPerson();
        if(selected != null)
        {
            //Show selected data in the textboxes
            this.TextBoxNo.Text = selected.No;
            this.TextBoxName.Text = selected.Name;
            this.TextBoxAddress.Text = selected.Address;
        }
    }
}

secondForm.ShowDialog()方法会将表单显示为模式,这将使第一个表单无法访问。

答案 1 :(得分:0)

制作新表格:

Form2 frm2 = new Form2();
frm2.show();

隐藏表格:

this.Hide();

我真的不知道你想要做什么,但也许这会有所帮助 https://www.youtube.com/watch?v=PI3ad-TebP0

答案 2 :(得分:0)

DataGridView 用于显示/更改两个表单上的相同数据时,另一个功能可能更可取 - 数据绑定。如果数据将在第一个表格的第二个表格上更改,它将自动更新。

下面的示例演示了如何使用它。

<强> Persons.cs

using System.Windows.Forms;
using System.Collections.Generic;
using System.ComponentModel;

namespace FormsDataGridViewBinding
{
    public partial class Form1 : Form
    {
        BindingList<Person> personList = new BindingList<Person>();

        public Form1()
        {
            personList.Add(new Person("number1", "name1", "address1"));
            personList.Add(new Person("number2", "name2", "address2"));

            InitializeComponent();
            dataGridView1.DataSource = personList; 
        }

        private void button1_Click(object sender, System.EventArgs e)
        {
            using (var form2 = new Form2())
            {
                form2.Persons = personList;
                form2.ShowDialog();                
            }
        }
    }
}

<强> Form1.cs的

using System.Windows.Forms;
using System.Collections.Generic;
using System.ComponentModel;

namespace FormsDataGridViewBinding
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();            
        }

        public BindingList<Person> Persons 
        { 
            get; set; 
        }

        private void Form2_Load(object sender, System.EventArgs e)
        {
            dataGridView1.DataSource = Persons; 
        }        
    }
}

<强> Form2.cs

{{1}}