如何在窗体之间传值?(C#) 我知道WEB 是用的session和cookie,我想知道在C/S模式,Windows窗体下如何传值,要求:不能使用,将控件,公用的方法,这个不安全;最好是,使用函数,在打开下一个窗体的时候,将值传过去。我大概在3月份的时候在,在这看见过有关文章,不过当时没有记下来。望大家多多指点!先谢了! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可在子窗体的构造函数加参数,并定义PRIVATE变量,创建这个FORM时候把参数给她 有三种方法:http://blog.csdn.net/zhzuo/archive/2004/04/05/22027.aspxhttp://blog.csdn.net/zhzuo/archive/2004/04/05/22028.aspxhttp://blog.csdn.net/zhzuo/archive/2004/04/05/22029.aspx 在Form2中定义 Public string strMessage;在Form1中的某个事件中加入Form2 newForm = new Form2();newForm.strMessage = "aaa";这样就可以打开Form2并且将strMessage的值设为了aaa。 gkwww(奔放) (已经说的很详细了。不用别的方法了。我个人认为应该用 public static string ss="slkdjfaskdf";这样的静态方法来传递。简单,但如果static过多的话也会出现反效果。 假设我们需要点击主窗体FMMain中的某一个按钮时打开子窗体FMChild并将某一个值传给子窗体FMChild,一般情况下,我们点击按钮显示子窗体FMChild的代码为:FMChild fmChild = new FMChild();fmChild.ShowDialog();fmChild.Dispose(); 如果我们需要将主窗体FMMain中的string strValueA的值传给FMChild,那么我们首先对strValueA进行如下处理:private string strValueA;public string StrValueA{get{ return strValueA; } set { strValueA = value; }} 使其成为主窗体FMMain的一个属性,接着修改显示子窗体的代码为以下两种的其中一种。方法一:FMChild fmChild = new FMChild();fmChild.ShowDialog(this);fmChild.Dispose(); 方法二:FMChild fmChild = new FMChild();FMChild.Owner = this;fmChild.ShowDialog();fmChild.Dispose(); 然后在修改子窗体FMChild中申明一个主窗体FMMain对象,FMMain fmMain; 在需要使用主窗体FMMain的string strValueA的地方加上如下代码:fmMain = (FMMain)this.Owner; 这样,就可以获得主窗体FMMain中strValueA的值了。这时,如果你需要将子窗体FMChild中的string strValueB传给主窗体FMMain,同样处理string strValueB。private string strValueB;public string StrValueB{ get { return strValueB; }set { strValueB = value; }} 那么你在关闭子窗体代码fmChild.Dispose();后,可以写一些代码来保存或者处理FMChild的strValueB,例如:string strTmp = fmChild.StrValueB; 注意,在Visual C#智能设备Pocket PC 2003设备应用程序中显示子窗体FMChild只能使用:FMChild fmChild = new FMChild();FMChild.Owner = this;fmChild.ShowDialog();fmChild.Dispose(); 在Visual C#智能设备Pocket PC 2003的设备应用程序中ShowDialog()没有重载。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 ; }}一个小例子:将一个窗体下TextBox中的文本内容赋值给另一个窗体下的ListView中所对应的列。方法如下:将TextBox(命名为djzclx1)所在窗体Query_Djzclx .cs设置一个属性 private string Varvalue; public string varvalue { get { return Varvalue;//返回值 } } 添加button1,其DialogResult属性设置为OK; 然后在button1的单价事件里把TextBOx的值赋给Varvalue(Varvalue=djzclx1;),这样该窗体的属性varvalue就有TExtBox的值了。 在ListView所在窗体添加button1,其单击事件添加如下代码: private void CkDjzclx_Click(object sender, EventArgs e) { Query_Djzclx newFrmDjzclx = new Query_Djzclx();//实例化对话框窗体 if (newFrmDjzclx.ShowDialog() == DialogResult.OK)//如果对话框窗体点击的DialogoResult属性是“OK”的按钮 { ListView.Text = newFrmDjzclx.varvalue; //这句的意思是这样,就是把属性varvalue的值回传给ListView。 } } 像这种web界面在winform中要怎么实现 C# 生成淘宝数据包 正则表达式问题(问题看起来有点怕人,其实不复杂,大家帮我看下) C#如何调用C++函数并返回值 修改参数(急) 做象棋的Bug 求人事管理系统C#源码 这个网页中插入视频应该要怎么弄? 怎么在状态条StatusBar中添加进度条控件 如何获取某个对象的某个字段的名称字符串 c#中文件重命名怎样实现? 公开我的一个小工具,桌面记事本
有三种方法:
http://blog.csdn.net/zhzuo/archive/2004/04/05/22027.aspx
http://blog.csdn.net/zhzuo/archive/2004/04/05/22028.aspx
http://blog.csdn.net/zhzuo/archive/2004/04/05/22029.aspx
Form2 newForm = new Form2();
newForm.strMessage = "aaa";这样就可以打开Form2并且将strMessage的值设为了aaa。
这样的静态方法来传递。简单,但如果static过多的话也会出现反效果。
fmChild.ShowDialog();
fmChild.Dispose();
如果我们需要将主窗体FMMain中的string strValueA的值传给FMChild,那么我们首先对strValueA进行如下处理:private string strValueA;
public string StrValueA
{
get
{
return strValueA;
}
set
{
strValueA = value;
}
}
使其成为主窗体FMMain的一个属性,接着修改显示子窗体的代码为以下两种的其中一种。方法一:FMChild fmChild = new FMChild();
fmChild.ShowDialog(this);
fmChild.Dispose();
方法二:FMChild fmChild = new FMChild();
FMChild.Owner = this;
fmChild.ShowDialog();
fmChild.Dispose();
然后在修改子窗体FMChild中申明一个主窗体FMMain对象,FMMain fmMain;
在需要使用主窗体FMMain的string strValueA的地方加上如下代码:fmMain = (FMMain)this.Owner;
这样,就可以获得主窗体FMMain中strValueA的值了。这时,如果你需要将子窗体FMChild中的string strValueB传给主窗体FMMain,同样处理string strValueB。private string strValueB;
public string StrValueB
{
get { return strValueB; }
set { strValueB = value; }
}
那么你在关闭子窗体代码fmChild.Dispose();后,可以写一些代码来保存或者处理FMChild的strValueB,例如:string strTmp = fmChild.StrValueB;
注意,在Visual C#智能设备Pocket PC 2003设备应用程序中显示子窗体FMChild只能使用:FMChild fmChild = new FMChild();FMChild.Owner = this;fmChild.ShowDialog();fmChild.Dispose();
在Visual C#智能设备Pocket PC 2003的设备应用程序中ShowDialog()没有重载。C#窗体间传值的几种方法
调用窗体(父):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 ;
}}
一个小例子:将一个窗体下TextBox中的文本内容赋值给另一个窗体下的ListView中所对应的列。方法如下:将TextBox(命名为djzclx1)所在窗体Query_Djzclx .cs设置一个属性
private string Varvalue;
public string varvalue
{
get
{
return Varvalue;//返回值
}
}
添加button1,其DialogResult属性设置为OK;
然后在button1的单价事件里把TextBOx的值赋给Varvalue(Varvalue=djzclx1;),这样该窗体的属性varvalue就有TExtBox的值了。 在ListView所在窗体添加button1,其单击事件添加如下代码: private void CkDjzclx_Click(object sender, EventArgs e)
{
Query_Djzclx newFrmDjzclx = new Query_Djzclx();//实例化对话框窗体
if (newFrmDjzclx.ShowDialog() == DialogResult.OK)//如果对话框窗体点击的DialogoResult属性是“OK”的按钮
{
ListView.Text = newFrmDjzclx.varvalue; //这句的意思是这样,就是把属性varvalue的值回传给ListView。
}
}