WinForm页面之间(父页面传递参数给子页面)传递参数

方法一通过构造函数:

父页面(frmMain)点击btnQuery按钮进入子页面(frmListInfo),将数据库名(pdtDB)传递给子页面

父页面代码:

private void btnQuery_Click(object sender, EventArgs e)
{
            string pdtDB = FISTools.TAttributeCollection.ProductInfo["DatabaseName"].ToString();//数据库名
            this.TopMost = false;//隐藏frmMain
            frmListInfo frmListInfo = new frmListInfo(pdtDB);//创建子页面frmListInfo对象,new的时候传递参数pdtDB
            frmListInfo.ShowDialog();
            this.TopMost = true;
}
View Code

子页面frmListInfo中在构造函数中初始此参数

C#代码:

public partial class frmListInfo : Form
{
string db = "";//定义一个全局变量
        public frmListInfo()
        {
            InitializeComponent();
            this.dTPickerFrom.Format = DateTimePickerFormat.Custom;
            dTPickerFrom.CustomFormat = "yyyy-MM-dd HH:mm";
            this.dTPickerTo.Format = DateTimePickerFormat.Custom;
            dTPickerTo.CustomFormat = "yyyy-MM-dd HH:mm";
        }
        public frmListInfo(string a)
        {
            InitializeComponent();
            db = a;            
        }
    //下面的程序就可以用db了
}
View Code

当有两个构造函数的时候,程序会先执行不带参数的构造函数,然后再执行带参数的构造函数。执行带参数的构造函数,在构造函数中将参数的值付给指定的变量,在子页面中就可以使用这个传递过来的值了。 

也可以这样写:

C#代码:

public partial class frmListInfo : Form
{
string db = "";//定义一个全局变量
        public frmListInfo(string a)
        {
            InitializeComponent();
            db = a;   
            this.dTPickerFrom.Format = DateTimePickerFormat.Custom;
            dTPickerFrom.CustomFormat = "yyyy-MM-dd HH:mm";
            this.dTPickerTo.Format = DateTimePickerFormat.Custom;
            dTPickerTo.CustomFormat = "yyyy-MM-dd HH:mm";
        }
        //public frmListInfo(string a)
        //{
            //InitializeComponent();
            //db = a;            
        //}
    //下面的程序就可以用db了
}
View Code

 

方法二通过子类属性来获取父类参数(winform页面可以看做是一个类):

父页面(frmMain)点击btnQuery按钮进入子页面(frmListInfo),将数据库名(pdtDB)传递给子页面

父页面代码:

private void btnQuery_Click(object sender, EventArgs e)
{
            string pdtDB = FISTools.TAttributeCollection.ProductInfo["DatabaseName"].ToString();//数据库名
            this.TopMost = false; //隐藏frmMain
            frmListInfo frmListInfo = new frmListInfo();//创建子页面对象frmListInfo
            frmListInfo.getDBName = pdtDB; //给子页面类属性赋值pdtDB
            frmListInfo.ShowDialog();
            this.TopMost = true;
}
View Code

子页面(frmListInfo)程序,当父页面执行frmListInfo.getDBName = pdtDB;时子页面中getDBName属性的set { pdtDB = value; }将pdtDB的value给了子页面属性getDBName

在子页面使用的时候,只需要直接获取属性getDBName的值即可,

即string aDBName = getDBName.ToString();

子页面代码:

public partial class frmListInfo : Form
{ 
        public frmListInfo()
        {
            InitializeComponent(); 
            this.dTPickerFrom.Format = DateTimePickerFormat.Custom;
            dTPickerFrom.CustomFormat = "yyyy-MM-dd HH:mm";
            this.dTPickerTo.Format = DateTimePickerFormat.Custom;
            dTPickerTo.CustomFormat = "yyyy-MM-dd HH:mm";
        }

        #region GetpdtDBName 子页面getDBName属性
        private string pdtDB;
        public string getDBName
        {
            get { return pdtDB; }
            set { pdtDB = value; }
        }
        #endregion
      string aDBName = getDBName.ToString();//aDBName就是获得了从父页面传递过来的pdtDB
}
View Code

 

