两个窗体之间传递值的问题,下面那一种方法更好一些?

Harvey_He 2009-02-12 04:40:20
我有一个主窗体,显示所有的用户对象 然后我添加一个设置窗体,在这里面修改用户对象的属性,请问下面三种方法那一种比较好?原因

方法1: 使用tag.
//Form1中:

ClassModel class1 ;

private void btnSysSet_Click(object sender, EventArgs e)
{
Form2 formSetting = new Form2();
formSetting.Tag = this;
formSetting.Show();
}

// form2中:
ClassModel class2;
Form1 mainForm = (Form1)this.Tag;
public void initClass()
{
class2 = mainForm.class1;
}

public void update()
{
class2.Name = this.textBoxName.text;
....
}

public void close()
{
mainForm.class1 = this.class2;
}


方法2: 使用static调用。
//Form1中:

ClassModel class1 ;

private void btnSysSet_Click(object sender, EventArgs e)
{
Form2 formSetting = new Form2();
formSetting.getClass1(calss1);
formSetting.Show();
}

Public static void getClass2(ClassModel class2)
{
class1 = class2
}


// form2中:
ClassModel class2;

public static void getClass1(ClassModel class1)
{
this.calss2= class1;
}

public void update()
{
class2.Name = this.textBoxName.text;
....
}

public void close()
{
Form1.getClass2(class2);
}



方法三: 窗体继承。
//Form1中:

ClassModel class1 ;

private void btnSysSet_Click(object sender, EventArgs e)
{
Form2 formSetting = new Form2(this);
formSetting.Show();
}

// form2中:
ClassModel class2;
Form1 mainForm;
public Form2(Form1 form1)
{
mainForm = form1;
class2 = mainForm.class1;
}

public void update()
{
class2.Name = this.textBoxName.text;
....
}

public void close()
{
mainForm.class1 = this.class2;
}






...全文
326 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
SelectNextControl
hxmhj 2009-02-17
  • 打赏
  • 举报
回复
没有那么的麻烦!

在项目中添加一个静态类。类中有n个静态字段,用以保存将要传递的值。

Form1启动后,将参数写入静态类的静态字段中。

Form2启动后,将参数从静态类的静态字段中读出。

如果用构造函数传递,要传100个参数怎么写?
贫僧又回来了 2009-02-13
  • 打赏
  • 举报
回复
属性
W422080367 2009-02-13
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 lovefootball 的回复:]
我喜欢用事件的方式去通知
[/Quote]

嗜好相同
Harvey_He 2009-02-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 kkun_3yue3 的回复:]
实现目标就好,没有多么明显那个方法好那个方法不好,
第一种最简单,其它有点磨寂
[/Quote]

其实我发现第一种方法使用的一个局限性,那就是无法在窗体初始化的时候赋值,只能在窗体的一个事件中获得传递的值。
因为:

//form1中
private void btnSysSet_Click(object sender, EventArgs e)
{
Form2 formSetting = new Form2();//先new一个Form2
formSetting.Tag = this; //然后才传递了这个Form1对象.
formSetting.Show();
}
//form2中
Form1 mainForm;
public form2()
{
mianForm = (Form1)this.Tag; //这时候Tag值还是为空,因为还没有传递。
initClass();
}
public void initClass()
{
class2 = mainForm.class1;
this.textName = class2.textName; //初始化窗体的时候不能实现显示的值。
}




qlzf11140820 2009-02-13
  • 打赏
  • 举报
回复
I like:
Form2 formSetting = new Form2(this);


Form1 mainForm;
public Form2(Form1 form1)
{
mainForm = form1;
class2 = mainForm.class1;
}

cnming 2009-02-13
  • 打赏
  • 举报
回复
简单来说,我喜欢使用方法2

比较完善来说,我喜欢使用自定义事件进行通知,毕竟Windows的队列处理效率还是蛮高的

pennymay 2009-02-13
  • 打赏
  • 举报
回复
我的Leader告诉我
1.首先要把功能实现,
2.在实现功能的基础上且在完成项目时间之前尽量的优化,
3.美化界面

烈火蜓蜻 2009-02-13
  • 打赏
  • 举报
回复
学习一下
yedaoq 2009-02-13
  • 打赏
  • 举报
回复
给设置窗体添加一个方法,类似:
public int ShowAndSet(class data)
{
}

然后主窗口通过这个方法将要设置的对象传进来即可。
mywisest 2009-02-12
  • 打赏
  • 举报
回复
委托
king19840811 2009-02-12
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 lovefootball 的回复:]
我喜欢用事件的方式去通知
[/Quote]

我也喜欢这个
yannixinxiang 2009-02-12
  • 打赏
  • 举报
回复
在C#中,窗体数值的传递有两种方式常用,一个就是属性,第二是事件,一般属性要简单,即你的第一种方法
dyshadow 2009-02-12
  • 打赏
  • 举报
回复
还是:


public partial class Form1 : Form
{


public Form1()
{
InitializeComponent();
}

public void RefreshListBox()
{
listBox1.Items.Clear();
//Read xml add items to listbox
MessageBox.Show("Refreshed");

}

private void button1_Click(object sender, EventArgs e)
{
Form2 frmTarget = new Form2();
frmTarget.Show(this);//<---note the 'this'
}
}






public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}



private void Form2_Load(object sender, EventArgs e)
{

}

private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
((Form1)this.Owner).RefreshListBox();
}
}


个人觉得还是这种方法比较好。实现起来简单,不绕圈子。。。
ztenv 2009-02-12
  • 打赏
  • 举报
回复
添加一个属性,传进去不就行了?
lovefootball 2009-02-12
  • 打赏
  • 举报
回复
我喜欢用事件的方式去通知
优途科技 2009-02-12
  • 打赏
  • 举报
回复
或者叫做适合的就是最好的。
优途科技 2009-02-12
  • 打赏
  • 举报
回复
合适的就是最好的。
beblue 2009-02-12
  • 打赏
  • 举报
回复
构造方法里传参不就可以了
或者开放公开的属性
kkun_3yue3 2009-02-12
  • 打赏
  • 举报
回复
实现目标就好,没有多么明显那个方法好那个方法不好,
第一种最简单,其它有点磨寂
加载更多回复(3)

110,549

社区成员

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

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

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