3个回答
展开全部
具体的代码我已经很久没写了,以前都是作为练习教给别人的。
但是可以大概给你个实现的流程,一级做winform窗体间数据交互的一些原则。
1、设计一个接口,该接口中只有一个可读的属性:
Panel Pnl{get;}
2、让你的form1实现这个接口,并在get方法中返回这个panel的引用
3、将form1以这个接口的引用传递给form2
4、在form2中获取到接口对象的引用,并操作这个panel
或许你会问,怎么这么麻烦,直接把form1传过来不就行了吗?
是的,你完全可以这样做,但是要记得,如果你尝试这样做了,那么你将得到的结果将是可怕的。当你的业务越来越复杂时,对于form1的更改也将越来越多,这可能导致任何一个其他的更改都可能影响到你之前的业务代码。造成时间效率上的浪费。
上面的实现是一个简单的代理模式,主要是用于隐藏本体,并传递给自身的一个替代品给使用者,从而达到让使用者只了解到他业务需要的对象,而不是全部。
同样的,在多个窗体进行数据交互中,可以使用观察者模式(个人比较青睐)。
但是可以大概给你个实现的流程,一级做winform窗体间数据交互的一些原则。
1、设计一个接口,该接口中只有一个可读的属性:
Panel Pnl{get;}
2、让你的form1实现这个接口,并在get方法中返回这个panel的引用
3、将form1以这个接口的引用传递给form2
4、在form2中获取到接口对象的引用,并操作这个panel
或许你会问,怎么这么麻烦,直接把form1传过来不就行了吗?
是的,你完全可以这样做,但是要记得,如果你尝试这样做了,那么你将得到的结果将是可怕的。当你的业务越来越复杂时,对于form1的更改也将越来越多,这可能导致任何一个其他的更改都可能影响到你之前的业务代码。造成时间效率上的浪费。
上面的实现是一个简单的代理模式,主要是用于隐藏本体,并传递给自身的一个替代品给使用者,从而达到让使用者只了解到他业务需要的对象,而不是全部。
同样的,在多个窗体进行数据交互中,可以使用观察者模式(个人比较青睐)。
追问
可以简写几句代码不?才学习没多久的新手
追答
接口:
public interface IMyPanel{
Panel Pnl{get;}
}
//form1
public class form1:Form,IMyPanel{
public Panel Pnl{get{ return this.Panel1;}}//这块返回的就是你窗体中的那个panel的引用
}
//定义的form2
public class Form2:Form{
public IMyPanel MyPanel{get;set;}
}
//在form1中调用form2
private void ShowForm2(){
Form2 form2 = new Form2();
form2.MyPanel = this.Pnl;
form2.Show()
}
展开全部
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
_form = this;
}
private static Form1 _form;
public static Form1 getInstance()
{
if (_form == null)
{
_form = new Form1 ();
}
return _form;
}
public void OpenorClosePanel()
{
this.panel1.Visible = this.panel1.Visible ?false :true;
}
private void button1_Click(object sender, EventArgs e)
{
Form2 frm = new Form2();
frm.Show();
}
}
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form1 frm = Form1.getInstance();
frm.OpenorClosePanel();
}
}
楼上的回答不错,不过针对这里完全可以开放一个方法给对方操作
{
public Form1()
{
InitializeComponent();
_form = this;
}
private static Form1 _form;
public static Form1 getInstance()
{
if (_form == null)
{
_form = new Form1 ();
}
return _form;
}
public void OpenorClosePanel()
{
this.panel1.Visible = this.panel1.Visible ?false :true;
}
private void button1_Click(object sender, EventArgs e)
{
Form2 frm = new Form2();
frm.Show();
}
}
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form1 frm = Form1.getInstance();
frm.OpenorClosePanel();
}
}
楼上的回答不错,不过针对这里完全可以开放一个方法给对方操作
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你在form2 中new一个form1 并show出来,你的form1的panel要设置为public的,在form2中form1.panel.visible=true or false 就可以了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询