我正在创建一个工具来管理Windows 8.1中的WLAN网络(因为W8没有一个带有GUI的工具)。在应用程序中
单击“添加”按钮会显示另一个表单。填写完字段后,我想点击"确定",关闭第二个表单,然后处理第一个表单上的输入数据。
我尝试在这个问题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();
}
答案 0 :(得分:3)
首先你应该创建一个类:
public class YourFavoriteDefinedClass
{
public string NetworkName;
public string SecurityType;
public string EncryptType;
public string SecurityKey;
}
然后你可以通过以下程序解决它:
您可以在父表单中声明一个方法,然后在第二个表单的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();
}
您还可以在第二个表单中添加一个事件,然后在父表单中调用其监听器来刷新或向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
}
最后关闭第二张表格。