展开全部
具体的代码我已经很久没写了,以前都是作为练习教给别人的昌档。
但是可以大概给你个实现的流程,一级做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 就可以了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询