.Net子窗体给父窗体传值的几种方法

其实方法有很多种,这里只介绍3种,大家如有更好的方法可互相学习学习。

1.子父窗体Owner设定法:

Form1:

void Button_fm1_Click(object sender, EventArgs e)

{

Form2 fm2 = new Form2();

fm2.Owner = this;   //将Form2的Owner指针指向Form1

fm2.ShowDialog();

}

Form2:

void Button_fm2_Click(object sender, EventArgs e)

{

Form1 fm1 = (Form1)this.Owner;  //将Form2的父窗体指针赋值给fm1

fm1.Form1PublicTextBox.Text = this.TextBox.Text; //使用父窗体指针给父窗体中的TextBox赋值。(这里需设定父窗体中的TextBox的Modifier为Public)

this.Close();

}

2. 提供TextBox属性方法

Form2:

namespace 子窗体传值父窗体

{

public Form1 fm1;

……

void Button_fm2_Click(object sender, EventArgs e)

{

fm1.TextBox1.Text = this.TextBox1.Text;

this.Close();

}

}

Form1:

void Button_fm1_Click(object sender, EventArgs e)

{

Form2 fm2 = new Form2();

fm2.fm1= this;   //将fm1传值给fm2的fm1成员变量

fm2.ShowDialog();

}

//提供Form1的一个公有属性指向TextBox1

public TextBox Form1PublicTextBox
        {
            get 
            {
                return this.TextBox1;
            }
        }

3.委托实现方法

新建一个委托:

public delegate void UpdateTxtBoxDelegate(string txt);

Form1:

3.1 新增一个UpdateTextBox的方法:

void UpdateTextBox(string txt)
        {
            this.textBox1.Text = txt;
        }

3.2

void Button_fm1_Click(object sender, EventArgs e)

{

Form2 fm2 = new Form2(this.TextBox1.Text,UpdateTextBox);//将UpdateTextBox方法作为参数传给Form2

fm2.ShowDialog();

}

Form2:

public FormB(string userInput,UpdateTxtBoxDelegate uptxbdelegate):this()
        {
            this.textBox1.Text = userInput;
            
            _updatetxtbDel = uptxbdelegate;
        }

private  UpdateTxtBoxDelegate _updatetxtbDel; //声明一个委托对象

void Button_fm2_Click(object sender, EventArgs e)

{

_updatetxtbDel(this.textBox1.Text);

}

时间: 2024-11-14 17:44:24

.Net子窗体给父窗体传值的几种方法的相关文章

子窗体和父窗体双向传值——C#窗体传值方法总结

简介 在很多场景下,我们的程序需要完成窗体间的传值功能,有时候是父窗体→子窗体单向传值.子窗体→父窗体传值甚至是,也有时候我们需要父窗体?子窗体双向传值. 在本文中主要介绍一些能够实现双向传值的方法,能够双向传值的方法也能够实现单向传值. 本文的所有源码都可以在GitHub上下载. 本文介绍的方法仅限于我自己知道并且实现过的,我相信还有很多我并不知道的方法,因此也许在很多朋友眼中本文的内容是浅显甚至可笑的,希望路过的各方朋友不吝赐教,我也希望不断地进步! 方法1:Public字段+ShowDia

Winfrom子窗体刷新父窗体

本人比较懒,直接从网上转载了一篇比较合适的文章,只是文章格式有点乱,地址是 http://aspnet.blog.163.com/blog/static/17515510920121126104433237/ 调用窗体(父):Form1,被调用窗体(子):Form2 方法1:   所有权法//Form1://需要有一个公共的刷新方法public   void   Refresh_Method(){//...}//在调用Form2时,要把Form2的所有者设为Form1Form2   f2   =

Winform子窗体刷新父窗体

调用窗体(父):Form1,被调用窗体(子):Form2方法1:   所有权法//Form1://需要有一个公共的刷新方法public   void   Refresh_Method(){//...}//在调用Form2时,要把Form2的所有者设为Form1Form2   f2   =   new   Form2()   ;f2.Owner   =   this;f2.ShowDialog()   ;//Form2://在需要对其调用者(父)刷新时Form1   f1   ;f1   =  

子窗体、父窗体方法互调

var childWindow = $("#editFrame")[0].contentWindow;//获取子窗体的window对象. childWindow.subForm(); $("#editFrame")得到frame [0].contentWindow//frame的子窗体,将JQUERY对象转化为DOM对象 subForm();//字窗体定义的方法 ----------------------------------------------------

C# MDI 子窗体被父窗体控件挡住

最近在做一个小工具,发现了一个过去做项目没有遇到的问题:子窗体被父窗体的控件给挡住了! 如下图所示: 子窗体的TopMost 已经设为true,父窗体的控件已经置于底层,但是结果还是很悲观!无奈之下,谷歌了一下,尝试了很多种方法,结果找到了一种最简单的解决问题方案,代码如下: using System.Runtime.InteropServices; // 导入名称空间 [DllImport("user32")] public static extern int SetParent(i

子窗体控制父窗体的内容

//父窗体 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Fo

重构—子窗体和父窗体

用单例模式实现子窗体在父窗体中显示,得到如下效果: 代码如下: 在子窗体中写入单例模式 '当程序没有焦点的时候,最小化 Private Sub frmStatusUI_Deactivate(senderAs Object, e As EventArgs) Handles Me.Deactivate If Me.WindowState <>FormWindowState.Minimized Then Me.WindowState =FormWindowState.Minimized 'Me.ZO

WinForm 子窗体在父窗体范围内移动,不能出父窗体 摘自于网络

详细解释:1, 主窗体Form1属性IsMdiContainer设为True,并添加ToolStrip控件, Toolstrip中添加一个按钮toolStripButton1.         2,添加新窗体Form2.           3,主窗体Form1中toolStripButton1的Click事件           private void toolStripButton1_Click(object sender, EventArgs e)         {          

MFC获得主窗体和父窗体指针

MFC编程中经常遇到子窗体向父窗体传递參数的情况,这就须要获得父窗体的指针. 例:主对话框CMyMainDlg通过buttonButtonA进入对话框CMyParentDlg.CMyParentDlg在通过buttonButtonB进入对话框CMyChildDlg.如今须要在CMyChildDlg分别訪问CMyParentDlg和CMyMainDlg的内容.须要在CMyChildDlg中增加下面两条语句: CMyMainDlg    *pMMD = (CMyMainDlg*)AfxGetMain

子页面向父页面传值

SHOWMODALDIALOG/SHOWMODELESSDIALOG --------------------------- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE> New Document </TITLE> <META NAME="Generator" CONTENT=&