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

时间:2015-07-04 04:41:17

标签: c# forms modal-dialog

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

Screenshot of the application

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

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

有人可以提供一个有效的例子吗?

第一种形式"添加"按钮

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

4 个答案:

答案 0 :(得分:3)

首先你应该创建一个类:

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

然后你可以通过以下程序解决它:

步骤1:将RefreshPerentList方法添加到父窗体

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

实施例

首先,您应该在您的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; 
    ...
}
  

您可以使用我为其命名的特殊类型或类的对象传递SecondForm参数: 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 :(得分:1)

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

在form1的按钮单击事件处理程序中,实例化form2类和委托。
将form2中的函数分配给委托并按如下方式调用委托:

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

答案 2 :(得分:1)

您可以通过Object传递数据! 以子窗体形式创建公共对象,关闭第二个窗体时保存该对象上的任何数据。
然后以父表单(第一个表单)从该对象读取数据,其中存储第二个表单数据。

首先使用第二个表单数据创建一个类匹配:

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

第一种形式"添加"按钮:

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

答案 3 :(得分:0)

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

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

以及每个领域的等等。

然后,您可以使用某种RefreshMethod

轻松访问First表单中的那些

第一个表单上的RefreshMethod()将在第二个表单上执行OK单击。

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

最后关闭第二张表格。