转载于:https://www.cnblogs.com/sunnyboy1018/p/5038779.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 WinForm 中,可以通过使用委托将消息从窗体传递到子窗体。委托是一种允许我们在一个窗体中定义一个事件,并在其他窗体中响应该事件的机制。 首先,在窗体中定义一个委托类型的事件,并创建一个触发事件的方法。例如: ``` // 窗体中定义委托事件 public delegate void MyEventHandler(string message); public event MyEventHandler MyEvent; // 触发事件的方法 private void SendMessageToChild() { if (MyEvent != null) { MyEvent("这是来自窗体的消息"); } } ``` 然后,在子窗体中订阅这个事件,并定义一个处理事件的方法。例如: ``` // 子窗体中订阅窗体事件 private void SubscribeParentEvent() { ParentForm parent = (ParentForm)this.ParentForm; parent.MyEvent += new MyEventHandler(ReceiveMessageFromParent); } // 处理窗体事件的方法 private void ReceiveMessageFromParent(string message) { // 在子窗体中处理传递过来的消息 Console.WriteLine(message); } ``` 最后,在窗体中创建子窗体的实例并显示。在需要传递消息的时候,调用窗体的触发事件方法。例如: ``` // 创建并显示子窗体 ChildForm child = new ChildForm(); child.SubscribeParentEvent(); child.Show(); // 在需要传递消息的时候调用窗体的方法 ParentForm parent = new ParentForm(); parent.SendMessageToChild(); ``` 通过上述步骤,我们就可以在窗体与子窗体之间通过委托实现消息的传递。优点是可以实现窗体之间的松耦合,子窗体可以通过委托监听窗体中的事件并作出相应处理。 ### 回答2: 要实现winform中委托窗体传递到子窗体的功能,可以按照以下步骤进行操作: 1. 在窗体中定义一个委托类型和事件,用于传递需要在子窗体中执行的方法。例如: ``` public delegate void MyDelegate(string message); public event MyDelegate SendMessageEvent; ``` 2. 在窗体需要的时候,触发这个事件并传递相应的参数。例如: ``` SendMessageEvent?.Invoke("Hello, 子窗体!"); ``` 3. 在子窗体中定义一个接收委托类型的方法,并在需要的时候注册这个方法到窗体的事件中。例如: ``` public void ReceiveMessage(string message) { MessageBox.Show(message); } // 在子窗体加载时注册接收方法到窗体的事件中 private void ChildForm_Load(object sender, EventArgs e) { ParentForm parent = (ParentForm)this.Owner; parent.SendMessageEvent += ReceiveMessage; } ``` 通过以上操作,就可以实现在窗体中定义委托,并在子窗体中接收并执行相应的方法。当窗体触发事件时,子窗体中注册的方法会被调用,实现了委托的传递功能。 ### 回答3: 在WinForm中,可以通过委托将信息从窗体传递到子窗体。委托是一种特殊的数据类型,它允许将方法作为参数传递,并在需要时调用。 首先,在子窗体的类中定义一个委托,该委托代表窗体的方法签名。例如,如果要传递一个字符串参数,可以定义一个委托如下: ```csharp public delegate void MyDelegate(string message); ``` 在窗体中,实例化子窗体的对象,并创建一个委托的实例。然后,将窗体的方法绑定到委托实例中。最后,将委托实例传递给子窗体的构造函数或公共属性。例如: ```csharp public partial class ParentForm : Form { private ChildForm childForm; public ParentForm() { InitializeComponent(); childForm = new ChildForm(); MyDelegate myDelegate = new MyDelegate(this.SendMessage); childForm.MyEventHandler = myDelegate; } private void SendMessage(string message) { MessageBox.Show("Received message: " + message); } } ``` 在子窗体中,定义一个公共属性来接收委托的实例,并在需要时调用该委托。例如: ```csharp public partial class ChildForm : Form { public MyDelegate MyEventHandler { get; set; } private void Button_Click(object sender, EventArgs e) { MyEventHandler?.Invoke("Hello from child form!"); } } ``` 在子窗体中的按钮点击事件中,调用委托实例的Invoke方法,并传递需要发送的信息。 这样,当子窗体中的按钮被点击时,委托会调用窗体中定义的方法,并将消息传递给窗体,窗体会弹出一个消息框显示接收到的信息。 以上就是使用委托在WinForm中实现窗体向子窗体传递信息的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值