C#,winform,ShowDialog,子窗体向父窗体传值_实用技巧

调用showdialog方法后,调用代码被暂停执行,等到调用showdialog方法的窗体关系后再继续执行。而且窗体可以返回一个dialogresult值,他描述了窗体关闭的原因,例如OK,Cancel,yes,no等。为了让窗体返回一个dialogresult,必须设置窗体的dialogresult值,或者在窗体的一个按钮上设置dialogresult属性。

例子:
下面是子窗体代码,要求输入phone,然后会返回给父窗体。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication1
{
    public partial class Phone : Form
    {
        public Phone()
        {
            InitializeComponent();
            btnOK.DialogResult = DialogResult.OK;
            btnOK.DialogResult = DialogResult.Cancel;
        }
        public string PhoneNumber
        {
            get { return textBox1.Text; }
            set { textBox1.Text = value; }
        }
        private void Phone_Load(object sender, EventArgs e)
        {

        }
    }
}

不包含任何处理按钮单击事件的代码,因为设置了每个按钮的dialogresult属性,所以单击OK或者Cancel按钮后,窗体就消失了。下面的代码显示了父窗体中调用Phone对话框的方法。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication1
{
    public partial class Form7 : Form
    {
        public Form7()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Phone frm = new Phone();
            frm.ShowDialog();
            if (frm.DialogResult == DialogResult.OK)
            {
                label1.Text = "Phone number is " + frm.PhoneNumber;

            }
            else if (frm.DialogResult == DialogResult.Cancel)
            {
                label1.Text = "form was canceled";

            }
            frm.Close();
        }
    }
}

看起来非常简单,创建新的Phone对象frm,在调用frm.showdialog方法是,代码停止,等待phone窗体返回,接着检查phone窗体的dialogresult属性,由于窗体还没有释放,是不可见的,所以仍可以访问公共属性phonenumber,一旦获取了需要的数据,就可以嗲用窗体的close方法。
一切正常,但是如果返回的格式不正确怎么办,就要把showdialog方法放在循环中,就可以再次调用,让用户重新输入,就可以得到正确的值。

上面的代码改成下面的即可。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication1
{
    public partial class Form7 : Form
    {
        public Form7()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Phone frm = new Phone();

            while (true)
            {
                frm.ShowDialog();
                if (frm.DialogResult == DialogResult.OK)
                {
                    label1.Text = "Phone number is " + frm.PhoneNumber;
                    if (frm.PhoneNumber.Length == 8 || frm.PhoneNumber.Length == 12)
                    {
                        break;
                    }
                    else
                    {
                        MessageBox.Show("");
                    }
                }
                else if (frm.DialogResult == DialogResult.Cancel)
                {
                    label1.Text = "form was canceled";
                    break;
                }
            }
            frm.Close();
        }
    }
}

时间: 2024-10-30 05:22:00

C#,winform,ShowDialog,子窗体向父窗体传值_实用技巧的相关文章

ASP.NET窗体身份验证详解_实用技巧

asp.net的身份验证类型如下:   在我们实际的工作中,froms身份验证用的还是比较多的,我们接下来详细说一下: 做为web开发的程序员,我想登录窗体是接触的太多了.可是,我发现有的程序员在对身份验证的时候是把验证的用户名保存在一个session里的,然后进入系统的每个页面都去验证session是否为空,如果不为空那么就response.redirect("......aspx").  我认为这种方法相对于asp.net提供的form身份验证来说是不足的,首先,就是增加代码量,因

子页向父页传值示例_javascript技巧

复制代码 代码如下: <script type="text/javascript"> function getValue() { var ofrm2 = document.getElementById("TextBox1").value; parent.document.getElementById("txbOpID").value = ofrm2 alert("ie取值结果为:" + ofrm2); }

asp.net TreeView递归循环子节点生成树形菜单实例_实用技巧

本文实例讲述了asp.net TreeView递归循环子节点生成树形菜单的方法.分享给大家供大家参考,具体如下: 这里主要用到递归循环获取子结点 /// <summary> /// 生成根节点 /// </summary> /// <param name="treeview"></param> protected void BindTreeView(long ID, TreeView treeview) { DataTable dt =

子窗体关闭父窗体刷新-关于子窗体关闭同时刷新父窗体的问题

问题描述 关于子窗体关闭同时刷新父窗体的问题 亲,是这样的,我现在在实习,最近在练习做一个C#连接Oracle然后对数据库进行增删改查的小程序,有一个问题,我简单说一下,就是我的父窗体有个dgv来显示数据库数据,然后有个增加数据Button点一下,出现子窗体,然后子窗体上有姓名,号码输入框,还有一个确定输入键.我想实现按一下确定输入键输入键,然后子窗体自动关闭,父窗体的dgv内容自动刷新,我百度了个方法,很管用,是这样的.//你在主窗体调用子窗体事件里面写: 子窗体f = new 子窗体();

子窗体事件-C#子窗体调用父窗体的事件

问题描述 C#子窗体调用父窗体的事件 父窗体是wpf界面 子窗体是winform界面 请问如何子窗体调用父窗体的事件,进行刷新子窗体的数据 因为我用的是页面传值,所以必须子窗体调用父窗体的事件,子窗体才能刷新值

jQuery子窗体取得父窗体元素的方法

  本文实例讲述了jQuery子窗体取得父窗体元素的方法.分享给大家供大家参考.具体如下: ? 1 $("#父窗口元素ID",window.parent.document); 对应javascript版本为 ? 1 window.parent.document.getElementById("父窗口元素ID"); 取父窗口的元素方法: ? 1 $(selector, window.parent.document); 取父窗口的父窗口的元素就可以用: ? 1 $(se

让iframe子窗体取父窗体地址栏参数(querystring)_javascript技巧

复制代码 代码如下: <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>让iframe子窗体取父窗体地址栏参数(querystring)</title> <script type="text/javascript"> function f(){ //http://localhost:4101/MyFiles/netshop/ShopType.

jQuery子窗体取得父窗体元素的方法_jquery

本文实例讲述了jQuery子窗体取得父窗体元素的方法.分享给大家供大家参考.具体如下: $("#父窗口元素ID",window.parent.document); 对应javascript版本为 window.parent.document.getElementById("父窗口元素ID"); 取父窗口的元素方法: $(selector, window.parent.document); 取父窗口的父窗口的元素就可以用: $(selector, window.par

MDI窗体应用程序子窗体和父窗体怎么做窗体分割

问题描述 MDI窗体应用程序子窗体和父窗体怎么做窗体分割 MDI窗体应用程序子窗体和父窗体怎么做窗体分割,在两个窗体之间怎么添加一个分割条? 解决方案 http://jingyan.baidu.com/article/5552ef473468fc518ffbc9d1.html 解决方案二: Windows应用程序C#创建MDI父窗体和子窗体