请问 2个窗口(form1,form2),实现数据传递有多少种方法? 回答一个给10分!全局变量?结构体?还是构造函数?举例说明,大家都学习下!! 顶~~~~~~~~~~~~~~~~~~~~~~~~~~ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 其实跨窗体传参很简单.父窗体Form1子窗体Form2class Form2{ private Form1 _frm1; public Form1 Frm1 { get{return _frm1;} set{this._frm1 = value;} }----------------------------------------------class Form1{ string s; void SetString(string str) { s = str; }} override onclosing方法,或者添加FormClosing事件都可以... 在里边添加Form1的中的函数 _frm1.SetString("aaaaa");}如果是想在Form2关闭的时候,把值传给Form1,那Form1可以做个方法来接收SetString()方法,就自由发挥了.我的空间也有例子 可以去看下.推荐使用这种方法...那种全局的方法,根本谈不上安全性.这种发放一定要掌握. PS:以下由Ctrl+C和Ctrl+V完成,^_^C#窗体间传值的几种方法调用窗体(父):Form1,被调用窗体(子):Form2方法1: 所有权法//Form1://需要有一个公共的刷新方法public void Refresh_Method(){//...}//在调用Form2时,要把Form2的所有者设为Form1Form2 f2 = new Form2() ;f2.Owner = this;f2.ShowDialog() ;//Form2://在需要对其调用者(父)刷新时Form1 f1 ;f1 = (Form1)this.Owner;f1.Refresh_Method() ;方法2:自身传递法//Form1://需要有一个公共的刷新方法public void Refresh_Method(){//...}Form2 f2 = new Form2() ;f2.ShowDialog(this) ;//Form2:private Form1 p_f1;public Form2(Form1 f1){InitializeComponent();p_f1 = f1;}//刷新时p_f1.Refresh_Method() ;方法3:属性法//Form1://需要有一个公共的刷新方法public void Refresh_Method(){//...}//调用时Form2 f2 = new Form2() ;f2.P_F1 = this;f2.Show() ;//Form2:private Form1 p_f1;public Form1 P_F1{get{return p_f1;}set{p_f1 = value;}}//刷新时p_f1.Refresh_Method() ;方法4:委托法//声明一个委托public delegate void DisplayUpdate();//Form1://需要有一个公共的刷新方法public void Refresh_Method(){//...}//调用时Form2 f2 = new Form2() ;f2.ShowUpdate += new DisplayUpdate(Refresh_Method) ;f2.Show() ;//Form2://声明事件public event DisplayUpdate ShowUpdate;//刷新时,放在需要执行刷新的事件里ShowUpdate();Form1中放一个Label1,一个Button1,Form1为主窗口,当点击Button1时,执行:Form2 f2 = new Form2();f2.ShowDialog(this);Form2中放一个TextBox1,一个Button1,当点击Button1时执行:Form1 f1 = (Form1)this.Owner;f1.Label1.Text = this.TextBox1.Text;注意:Form1中的label1要设为public用C#实现两个WinForm间的传值这个题目我曾经出给来公司面试的人,也曾经出给刚毕业的大学生,几乎是没有人会做啊。难道这个问题真的这么难么?现在我给出实现的主要源代码(开发平台为VC#2005)。实现的思路: 从Form1传递到Form2: 2个窗体即两个类,两个窗体间的数据传送,可以采用构造函数来实现。 从Form2返回到Form1,并传递数据:实例化Form2后,打f2用ShowDialog()方法,然后等待f2关闭时再回传数据到Form1。实现步骤及代码: 1:新建两个窗口: Form1,Form2; 2:打开Form2,添加一个textBox:textBox1;添加一个Button:button1;然后添加一个构造函数: //定义一个变量,用来传值。 public string returnValue ; public Form2(string txtValue) { InitializeComponent(); this.textBox1.Text = txtValue; }然后在button1的单击事件中添加如下代码: private void button1_Click(object sender, EventArgs e) { returnValue = this.textBox1.Text; this.Close(); } 3:Form1中添加一个textBox:textBox1;添加一个Button:button1;然后在button1的单击事件中添加如下代码: private void button1_Click(object sender, EventArgs e) { string txtValue = this.textBox1.Text; Form2 f2 = new Form2(txtValue); f2.ShowDialog(); this.textBox1.Text = f2.returnValue; }Form1 中 (父窗口:) public class Form1 : System.Windows.Forms.Form{ private System.Windows.Forms.Button btnOpen; public System.Windows.Forms.TextBox txtContent; //注意是public ........ ........ [STAThread] static void Main() { Application.Run(new Form1()); } private void btnOpen_Click(object sender, System.EventArgs e) { Form2 frm=new Form2(this); frm.ShowDialog(); }}Form2中(子窗口)public class Form2 : System.Windows.Forms.Form{ private System.Windows.Forms.Button button1; private System.Windows.Forms.TextBox txtValue; private Form _parentForm=null; public Form2() { InitializeComponent(); } public Form2(Form parentForm) { InitializeComponent(); this._parentForm =parentForm; } ........ ........ //更新父窗口中文本框中的值! private void button1_Click(object sender, System.EventArgs e) { ((Form1)_parentForm).txtContent.Text =this.txtValue .Text ; } 窗体A:public static string str;str="赋值"窗体B:string 变量 = 窗体A.str; 两个窗体传递数据 不是很复杂的 但方式很多静态类public static class UserData{ public static DataTable m_Table;}在使用的时候 UserData.DataTable 就可以了构造修改Form2的构造方法public DataTable m_Table;public Form2(DataTable p_Table){ InitializeComponent(); m_Table=p_Table;}在new Form2的时候 new Form2(你要传递的DataTable);tagForm2 _Form2 =new Form2();_Form2.Tag =你要传递的DataTable;在使用的时候 DataTable _Table =(DataTable)this.Tag;Public 在Form1 里定义 public DataTable m_Table;在Form2里只要获取到Form1的实例就可以了例如 在Form2里Form1 _Form1 =(Form1)Application.OpenForms["Form1"];_Form1.m_Table...另外委托和事件也是不错的选择 问一个转换编码的问题 有高手知道吗? C#调用C++动态库时参数类型这样转换对吗? 委托小问题 求C# 排列算法 Wince5.0+CompactFramework2.0下,触摸屏长时间无操作的情况下自动退出登录 这样该如何取值 请各位大哥帮帮忙,这个问题有点急 返回表中选重的是第几行 求一正则表达式,判断一个字符串为正整数 请问,在VB。NET中添加新项中有模块,在C#中怎么没有啊?用什么来代替? 我用vista home basic发布asp.net项目,母版页和用户控件全部丢失 FontDialog.Font.Size的一个问题
父窗体Form1
子窗体Form2
class Form2
{
private Form1 _frm1;
public Form1 Frm1
{
get{return _frm1;}
set{this._frm1 = value;}
}
----------------------------------------------
class Form1
{
string s;
void SetString(string str)
{
s = str;
}
} override onclosing方法,或者添加FormClosing事件都可以...
在里边添加Form1的中的函数
_frm1.SetString("aaaaa");
}
如果是想在Form2关闭的时候,把值传给Form1,那Form1可以做个方法来接收SetString()方法,就自由发挥了.
我的空间也有例子 可以去看下.
推荐使用这种方法...那种全局的方法,根本谈不上安全性.这种发放一定要掌握.
调用窗体(父):Form1,被调用窗体(子):Form2
方法1: 所有权法
//Form1:
//需要有一个公共的刷新方法
public void Refresh_Method()
{
//...
}
//在调用Form2时,要把Form2的所有者设为Form1
Form2 f2 = new Form2() ;
f2.Owner = this;
f2.ShowDialog() ;
//Form2:
//在需要对其调用者(父)刷新时
Form1 f1 ;
f1 = (Form1)this.Owner;
f1.Refresh_Method() ;
方法2:自身传递法
//Form1:
//需要有一个公共的刷新方法
public void Refresh_Method()
{
//...
}
Form2 f2 = new Form2() ;
f2.ShowDialog(this) ;
//Form2:
private Form1 p_f1;
public Form2(Form1 f1)
{
InitializeComponent();
p_f1 = f1;
}
//刷新时
p_f1.Refresh_Method() ;
方法3:属性法
//Form1:
//需要有一个公共的刷新方法
public void Refresh_Method()
{
//...
}
//调用时
Form2 f2 = new Form2() ;
f2.P_F1 = this;
f2.Show() ;//Form2:
private Form1 p_f1;
public Form1 P_F1
{
get{return p_f1;}
set{p_f1 = value;}
}
//刷新时
p_f1.Refresh_Method() ;
方法4:委托法
//声明一个委托
public delegate void DisplayUpdate();
//Form1:
//需要有一个公共的刷新方法
public void Refresh_Method()
{
//...
}
//调用时
Form2 f2 = new Form2() ;
f2.ShowUpdate += new DisplayUpdate(Refresh_Method) ;
f2.Show() ;
//Form2:
//声明事件
public event DisplayUpdate ShowUpdate;
//刷新时,放在需要执行刷新的事件里
ShowUpdate();
Form1中放一个Label1,一个Button1,Form1为主窗口,当点击Button1时,执行:
Form2 f2 = new Form2();
f2.ShowDialog(this);Form2中放一个TextBox1,一个Button1,当点击Button1时执行:Form1 f1 = (Form1)this.Owner;
f1.Label1.Text = this.TextBox1.Text;注意:Form1中的label1要设为public用C#实现两个WinForm间的传值这个题目我曾经出给来公司面试的人,也曾经出给刚毕业的大学生,几乎是没有人会做啊。难道这个问题真的这么难么?现在我给出实现的主要源代码(开发平台为VC#2005)。实现的思路:
从Form1传递到Form2: 2个窗体即两个类,两个窗体间的数据传送,可以采用构造函数来实现。 从Form2返回到Form1,并传递数据:实例化Form2后,打f2用ShowDialog()方法,然后等待f2关闭时再回传数据到Form1。实现步骤及代码: 1:新建两个窗口: Form1,Form2;
2:打开Form2,添加一个textBox:textBox1;添加一个Button:button1;然后添加一个构造函数:
//定义一个变量,用来传值。
public string returnValue ; public Form2(string txtValue)
{
InitializeComponent(); this.textBox1.Text = txtValue;
}
然后在button1的单击事件中添加如下代码:
private void button1_Click(object sender, EventArgs e)
{
returnValue = this.textBox1.Text;
this.Close();
} 3:Form1中添加一个textBox:textBox1;添加一个Button:button1;然后在button1的单击事件中添加如下代码:
private void button1_Click(object sender, EventArgs e)
{
string txtValue = this.textBox1.Text;
Form2 f2 = new Form2(txtValue);
f2.ShowDialog();
this.textBox1.Text = f2.returnValue;
}Form1 中 (父窗口:)
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.Button btnOpen;
public System.Windows.Forms.TextBox txtContent; //注意是public ........ ........ [STAThread]
static void Main()
{
Application.Run(new Form1());
} private void btnOpen_Click(object sender, System.EventArgs e)
{
Form2 frm=new Form2(this);
frm.ShowDialog();
}}Form2中(子窗口)public class Form2 : System.Windows.Forms.Form
{
private System.Windows.Forms.Button button1;
private System.Windows.Forms.TextBox txtValue; private Form _parentForm=null;
public Form2()
{
InitializeComponent();
} public Form2(Form parentForm)
{
InitializeComponent();
this._parentForm =parentForm;
} ........ ........
//更新父窗口中文本框中的值! private void button1_Click(object sender, System.EventArgs e)
{
((Form1)_parentForm).txtContent.Text =this.txtValue .Text ;
}
public static string str;
str="赋值"窗体B:
string 变量 = 窗体A.str;
public static class UserData
{
public static DataTable m_Table;
}
在使用的时候 UserData.DataTable 就可以了构造
修改Form2的构造方法
public DataTable m_Table;
public Form2(DataTable p_Table)
{
InitializeComponent();
m_Table=p_Table;
}
在new Form2的时候 new Form2(你要传递的DataTable);
tag
Form2 _Form2 =new Form2();
_Form2.Tag =你要传递的DataTable;
在使用的时候 DataTable _Table =(DataTable)this.Tag;Public
在Form1 里定义 public DataTable m_Table;
在Form2里只要获取到Form1的实例就可以了
例如 在Form2里
Form1 _Form1 =(Form1)Application.OpenForms["Form1"];
_Form1.m_Table...另外委托和事件也是不错的选择