100分问两个小问题

foxd 2008-08-31 08:53:12
原先是做Web开发的,刚开始试着用vs2005作winform程序开发。
问题1:在MDI(多文档)中,假设有主窗体frmMain和form1、form2两个子窗体,两个子窗体上各有一个Button。点击frmMain中主菜单的某个菜单项后打开了form1子窗体,现在想点击form1中的button将form1先隐藏不显示,然后显示form2,点击form2上面的Button关闭form2再显示出form1来,应该如何编码?
问题2:点击form1上的button能否在打开form2的同时向form2传值?同样的,在关闭form2的同时能否也向form1传值?
谢谢各位指教我。
...全文
231 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
q704174307 2008-09-13
  • 打赏
  • 举报
回复
可以使用form,button的属性来做吧。利用Visible
当你做完一个事件,就想做什么事
ShowDialog()这个方法是在当前页面弹出一个新窗口,此窗口不被关闭时其他窗口都不能用,Show()则可以用
Hide()就是一个隐藏控件的方法,为false显示,反之隐藏
Odesky 2008-09-13
  • 打赏
  • 举报
回复
说的太 彻底了
liang4571231 2008-09-13
  • 打赏
  • 举报
回复
呵呵,上面都说得很明白了,
第一个问题通过.ShowDialog()和.Hide()就可以了
第二个问题上面的方法也可以,
你也可以定义一个窗体的属性来传值,
或使用窗体自带的.Tag属性来传值
社会栋梁 2008-09-13
  • 打赏
  • 举报
回复
就是找HANDLE 只要存到公共的一个上义域里就可以传递
ProjectDD 2008-09-13
  • 打赏
  • 举报
回复
1,form1上加个命名为"隐藏"的按钮,
设置它的Visible属性(true/false)
例如:

button1.Visible=false;//隐藏,但实例数据状态依然被保存,
当你:
button1.Visible=true;//时它原样显现出来.
//晕了,写错了,对不起

加上一个命名"隐藏"的按钮当点击它时写入:设两个子窗口分别为subf1,subf2

this.Visible=false;//在子窗口(subf1)内部的Click事件应答函数中

this.subf1.Visible=true;//在主窗口里的另一个子窗口的Click事件应答函数中
ProjectDD 2008-09-13
  • 打赏
  • 举报
回复
[Quote=引用楼主 foxd 的帖子:]
原先是做Web开发的,刚开始试着用vs2005作winform程序开发。
问题1:在MDI(多文档)中,假设有主窗体frmMain和form1、form2两个子窗体,两个子窗体上各有一个Button。点击frmMain中主菜单的某个菜单项后打开了form1子窗体,现在想点击form1中的button将form1先隐藏不显示,然后显示form2,点击form2上面的Button关闭form2再显示出form1来,应该如何编码?
问题2:点击form1上的button能否在打开form2的同时向form2传值?同样…
[/Quote]

1,form1上加个命名为"隐藏"的按钮,
设置它的Visible属性(true/false)
例如:

button1.Visible=false;//隐藏,但实例数据状态依然被保存,
当你:
button1.Visible=true;//时它原样显现出来.

2,所谓传值,就是这样的

设你的MDI主窗口为:form1,有两个子窗口subf1,subf2它们都被包含在form1之中

如果你想往子窗口中加入自定义值,那么你应该先,让子窗口继承Form基类然后在在其中

设计时添加你所期的字段比如 string address; int number;等等并让它们可以被

包含它们 的类(这里是form1)所访问到,那么你可以大致这样传值,例如:

...//在form1内部的构造函数中订阅子窗口的事件
subf2.Click+=this.subf2_Click;
...//事件应答设计
void subf2_Click(object sender,EventArgs e)
{
//向subf1传值:
this.subf1.Address=this.subf2.Address;//subf2中的Address比如被一个TextBox.Text的值所赋予
//...
}
yprose 2008-09-13
  • 打赏
  • 举报
回复
学习学习!!!!!!!!
GhostAdai 2008-09-01
  • 打赏
  • 举报
回复
这么多答案,我只能接分,哦耶!
hflkl1314 2008-09-01
  • 打赏
  • 举报
回复
在form1上的button上写

this.Hide();
if(form2.ShowDialog=== DialogResult.Cancel)
{
this.Show();
}
jryu2k5 2008-09-01
  • 打赏
  • 举报
回复
对于问题二,楼主可以使用接口,使form1承继于该接口,在form2初始化的时候将该接口作为参数传递,那么你在form2中对接口的操作实际上就是对form1的数据操作,那么一致性就有保证,并且不用传来传去那么麻烦了
hanyu0528 2008-09-01
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 GhostAdai 的回复:]
这么多答案,我只能接分,哦耶!
[/Quote]
接分啦
jacklee_008 2008-09-01
  • 打赏
  • 举报
回复
bucuo
chvek 2008-08-31
  • 打赏
  • 举报
