C#中怎么在一个form中访问另一个form中的成员!!

nalisaki 2009-12-01 08:09:41
就是在一个工程中同时添加两个form:form1,form2怎么在form1(主界面)中访问form2(从界面)中从TextBox中输入的值,能访问其他的控件也行。
在网上搜了下,就是在form2中重载一个构造函数,比如,form2(form1 mainForm),这样是可以,不过,如果,主界面太大的话,这样岂不是很浪费资源。
不知道有没有更好的呢??多谢!!添加一个继承类?
...全文
1076 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
gahyyai 2011-08-03
  • 打赏
  • 举报
回复
mark
nalisaki 2009-12-02
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 yingmu 的回复:]
引用楼主 nacee 的回复:
就是在一个工程中同时添加两个form:form1,form2怎么在form1(主界面)中访问form2(从界面)中从TextBox中输入的值,能访问其他的控件也行。
在网上搜了下,就是在form2中重载一个构造函数,比如,form2(form1 mainForm),这样是可以,不过,如果,主界面太大的话,这样岂不是很浪费资源。
不知道有没有更好的呢??多谢!!添加一个继承类?

不知道你说的“如果,主界面太大的话,这样岂不是很浪费资源。”是什么意思?
[/Quote]

意思是主界面中资源很多。看到一个如果直接用this 传可能会很占空间,如果用引用传应该会好点吧!!
tianliang1 2009-12-01
  • 打赏
  • 举报
回复
up
jbo126 2009-12-01
  • 打赏
  • 举报
回复
界面太大的话,这样岂不是很浪费资源
如果要浪费也是浪的屏幕,其他的和尺寸大小没多大关系
heguodong 2009-12-01
  • 打赏
  • 举报
回复
[Quote=引用楼主 nacee 的回复:]
就是在一个工程中同时添加两个form:form1,form2怎么在form1(主界面)中访问form2(从界面)中从TextBox中输入的值,能访问其他的控件也行。
在网上搜了下,就是在form2中重载一个构造函数,比如,form2(form1 mainForm),这样是可以,不过,如果,主界面太大的话,这样岂不是很浪费资源。
不知道有没有更好的呢??多谢!!添加一个继承类?
[/Quote]
根据你的问题,从设计层面上说提到的几种方案都有缺陷,就是Form1和Form2本来可能没有什么关系的,但是却因为一个TextBox的内容偶合到了一起
假设一个下面的场景:Form2需要根据Form1的里输入的值改变自身的标题,
Form2和Form1本来都只关心"标题"本身,而不用互相关心的
所以这里应该采用一个MVC的结构来处理,"标题"本身是一个独立的的对象,"标题"内容被修改后会向观察者发送一个通知(事件),这样,Form2只需要关心"标题"本身的通知,Form1也只需要直接修改"标题"本身,Form2并不需要知道关于Form1的任何细节内容.
代码类似下面结构:
//被关心的数据
class Tittle
{
private string m_Value = "";

public string Value
{
get { return m_Value; }
set
{
m_Value = value;
if (TittleChanged == null) return;
TittleChanged(this, new TittleEventArgs(value));
}
}
public event EventHandler<TittleEventArgs> TittleChanged = null;
public class TittleEventArgs : EventArgs
{
private string m_Value = "";
public string Value { get { return m_Value; } }
public TittleEventArgs(string tittle)
: base()
{
m_Value = tittle;
}
}
}
//观察者1
public partial class Form1 : Form
{
Tittle tittle;
public Form1()
{
InitializeComponent();
tittle = new Tittle();
tittle.TittleChanged += new EventHandler<Tittle.TittleEventArgs>(tittle_TittleChanged);
}

void tittle_TittleChanged(object sender, Tittle.TittleEventArgs e)
{
this.Text = e.Value;
}
}
//观察者2
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
Tittle m_Tittle;
internal Tittle Tittle
{
get { return m_Tittle; }
set { m_Tittle = value; }
}

private void textBox1_TextChanged(object sender, EventArgs e)
{
Tittle.Value = textBox1.Text;

}
}
Form2和Form1没有任何关系,可以各自独立地变化
hahaha1988 2009-12-01
  • 打赏
  • 举报
回复
学习学习
yingmu 2009-12-01
  • 打赏
  • 举报
回复
[Quote=引用楼主 nacee 的回复:]
就是在一个工程中同时添加两个form:form1,form2怎么在form1(主界面)中访问form2(从界面)中从TextBox中输入的值,能访问其他的控件也行。
在网上搜了下,就是在form2中重载一个构造函数,比如,form2(form1 mainForm),这样是可以,不过,如果,主界面太大的话,这样岂不是很浪费资源。
不知道有没有更好的呢??多谢!!添加一个继承类?
[/Quote]
不知道你说的“如果,主界面太大的话,这样岂不是很浪费资源。”是什么意思?
Sugar_Tiger 2009-12-01
  • 打赏
  • 举报
回复
1)定义一个全局变量
2)用属性来实现
3)用构造函数实现传值
4)用委托来实现
5)设置form控件的属性来实现

C# Form间传值总结+源码

http://topic.csdn.net/u/20081014/18/41980444-ff5b-40ce-af54-27a8fa3449e7.html
风之影子 2009-12-01
  • 打赏
  • 举报
回复
开始你的C#之旅吧!
nalisaki 2009-12-01
  • 打赏
  • 举报
回复
多谢哈!!!在前面给出的网址中也学到了好多,感觉委托好好用啊!!
wuyq11 2009-12-01
  • 打赏
  • 举报
回复
public partial class Form1 : Form
{
private void button1_Click(object sender, EventArgs e)
{
Form2 frm2 = new Form2();
frm2.Show(this);
}
}

public partial class Form2 : Form
{
private void button1_Click(object sender, EventArgs e)
{
Form1 frm1 = (Form1)this.Owner;
((TextBox)frm1.Controls["textBox1"]).Text = this.textBox2.Text;
this.Close();
}
}
nalisaki 2009-12-01
  • 打赏
  • 举报
回复
肯定是对象级别的
cuike519 2009-12-01
  • 打赏
  • 举报
回复
看你的成员是类级别的还是对象级别的?

类级别的用public的static就可以。

对象级别的,必须有引用关系,在form2中要有form1的引用(不论采用什么事件不事件的机制这都是必须的)
nic7968 2009-12-01
  • 打赏
  • 举报
回复
比较简单好使就是定义属性,在form2中定义属性,文本框的值赋在属性字段里,
在form1中获取就得了

lks_8579 2009-12-01
  • 打赏
  • 举报
回复
定义public 全局变量
nalisaki 2009-12-01
  • 打赏
  • 举报
回复
想问一下,全局变量怎么定义!!在C++中可以,在C#是搞不懂啊!事件可以试一下,其他的写文件和数据库也行,不过不想用。多谢哈!!
gisyellow 2009-12-01
  • 打赏
  • 举报
回复
方法有很多,比如通过委托,form2控件输入值后触发事件,在form1中处理事件。。或者通过全局变量;或者为form2添加静态属性。。或者写文件、写数据库。。。

111,120

社区成员

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

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

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