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

Pass data from a form to another

我正在创建一个工具来管理 Windows 8.1 中的 WLAN 网络(因为 W8 没有带有 GUI 的工具)。在申请中

单击“添加”按钮会显示另一个表单。填写字段后,我想单击 "OK",关闭第二个表单,并处理第一个表单上的输入数据。

我试图实现这个问题 Send values from one form the another form 中的示例,但无法实现。 (我是新手,他们不是很清楚。)

有人可以提供一个工作示例吗?


第一个表单 "Add" 按钮

private void AddButton_Click(object sender, EventArgs e)
{
    // show second form

    // get input values (upon clicking on "OK" and closing the second form)

    // handle them
}

第二种形式"OK"按钮

private void OKButton_Click(object sender, EventArgs e)
{
    // send input values to first form

    this.Close();
}

首先你应该创建一个 class 比如:

public class YourFavoriteDefinedClass 
{
    public string NetworkName;
    public string SecurityType;
    public string EncryptType;
    public string SecurityKey;
}

那么你可以通过以下步骤解决:

程序 1:将 RefreshPerentList 方法添加到父窗体

您可以在您的父表单中声明一个方法,然后在您的第二个表单的 OKButton_Click 中调用它以刷新或将项目添加到您的 ListView


示例:

首先,您应该将以下 cod 添加到您的 AddButton_Click 方法中。

private void AddButton_Click(object sender, EventArgs e)
{
     var frmSecond = new YourSecondFormName();
     frmSecond.Owner = this;
     frmSecond.ShowDialoge();
}

然后在您的 ParentForm 中声明以下方法 (无线网络管理器)

public void RefreshPerentList(YourFavoriteDefinedClass objSecondFormParams)
{
    // Implement Your Code Here to refresh or add item to listview.
    var strNetWorkName = objSecondFormParams.NetworkName;
    var stSecurtiyType = objSecondFormParams.SecurityType; 
    ...
}

You Can Pass SecondForm parameters using an object with special type or Class that I named for example : var objSecondFormParams = new YourFavoriteDefinedClass();

然后您可以在 OKButton_Click 中使用以下代码调用它:

private void OKButton_Click(object sender, EventArgs e)
{
     objSecondFormParams.NetworkName = txtNetWorkName.Text;
     objSecondFormParams.SecurityType= cbSecurityType.SelectedValue;
     ...

    ((YourParentFormName)this.Owner).RefreshPerentList(objSecondFormParams);

    this.Close();
}

程序 2:以第二种形式添加事件

您还可以在第二个表单中添加一个事件,然后在父表单中调用其侦听器以刷新或将项目添加到您的 listview

首先你应该在表格 1 中声明一个委托 例如:
public 委托 void delPassData(TextBox 文本);

在form1的按钮点击事件处理程序中,实例化form2 class和delegate。
将form2中的一个函数赋值给delegate,调用delegate如下:

private void btnSend_Click(object sender, System.EventArgs e)
{
    Form2 frm= new Form2();
    delPassData del=new delPassData(frm.funData);
    del(this.textBox1);
    frm.Show();
}

在 form2 中,添加委托应指向的函数。此函数会将文本框的文本分配给标签:

public void funData(TextBox txtForm1)
{
     label1.Text = txtForm1.Text;
}

您可以使用与此类似的第二种形式创建属性。

private string network_name;
public string Network_Name
{
    get
    {
        return this.network_name;
    }
    set
    {
        this.network_name= value;
    }
}

每个字段依此类推。

然后您可以使用某种 RefreshMethod 轻松访问第一个表单中的那些

将在第二个表单上执行的第一个表单上的 RefreshMethod() 单击“确定”。

public void RefreshGrid()
{
    //get properties variable of second form
    //code to refresh list/grid
}

最后关闭第二个表单。

您可以通过对象传递数据! 在子窗体中创建一个 public 对象,并在关闭第二个窗体时保存该对象上的所有数据。
然后在父表单(第一个表单)中从存储第二个表单数据的对象中读取数据。

首先根据您的第二个表单数据创建一个 class 匹配项:

public class mySecondFormData
{
    public string NetworkName;
    public string SecurityType;
    public string EncryptType;
    public string SecurityKey;
}

第一种形式 "Add" 按钮:

private void AddButton_Click(object sender, EventArgs e)
{
    // show second form
    frm2.ShowDialog()
    // get input values (upon clicking on "OK" and closing the second form)
    var NetworkName = frm2.myData.NetworkName;
    var SecurityType = frm2.myData.SecurityType;
    ...
    // handle them
}

第二种形式:

public mySecondFormData myData = new mySecondFormData();

private void OKButton_Click(object sender, EventArgs e)
{
    // send input values to first form
    myData.NetworkName = txtNetworkName.text;
    myData.SecurityType = txtSecurityType.text;
    ...  

    this.Close();
}