回复
在form1窗体调用的时候要..

Form2 form2 = new Form2(this);

要这样写,把本身传过去.
chvek 2008-08-31
  • 打赏
  • 举报
回复
这样的..点form1的按钮时你就要触发form2.也就是要经过form2的构造方法.然后你在Form2窗体的构造方法就可以写为

Form1 form1;
public Form2(Form1 form1)
{
this.form1 = form1;
}


这样就可以直接操作form1里面的属性呀,方法什么的.

FORM1同样写为一样..
mjjzg 2008-08-31
  • 打赏
  • 举报
回复
问题一:frmMain-->form1-->form2
在frmMain中的跳转到form1的按钮中写
Form1 f1= new Form1();
f1.Show(); //这是非模式的窗体,用这种方式还可以对其它窗体进行操作
或f1.ShowDialog(); //这是模式化的窗体,当打开这个窗体后必须对这个窗体执行相关的操作
this.Hide(); //隐藏当前窗体
f1.Dispose(); //关闭当前窗体
你要的跳转可以类似的这样做
问题二:你说的那种情况当然是可以的
首先你要先把两个窗体建立联系,即在form1中可调用form2中的文字或者某个控件
代码:
在form1中
Form2 f2= new Form2();
f2.Owner=this;
f1.Show();
this.Hide();
f1.Dispose();
在Form2中
Form1 f1=(Form1)this.Owner;
这样的话就可以在关闭Form1后但是Form1中的控件的在Form2中可以调用的到了
例如在Form1中有个Lable1你想在Form2中调用给textBox1,在写完上面的代码后你就可以继续在Form2中写
this.textBox1.Text=f1.Lable1.Text;
在Form2回到Form1窗体中也就是将上面的代码反过来即可
********归根你的两个问题还是一个问题,只要问题二中的代码就可以全部解决了
OK,到此了




hustcyb 2008-08-31
  • 打赏
  • 举报
回复
1.在主窗体frmMain中加入如下代码:

private Form1 form1 = null;
private Form2 form2 = null;

public Form1 Form1
{
get
{
return form1;
}
set
{
form1 = value;

if (form1 != null)
{
form1.MdiParent = this;
}
}
}

public Form2 Form2
{
get
{
return form2;
}
set
{
form2 = value;

if (form2 != null)
{
form2.MdiParent = this;
}
}
}

在主窗体frmMain某菜单单击事件中添加如下代码:

private void menuFileOpen_Click(object sender, EventArgs e)
{
if (Form1 == null)
{
Form1 = new Form1();
}

Form1.Show();
}

2.在Form1中按钮单击事件中添加如下代码:

private void buttonOK_Click(object sender, EventArgs e)
{
this.Hide();

frmMain parent = MdiParent as frmMain;
if (parent != null)
{
if (parent.Form2 == null)
{
parent.Form2 = new Form2();
}

parent.Form2.Text = "从Form1传入的参数"; //这里加入要传入的参数
parent.Form2.Show();
}
}

3.在Form2的按钮单击事件中加入如下代码:

private void buttonOK_Click(object sender, EventArgs e)
{
this.Hide();

frmMain parent = MdiParent as frmMain;
if (parent != null)
{
if (parent.Form1 == null)
{
parent.Form1 = new Form1();
}

parent.Form1.Text = "从Form2传入的参数"; //这里加入要传入的参数
parent.Form1.Show();
}
}
amandag 2008-08-31
  • 打赏
  • 举报
回复
点击form1上的button能否在打开form2的同时向form2传值?
==
一般通过构造函数传递窗体引用

同样的,在关闭form2的同时能否也向form1传值?
==
不规范的做法是将form1的控件属性设为public,就可以随意访问;规范点给form1一些public的属性返回或设置这些值
royal1 2008-08-31
  • 打赏
  • 举报
回复
关闭form2时可以通过句柄向form1传值:

//取消
private void btnCancel_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
}

//确认
private void btnAccept_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.OK;
}
amandag 2008-08-31
  • 打赏
  • 举报
回复
问题1:在MDI(多文档)中,假设有主窗体frmMain和form1、form2两个子窗体,两个子窗体上各有一个Button。点击frmMain中主菜单的某个菜单项后打开了form1子窗体,现在想点击form1中的button将form1先隐藏不显示,然后显示form2,点击form2上面的Button关闭form2再显示出form1来,应该如何编码?
==
构造form2时把form1的引用传过去,点击form2上面的Button是form1.Show()
hztltgg 2008-08-31
  • 打赏
  • 举报
回复
Web的窗口和winform窗口还是有很大区别的,web的窗口打开都是从服务器下载新的网页,所以要考虑状态,那些变量是否丢失

winform的窗口没有这么多问题,随时都可以访问,只要类没有关闭

第一个问题就简单的设置隐含和显示属性或者调用隐含和显示方法就可以了
加载更多回复(4)

110,535

社区成员

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

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

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