如何在winForm 之间传递参数

vovo2000 2005-09-13 08:47:18
有一个窗口Form1,单击一下Form1上的button1,弹出Form2
private void button1_Click(object sender, System.EventArgs e)
{
Form2 f2 = new Form2();
f2.tblname = thistable;
f2.Show();

}
此时Form1还在,没有Close.
如上所示,Form1向Form2传递参数时候,我是通过给Form2增加一个共有内部成员来实现的。
但是Form2向Form1传递参数却不知道怎么实现,因为此时Form1还存在,无法使用上面的方法。
请教高手。
...全文
458 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
commandown 2005-09-15
  • 打赏
  • 举报
回复
form2关闭,但form2的对像还在~~
直接调用其内的变量值即可
salmon230 2005-09-15
  • 打赏
  • 举报
回复
委托吧,再form1中定义变量,当form2关闭时调用委托将form2的值传到form1
flikas 2005-09-15
  • 打赏
  • 举报
回复
Form2先把数据传给Form1,再把自己关闭,可以吧?
lyb_abiandbel 2005-09-15
  • 打赏
  • 举报
回复
窗体之间传值,可以用构造函数。

窗体Fr_zspzd:
private void button7_Click(object sender, System.EventArgs e)
{
Fr_zspzd zspzd=new Fr_zspzd(this.dataSet11,this.myToolbar1);
zspzd.Show();
}

窗体Fr_zspzd:
public class Fr_zspzd : System.Windows.Forms.Form
{
DataSet ds1=null;
myBaseForm.myToolbar myToolbar1;
...........
public Fr_zspzd(DataSet ds,myBaseForm.myToolbar myToolbar) //构造函数
{
ds1=ds;
myToolbar1=myToolbar; //把传递的信息保存下来
........
}
private void Fr_zspzd_Load(object sender, System.EventArgs e)
{
//函数中就可以使用了
//传递的值是和第一个页面是同步的
}

也可以用属性传:
private void button5_Click(object sender, System.EventArgs e)
{
WindowsApplication1.Form2 f2 = new Form2();
f2.MdiParent=this;
f2.Show();
}

//-----------------------------------------------
public class Form2 : System.Windows.Forms.Form
{
private Form1 fm1;
public Form1 Fm1
{
get{return fm1;}
set{fm1=value;}
}
IntelliSense 2005-09-15
  • 打赏
  • 举报
回复
用构造函数和属性来传递。
simonezhlx 2005-09-15
  • 打赏
  • 举报
回复
太多方法了,最方便就是把form1的引用传过去,这样跟用私有对象一样方便了,
private void button1_Click(object sender, System.EventArgs e)
{
Form2 f2 = new Form2(Form1);
f2.tblname = thistable;
f2.Show();

}
当然这里要稍稍改一下Form2的构造
HelloBaly 2005-09-15
  • 打赏
  • 举报
回复
在Form2中加一个Public变量,如果Form2关闭,就把那个Public变量的值附上,然后Form1就取那个Public变量的值就可以了。
sunsjorlin 2005-09-15
  • 打赏
  • 举报
回复
还可以在Form2的构造函数中加一个引用或传出参数
在Form1中调用那个构造函数
sunsjorlin 2005-09-15
  • 打赏
  • 举报
回复
Form2中
public delegate void ChangeDataDelegate(string data);//定义委托

private event ChangeDataDelegate ChangeDataEvent;//定义事件
private void button1_Click(object sender, System.EventArgs e)
{
ChangeDataEvent(this.textBox1.Text);激发事件,写在你想要的地方
}
Form1中
private void button1_Click(object sender,System.EventArgs e)
{
Form2 f = new Form2();
f.ChangeDataEvent+=new ChangeDataDelegate(this.ChangeData); //绑定事件
}
public void ChangeData(string data)
{
this.textBox1.Text=data;//做你想要的操作
}
aa2223 2005-09-15
  • 打赏
  • 举报
回复
一般用属性,或者用构照函数!
我一般都是用属性传递,比较方便!
lovefootball 2005-09-15
  • 打赏
  • 举报
回复
可以使用事件
vovo2000 2005-09-15
  • 打赏
  • 举报
回复
好像有个使用静态变量的方法,大家知道怎么用吗?
灿爸. 2005-09-13
  • 打赏
  • 举报
回复
其实,App类完全可以作为你整个应用程序的启动托管类,有很多东西可以通过它进行控制,当然,这样并不是说要把App类构造成为一个万能类,你自己权衡着解决吧,任何东西都有两面性的!
灿爸. 2005-09-13
  • 打赏
  • 举报
回复
像这种窗体应用程序是需要单独定义一个应用程序类的,该类有一个参数包结构,便于对所有应用中窗体间参数传递等此类全局需求提供支持,形如如下定义:
public class AppParam
{
public AppParam(){lists = new ArrayList();}
protected ArrayList lists;public ArrayList Lists{get{;}set{;}}
}
public class App
{
protected static AppParams[] parmas = new AppParam[10];
public static AppParam Parameters{get{;}set{;}}
}
这样,应用程序就可以通过App类进行参数传递了.
vovo2000 2005-09-13
  • 打赏
  • 举报
回复
对不起,我还没说清楚,Form2向Form1传递参数的时候,Form2本身已经关闭了。
我的意思是单击From2上的一个按钮,From2本身就关闭了,同时有一个参数要想Form1传递。
benzite 2005-09-13
  • 打赏
  • 举报
回复
Form2(System.Windows.Forms.Form form)
{
this._parentForm=form;
}
Form2 f2 = new Form2(form1);

RedComet2005 2005-09-13
  • 打赏
  • 举报
回复
简单点就让form1读取form2的一个public变量

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