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

如题,
子窗口1是打开的,
父窗体也是打开的1,
所以不能用new调用父窗体,New调用的话,就等于是新建了一个窗体了。
就不能用到已经打开的父窗体的方法了,等于是要控制已经打开的父窗体的参数。

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

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

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-09-19
把父窗体作为参数传递给子窗体。父窗体可以定义一些public控件,把自身控件赋值给它,供子窗体调用。
第2个回答  2014-09-14
方式一:
在子窗体中定义 父窗体的引用,使用该引用操作父窗体的功用方法和变量
方式二:
在Progam类中定义static的父窗体引用,这样在所有的子窗体中都可以使用该引用来操作父窗体
比如:
public static MainForm mainForm;
public static Main()
{
.......
mainForm=new MainForm();
Appliection.Run(mainForm);
}

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

建议使用第二种方式

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

c# 子窗口控制父窗体的方法。和使用父窗口的控件,
_hand = hand; } private void button1_Click(object sender, EventArgs e) { _hand();\/\/调用父窗体中的方法 } }}使用委托相对要麻烦一点,你想简单的话,也可以直接将父窗体传递到子窗体去,像这样改下就行了 Form _form = null; \/\/将基类定义为子窗体的构造器参数 ...

c#子窗体控制父窗体的显隐
1.新建一个项目,分别添加MainForm、BaseChildForm两个窗体,其中MainForm的IsMdiContainer设为True。2.在BaseChildForm里声明一个委托void ClosingHandler(),并重写OnFormClosing方法:public delegate void ClosingHandler();public ClosingHandler MyHandler;protected override void OnFormClosing(FormClosingEventA...

怎样在C#中实现父窗体向子窗体传值和子窗体向父窗体传值
child.ShowDialog();\/\/第2步,调用ShowDialog if (child.DialogResult==true)\/\/第3步,然后对DialogResult进行判断 { this.Title = child.Title;\/\/子窗体给父窗体传值 } 父窗体按钮事件 textbox2.Text= "我要给子窗体传值";this.DialogResult = true;\/\/第3步,首先会话结束 ...

C#如何利用子窗体调用父窗体的属性?
哦,窗体之间的访问啊。简单。\/\/子窗体里面写 private FrmMain f;\/\/到时传过来的父窗口 public FrmChild(FrmMain f){ this.f = f;f.Enable = true;\/\/这儿就可以改变了。} \/\/单击父窗口的按钮时 FrmChild f = new FrmChild();f.Show(this);\/\/把窗体传过去 http:\/\/zhidao.baidu.com\/questio...

C#中如何先弹出子窗体,父窗体隐藏,而后,单击子窗体的按钮,子窗体关闭...
如果是登录窗口,一般的做法是更改program.cs,先显示登录窗口,通过后再显示主窗体,假定你的登录窗体叫Login,主窗体叫MainForm static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Login login = new Login(); login.ShowDialog(...

c#父子窗口问题
这个很简单的。首先。指明了窗体A为父窗体的话,那么如何将窗体B设置A的子窗体呢。也就说使AB有父子窗体的关系 这个就要在显示B窗体时写代码了。显示B窗体的代码如下:(这段代码肯定是写在A中的)(当然前提还是把A中的isMdicontainer改成ture)FormB formb = new FormB();formb.MdiParent = ...

VS2010, C#,子窗口如何获取其父窗口对象?
子窗体里的public partial class FormChild : Form下写 FormParent parent;public FormChild(FormParent parent){ ...this.parent=parent;} 调用父窗口的对象的话要把需调用的对象写成public 然后parent.对象 就能点出来了 还有就是父窗体打开子窗体的时候需这样写FormChild child=new FormChild(this);...

C#子窗体关闭时怎么使父窗口中的控件也随之改变。
子窗体定义一个委托,父窗体实例化子窗体时注册子窗体的委托事件(具体方法实现父窗口的控件变化),子窗体关闭时调用事件方法。

C#问题,关于用子窗口改父窗口控件
Owner:该属性表示拥有此窗体的窗体。如f1打开的f2,则f2.Owner实际指向的就是f1,所以按钮中写f2.Owner可以指向f1窗体,如果你把label1公开的话,可以直接写f2.Owner.label1.text = this.textbox1.value;即可实现你的要求。如果在属性中指定的父窗体的情况,f2.ParentForm也可以指向父窗体。拥有窗体...

编程语言c# 父窗口上面的控件 比如说 groupBox1,把新NEW出来的子窗口给...
解决方法1,这个用api setparent实现,不要用mdiparent 解决方法2,在显示子窗体时候吧父窗体的控件隐藏 解决方法3,将父窗体的控件都放在一个容器里面(如:panel)然后将panel的dock设置靠边(left)那么mdi子窗体出来的时候就是和这些控件并排的,不会谁覆盖谁了 ...

相似回答