C#中子窗体如何调用父窗体控件? 5

 我来答
lxm2322
推荐于2016-02-03 · 超过10用户采纳过TA的回答
知道答主
回答量:23
采纳率:0%
帮助的人:21.6万
展开全部
///////////////////////////////////////////////////////////////////////
///// 父窗体,你需要添加一个button(并关联button1_Click)和一个textbox
///////////////////////////////////////////////////////////////////////
using System;
using System.Windows.Forms;

namespace Demo
{
public partial class ParentForm : Form
{
ChildForm childForm;
public ParentForm()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
childForm= new ChildForm();
childForm.DataArrivalEvent+=new ChildForm.DataArrivalEventHandler(childForm_DataArrivalEvent);
//显示子窗体
childForm.ShowDialog();
}

//事件处理
void childForm_DataArrivalEvent(string msg)
{
textBox1.Text = msg;
}
}
}
///////////////////////////////////////////////////////////////////////
///// 子窗体 你需要添加一个button,并关联button1_Click
///////////////////////////////////////////////////////////////////////
using System;
using System.Windows.Forms;

namespace Demo
{
public partial class ChildForm : Form
{
//接收信息事件委托
public delegate void DataArrivalEventHandler(string msg);
//事件对象
public event DataArrivalEventHandler DataArrivalEvent;

static int clickCount = 0;

public ChildForm()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
//如果父窗体已注册了自定义事件
if (DataArrivalEvent != null)
{
DataArrivalEvent(String.Format("单击:{0}次", clickCount++));
}
}
}
}
计致包秀媚
2020-01-15 · TA获得超过3822个赞
知道小有建树答主
回答量:3168
采纳率:34%
帮助的人:197万
展开全部
第一我的建议是:不使用子窗体、父窗体,这个机制事实上不好用,无论是从比例控制还是对象之间相互关系都做的比较差劲,简单举例,镶嵌在窗体上的进度条要使用异步,两个对象之间就抓瞎了,我的建议是直接用自定义控件做子窗体,把子窗体做成控件,让panel去add他,切换就直接控制他的visible属性,sizechange事件控制他的尺寸比例。
为什么我们不直接加在窗体呢?因为窗体每次load要重绘背景为按钮表面颜色,把子窗体加入panel他会闪烁的。
第二,你的主窗体要实现这样的功能就要使用remoting机制,用子窗体去启动主窗体的线程,用线程来控制他的控件。
.net在winform方面我认为的几个败笔:
1.
双缓冲只缓冲窗体根本对控件没作用
2.
重绘窗体时要先把窗体填充为按钮颜色
3.
半透明属性不灵活,透明只针对父级,不好叠放
4.
自作聪明的数据库控件,灵活性极差
5.
窗体之间大量使用静态变量传递参数,影响效率
6.
报表做的很差劲
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
4killer4
2012-01-11 · TA获得超过185个赞
知道小有建树答主
回答量:606
采纳率:0%
帮助的人:241万
展开全部
比如你要在子窗体中使用父窗体的Button控件:
子窗体中自定义一个Button b;
在父窗体的事件里写上:
Form1 (子窗体) f=new form1();
f.b=this.button1(需要调用 的父窗体的Button控件)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友28b4182
2012-01-09 · TA获得超过7222个赞
知道大有可为答主
回答量:4847
采纳率:100%
帮助的人:1857万
展开全部
没办法调用的,因为子窗体其实是在父窗体里面实例化的一个类,只有父窗体调用子窗体,没有子窗体调用父窗体里面的类的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sxhgga
2012-01-10 · TA获得超过687个赞
知道小有建树答主
回答量:1019
采纳率:74%
帮助的人:640万
展开全部
你在打开子窗体时候加上
子窗体.Owner = this;

在子窗体中:
父窗体 frm1 = (父窗体)this.Owner;
((Label)frm1.Controls["panel2"].Controls["控件名称"]).Text = "欢迎";
((Label)frm1.Controls["panel2"].Controls["linklLogin"]).Text = "退 出";
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式