C#初学问题 在编写winform程序时,怎么在其他窗体中调用已经创建实例对象的form1,比如说 我在form2 的代码页面下,怎么写代码让之前hide的form1出现?注意:是怎么调用前面创建过的窗体 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你原本那窗体是隐藏掉的吧 Visible = false; 重新改成 TRUE 应该就可以了 fm1.Show(); fm1是你先前创建的实例 不行,如果我在其他窗体打 frm1.是不会出来的,无法调用啊, public Form1 frm { get; set; }if (this.frm == null) this.frm = new Form1();this.frm.Show();this.Hide(); 这样最简单(new form2()).show();form1.hide();//在form1下,关闭form1开启form2 public Form1 frm { get; set; }这句写哪? 只能new一下。。或者声明一个全局的form1实例用以其他窗体调用 Form是对象,理解为一个普通的对象即可。对象怎么传递,Form就能怎么传递(跨线程特殊) 这样说吧,怎么在form2中调用form1中的控件呢?我已经把form1改为public了,那个控件也改成public 了,还是不能调用 form都是实例对象,如果你想在form2中调用先前的form1,那就必须在把form1实例的引用传递给form2,然后再form2中才能调用。 form1中加入下代码:form2 f = new form2();f.owner = this;this.Visible = fase;f.show();form2关闭事件加入下代码:((form1)owner).Visible = true;this.close();基本达到你想要的效果;我也是初学,加油哦! 实例化一下,然后用form1.showdialogue()试一试 form2中定义一个变量form1 f1=new form1();from1中代码form2 f2=new form2();f2.f1=this;f2.hide();f.show(); form2中定义一个变量form1 f1=new form1();from1中代码form2 f2=new form2();f2.f1=this;f1.hide();f2.show(); 因为你的form1 对form2 是不可见的。所以你不能调用。要成为可见,很简单,form1定义成全局就OK。当然也可以传给form2 form1中加入下代码:form2 from = new form2();from.owner = this;this.Visible = fase;from.show();form2关闭事件加入下代码:((form1)owner).Visible = true;this.close(); 在你想要的事件函数中加上form1 myform=new form1();myform.show();这样就行了 你得先把你创建的fm1对象给传到form2中去form1 fm1 = null; public form2(Form1 fm1) { this.fm1 = fm1; InitializeComponent(); } C#实现Winform间的数据交互的三种方法 使用.NET编写winform程序,比较常见的一种情况就是如何实现Form间的数据交互,下面就简单总结一下常见的几种数据交互方式: (1)修改子窗体的构造函数:简单地说就是通过修改子窗体Form的构造函数,如下所示: public Form2(string Para1, ArrayList List1, TextBox textBox1, Form Form1) { InitializeComponent(); } 上面的例子中,为子窗体Form2添加了4个参数,分别是:字符串Para1,字符数组List1,文本控件textBox1和父窗体Form1,下面简单区分一下它们各自的特点: <1> 字符串:单向的值传递,在子窗体中不能通过修改此参数的值来间接改变父窗体中的数据。 <2> 字符数组:引用型传递,可以通过将父子窗体中不同的成员变量指向相同的数组,即可实现变更一方,同时更新对方的数据。 <3> 控件: 引用型传递,可以通过修改该控件的数据来直接达到控制父窗体中该控件数据的目的。 <4> 窗体: 这个最直接,直接将父窗体传递到子窗体中,我们可以方便地在子窗体中修改父窗体中所有授权为public的数据。 (2)给窗体添加属性或方法: 获取或设置拥有此窗体的窗体。若要使某窗体归另一个窗体所有,请为其 Owner 属性分配一个对将成为所有者的窗体的引用。当一个窗体归另一窗体所有时,它便随着所有者窗体最小化和关闭。例如,如果 Form2 归窗体 Form1所有,则关闭或最小化 Form1 时,也会关闭或最小化 Form2。并且附属窗体从不显示在其所有者窗体后面。可以将附属窗体用于查找和替换窗口之类的窗口,当选定所有者窗体时,这些窗口不应消失。若要确定某父窗体拥有的窗体, 请使用OwnedForms属性。 我们可以通过下面的方式来确定这种从属的窗体关系: Form2 form = new Form2(); form.Owner = this; form.ShowDialog(); 或者 Form2 form = new Form2(); form.ShowDialog(this); 定了从属关系以后,我们就可以通过在Form的load事件中或者通过定义public的属性或者方法来彼此进行数据修改操作,简单操作如下: Form1 pareForm = (Form1)this.Owner; this.listData1 = pareForm.ListData2; (3)通过委托的方法: 相对以上两种方法来说,这种方法可能较复杂一些,但基本思路是一样的,需要修改的地方如下: <1> 在Form2.cs中添加委托函数定义:public delegate void SendFun(string str); <2> 在Form2.cs中添加委托示例:public event SendFun SendToParent; <3> 在Form2.cs中添加一个按钮,并添加其事件如下: private void button1_Click(object sender, EventArgs e) { if (Send != null) { Send(this.textBox1.Text); } } <4> 在Form1.cs中添加方法RecvInfo()方法如下: private void RecvInfo (string str) { textBox1.Text = str; } <5> 在Form1.Designer.cs中的InitializeComponent()方法中添加委托实例定义: this.myForm.Send += new Example3_Form2. SendFun (RecvInfo); 通过上面五步操作,即可达到Form间的通信的目的。希望这个总结能够对大家有所帮助。 实体类的问题 自动的读取其它网站网页显示的信息 判断combobox内是否有该内容? 读取分记录存的图象数据 如何分批读取一个SHEET指定的行数 我用C#编写了一个wingdows控件,迁入到网页中,请问在网页上如何才能知道鼠标在控件上双击呢? 数组的问题 同样是基于C#的web应用程序,为什么VS2005有<asp:Menu></asp:Menu>导航控件而VS.net2003却没有呢? 哪位大虾能够帮我看一下程序? 有何控件可实现树状图的显示 好好的不知道怎么出现“同时定义了 DataSource 和 DataSourceID” 关于打印水晶报表的问题?小妹在线等。。。。
重新改成 TRUE 应该就可以了
this.frm = new Form1();
this.frm.Show();
this.Hide();
(new form2()).show();
form1.hide();
//在form1下,关闭form1开启form2
这句写哪?
form2 f = new form2();
f.owner = this;
this.Visible = fase;
f.show();form2关闭事件加入下代码:
((form1)owner).Visible = true;
this.close();
基本达到你想要的效果;
我也是初学,加油哦!
试一试
form1 f1=new form1();
from1中代码
form2 f2=new form2();
f2.f1=this;
f2.hide();
f.show();
form1 f1=new form1();
from1中代码
form2 f2=new form2();
f2.f1=this;
f1.hide();
f2.show();
因为你的form1 对form2 是不可见的。所以你不能调用。要成为可见,很简单,form1定义成全局就OK。
当然也可以传给form2
form2 from = new form2();
from.owner = this;
this.Visible = fase;
from.show();form2关闭事件加入下代码:
((form1)owner).Visible = true;
this.close();
form1 myform=new form1();
myform.show();
这样就行了
form1 fm1 = null;
public form2(Form1 fm1)
{
this.fm1 = fm1;
InitializeComponent();
}
{
InitializeComponent();
}
上面的例子中,为子窗体Form2添加了4个参数,分别是:字符串Para1,字符数组List1,文本控件textBox1和父窗体Form1,下面简单区分一下它们各自的特点: <1> 字符串:单向的值传递,在子窗体中不能通过修改此参数的值来间接改变父窗体中的数据。
<2> 字符数组:引用型传递,可以通过将父子窗体中不同的成员变量指向相同的数组,即可实现变更一方,同时更新对方的数据。
<3> 控件: 引用型传递,可以通过修改该控件的数据来直接达到控制父窗体中该控件数据的目的。
<4> 窗体: 这个最直接,直接将父窗体传递到子窗体中,我们可以方便地在子窗体中修改父窗体中所有授权为public的数据。 (2)给窗体添加属性或方法:
获取或设置拥有此窗体的窗体。若要使某窗体归另一个窗体所有,请为其 Owner 属性分配一个对将成为所有者的窗体的引用。当一个窗体归另一窗体所有时,它便随着所有者窗体最小化和关闭。例如,如果 Form2 归窗体 Form1所有,则关闭或最小化 Form1 时,也会关闭或最小化 Form2。并且附属窗体从不显示在其所有者窗体后面。可以将附属窗体用于查找和替换窗口之类的窗口,当选定所有者窗体时,这些窗口不应消失。若要确定某父窗体拥有的窗体,
请使用OwnedForms属性。
我们可以通过下面的方式来确定这种从属的窗体关系: Form2 form = new Form2();
form.Owner = this;
form.ShowDialog();
或者
Form2 form = new Form2();
form.ShowDialog(this); 定了从属关系以后,我们就可以通过在Form的load事件中或者通过定义public的属性或者方法来彼此进行数据修改操作,简单操作如下: Form1 pareForm = (Form1)this.Owner;
this.listData1 = pareForm.ListData2; (3)通过委托的方法:
相对以上两种方法来说,这种方法可能较复杂一些,但基本思路是一样的,需要修改的地方如下:
<1> 在Form2.cs中添加委托函数定义:public delegate void SendFun(string str);
<2> 在Form2.cs中添加委托示例:public event SendFun SendToParent;
<3> 在Form2.cs中添加一个按钮,并添加其事件如下:
private void button1_Click(object sender, EventArgs e)
{
if (Send != null)
{
Send(this.textBox1.Text);
}
} <4> 在Form1.cs中添加方法RecvInfo()方法如下:
private void RecvInfo (string str)
{
textBox1.Text = str;
} <5> 在Form1.Designer.cs中的InitializeComponent()方法中添加委托实例定义:
this.myForm.Send += new Example3_Form2. SendFun (RecvInfo);
通过上面五步操作,即可达到Form间的通信的目的。希望这个总结能够对大家有所帮助。