在WinForms程序里实现窗体传值的最佳实践
--------------------编程问答-------------------- 初步看了下是不是就是实例化传值?! --------------------编程问答-------------------- 好东西,顶起来 --------------------编程问答-------------------- 好的 看看哈 谢谢--------------------编程问答-------------------- 好的 看看哈 谢谢
--------------------编程问答-------------------- 很好很好,顶。。。。。。。 --------------------编程问答-------------------- --------------------编程问答-------------------- thank you ,you are a good man --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 这个得收藏~~ --------------------编程问答-------------------- 收藏啊 慢慢学习 --------------------编程问答-------------------- 好长时间没看C#都快看不懂了,学习了 --------------------编程问答-------------------- 又学到了一种窗体间传值的方法! --------------------编程问答-------------------- 不错的分享~~~~ --------------------编程问答-------------------- henhao --------------------编程问答-------------------- 原来还有这么个写法啊 学习了 --------------------编程问答--------------------
--------------------编程问答-------------------- --------------------编程问答--------------------
public partial class Form2 : Form
{
private Form1 m_parent;
public Form2(Form1 frm1)
{
InitializeComponent();
m_parent = frm1;
}
private void button1_Click(object sender, EventArgs e)
{
m_parent.msgme();
}
}
这个就是我所说的那个设计。这样做Form2和Form1被强耦合在一起。
假设Form3也需要调用Form2,那么设计起来就很复杂了。
这种设计在网上流传的文章中出现过,属于不好的设计。 --------------------编程问答-------------------- 不错,我也喜欢这样,想打开对话框、保存对话框、颜色对话框等等都是这样的。 --------------------编程问答-------------------- --------------------编程问答-------------------- 有意思 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 又学到了一种窗体间传值的方法! --------------------编程问答-------------------- 隔离了,就是好 --------------------编程问答-------------------- --------------------编程问答-------------------- 了解了 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 楼主用使用Lambda 表达式估计很多新手要看一下的 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 我是初学者, --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答--------------------
研究下 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 楼主辛苦了 谢谢 --------------------编程问答-------------------- --------------------编程问答-------------------- 悲剧,你不闲麻烦呀 ~~~
自己在子窗体里面定义委托和事件,在父窗体show子窗体之前,给子窗体事件绑定方法,不就OK了。。。
既然是模态窗体,你有必要声明是全局的么? --------------------编程问答-------------------- 虽说你的思路跟我讲的是一样,看得累啊!~~兄弟 ~ --------------------编程问答--------------------
定义的窗体私有变量是为非模态版本的调用准备的。
我将两个例子合并到一个程序中。
感谢反馈。 --------------------编程问答-------------------- jfzr --------------------编程问答-------------------- --------------------编程问答-------------------- m_dlg.TextBoxChanged += new EventHandler(
(sender1, e1) =>
{ richTextBox1.Text = m_dlg.TextBoxValue; }
);
m_dlg.FormClosed += new FormClosedEventHandler(
(sender2, e2) => { m_dlg = null; }
);
问下:=> 是什么意思?
--------------------编程问答-------------------- 不错,谢谢发帖。 --------------------编程问答--------------------
m_dlg.TextBoxChanged += new EventHandler(相当于:
(sender1, e1) =>
{ richTextBox1.Text = m_dlg.TextBoxValue; }
);
m_dlg.TextBoxChanged += new EventHandler(m_dlg_textboxchanged);--------------------编程问答--------------------
...
private void m_dlg_textboxchanged(object sender1, EventArgs e1)
{
richTextBox1.Text = m_dlg.TextBoxValue;
}
谢谢,明白了。 --------------------编程问答-------------------- --------------------编程问答-------------------- 先顶下了!~~~ --------------------编程问答-------------------- shou cangle --------------------编程问答-------------------- 呵呵,委托事件,不是新鲜事了 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 我08年的时候做的是传个窗体,憋了一天想出来的,现在用委托,轻松优雅,还拉轰~ --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 也不是很好,主要是子窗体写得不好,TextBoxValue和textBox1_TextChanged没规划好,每传进一个值就触发一个TextChanged事件,然后又返回给主窗体,这步不是多余了么? --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答--------------------
public partial class Form2 : Form
{
private Form1 m_parent;
public Form2(Form1 frm1)
{
InitializeComponent();
m_parent = frm1;
}
private void button1_Click(object sender, EventArgs e)
{
m_parent.msgme();
}
}
提一个 inte易做图ce 出来 成
public inte易做图ce IChangeComponent
{
msgme(CustomMessage cms);
}
public partial class Form2 : Form
{
private IChangeComponent m_parent;
public Form2(IChangeComponent frm1)
{
InitializeComponent();
m_parent = frm1;
}
private void button1_Click(object sender, EventArgs e)
{
CustomMessage cms = *****;
if(m_parent!=null)
m_parent.msgme(cms);
}
}
假设Form3也需要调用Form2,Form3实现接口即可。
个人觉得这里用委托也是有接口的思想
if (TextBoxChanged != null)
TextBoxChanged(this, e);
if(m_parent!=null)
m_parent.msgme(cms);
代码量差不多,呵呵 --------------------编程问答-------------------- 只是接口不能多播! --------------------编程问答-------------------- --------------------编程问答--------------------
接口适合耦合比较紧密情况下的设计,而事件的耦合则松散一些。
很明显,如果使用接口,那么客户端代码必须引用到这个接口,并且附加定义到每个调用的窗体类上。
显然这样的设计不如使用事件。 --------------------编程问答--------------------
public Form2(IChangeComponent frm1)
{
InitializeComponent();
m_parent = frm1;
}
看到有人这样把窗体传来传去的就不爽 --------------------编程问答-------------------- 嗯。。。有意思,对于这个耦合还不是很理解,得学习下 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 子类定义一个结构保存信息,,窗口之间的消息都用发送的方法吧!!!具体的接收后的处理方法,交给接收方处理吧!!!(个人想法) --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 真是高手啊,论坛人才济济 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 比较同意上面的结构体打包的思想 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 其实,如果不考虑耦合。最简单办法就是在一个公共地方,弄个静态变量。。。 --------------------编程问答-------------------- --------------------编程问答--------------------
于是有了MVC。 --------------------编程问答-------------------- --------------------编程问答-------------------- LZ好!LZ觉得这种方法,与委托事件相比,哪个性能 上会更好一点? --------------------编程问答--------------------
我给出的就是使用委托/事件的方法。
而且在窗体调用的情况下,性能往往并不是需要讨论的问题。
补充:.NET技术 , C#