c# 子窗口控制父窗体的方法。和使用父窗口的控件,

如题,子窗口1是打开的,父窗体也是打开的1,所以不能用new调用父窗体,New调用的话,就等于是新建了一个窗体了。就不能用到已经打开的父窗体的方法了,等于是要控制已经打开... 如题,
子窗口1是打开的,
父窗体也是打开的1,
所以不能用new调用父窗体,New调用的话,就等于是新建了一个窗体了。
就不能用到已经打开的父窗体的方法了,等于是要控制已经打开的父窗体的参数。
展开
 我来答
百度网友022523ba3
2014-09-28 · TA获得超过678个赞
知道小有建树答主
回答量:416
采纳率:100%
帮助的人:253万
展开全部

很简单的,首先你需要在父窗体中定义一个委托

namespace WindowsFormsApplication1
{
    public delegate void Handled1();//定义一个委托
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        //需要子窗体执行的方法
        private void ShowForm()
        {
            MessageBox.Show("Test");
        }

        private void button4_Click(object sender, EventArgs e)
        {
            //创建子窗体,并将需要执行的方法传递到子窗体去
            Form2 f = new Form2(ShowForm);
            f.Show();
        }
    }
}

然后在子窗体中使用这个委托

namespace WindowsFormsApplication1
{
    
    public partial class Form2 : Form
    {
        Handled1 _hand = null;//使用在父窗体中定义的委托
        
        //将委托定义为子窗体的构造器参数
        public Form2(Handled1 hand)
        {
            InitializeComponent();
            _hand = hand;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            _hand();//调用父窗体中的方法
        }
    }
}

使用委托相对要麻烦一点,你想简单的话,也可以直接将父窗体传递到子窗体去,像这样改下就行了

        Form _form = null;
        //将基类定义为子窗体的构造器参数
        public Form2(Form from)
        {
            InitializeComponent();
            _form = from;
        }
        //调用父窗体的方法就变成这样
        _form.ShowForm();

当然父窗体中创建子窗体时,就应该这样了

            //创建子窗体,并将父窗体传递到子窗体去
            Form2 f = new Form2(this);
            f.Show();

忘了一点,那个在子窗体调用的方法不能再是private的了,一定要改成public的,这样才能在子窗体中使用。

小猪爱上羊
2014-09-19 · 超过78用户采纳过TA的回答
知道小有建树答主
回答量:170
采纳率:100%
帮助的人:111万
展开全部
把父窗体作为参数传递给子窗体。父窗体可以定义一些public控件,把自身控件赋值给它,供子窗体调用。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Axure夜话
2014-09-14 · 知道合伙人软件行家
Axure夜话
知道合伙人软件行家
采纳数:1197 获赞数:1344
1992年毕业于太原理工大学,20年IT公司工作经验现任山西誉海和科技有限公司技术总监,老二牛车教育课程总监

向TA提问 私信TA
展开全部
方式一:
在子窗体中定义 父窗体的引用,使用该引用操作父窗体的功用方法和变量
方式二:
在Progam类中定义static的父窗体引用,这样在所有的子窗体中都可以使用该引用来操作父窗体
比如:
public static MainForm mainForm;
public static Main()
{
.......
mainForm=new MainForm();
Appliection.Run(mainForm);
}

调用时
子窗体中:Program.mainForm.变量=XXX;

建议使用第二种方式

3其它方式:使用构造传递引用方式
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式