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

2024-12-09 05:28:18
推荐回答(3个)
回答(1):

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

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的,这样才能在子窗体中使用。

回答(2):

把父窗体作为参数传递给子窗体。父窗体可以定义一些public控件,把自身控件赋值给它,供子窗体调用。

回答(3):

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

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

建议使用第二种方式

3其它方式:使用构造传递引用方式