c#怎样在第2个窗体关闭时将数值返回给第一个窗体

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u012692537/article/details/78374507

参考了

https://zhidao.baidu.com/question/2015149438371115148.html

http://blog.csdn.net/kankankankan2222/article/details/8178872


第一个Form,Form1:

            string value = string.Empty;
            using (Form2 frm = new Form2())
            {
                if (frm.ShowDialog() == DialogResult.OK)
                {
                    //value就是Form2关闭的时候传出的
                    value = frm.OutValue;
                }
            }
            MessageBox.Show(value);

第二个Form2:

    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void Form2_Load(object sender, EventArgs e)
        {

        }

        public string OutValue;

        protected override void OnClosing(CancelEventArgs e)
        {
            base.OnClosing(e);

            this.OutValue = "value";
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.DialogResult=DialogResult.OK;
            this.Close();
        }
    }

需要在this.Close()前将DialogResult的值设置为对应的结果

以下是DialogResult推荐的值

    //
    // 摘要:
    //     指定标识符以指示对话框的返回值。
    [ComVisible(true)]
    public enum DialogResult
    {
        //
        // 摘要:
        //     从对话框返回了 Nothing。这表明有模式对话框继续运行。
        None = 0,
        //
        // 摘要:
        //     对话框的返回值是 OK(通常从标签为“确定”的按钮发送)。
        OK = 1,
        //
        // 摘要:
        //     对话框的返回值是 Cancel(通常从标签为“取消”的按钮发送)。
        Cancel = 2,
        //
        // 摘要:
        //     对话框的返回值是 Abort(通常从标签为“中止”的按钮发送)。
        Abort = 3,
        //
        // 摘要:
        //     对话框的返回值是 Retry(通常从标签为“重试”的按钮发送)。
        Retry = 4,
        //
        // 摘要:
        //     对话框的返回值是 Ignore(通常从标签为“忽略”的按钮发送)。
        Ignore = 5,
        //
        // 摘要:
        //     对话框的返回值是 Yes(通常从标签为“是”的按钮发送)。
        Yes = 6,
        //
        // 摘要:
        //     对话框的返回值是 No(通常从标签为“否”的按钮发送)。
        No = 7
    }

对话框Form已经关闭了,怎么还能调用其函数

其实,当窗体通过ShowDialog方法显示,并通过Close()函数进行关闭时,窗体资源不被释放。

=======================================================

Form.ShowDialog方法  http://msdn.microsoft.com/zh-cn/library/c7ykbedk.aspx


展开阅读全文

第二个窗体关闭时向第一个窗体传值

12-06

这是一个讨论贴,关于“如何在两个窗体之间传送数据”,想达到一个效果:如何在一个窗体中打开另一个窗体,并在第二个窗体关闭时向第一个窗体传值。rn在网上查找到这么一个解决方案,说实话,我没看懂(不好意思,我都怀疑可行性),[url=http://bbs.csdn.net/topics/190041664]http://bbs.csdn.net/topics/190041664[/url]rn于是自已想了一个办法,但于步骤3访问了 form1的控件属性,我不太满意。rnrn 实现步骤:rn1 、form1中通过函数调用form2中的函数rn2、form2中各种折腾,改变SS的值rn3、form2关闭时,将值传送给form1中控件TextBox1。rnrn哪有高手能指点一下?rnrn简化代码:rnform1中rn[code=vb] Public KeyCode As Stringrn '为记事提供关键字rn Private Sub LabelX1_Click(sender As Object, e As EventArgs) Handles LabelX1.Click, rn ThingsCode.MainTr()rnEnd Subrn[/code]rnFORM2中rn[code=vb]Public Class form2rn Private ss As Stringrn '主函数rnPublic Sub MainTr(i As String)rn Me.Show()rn End Subrnrn '主代码rn Private Sub CheckBox6_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged, _rn CheckBox2.CheckedChanged, CheckBox3.CheckedChanged, CheckBox4.CheckedChanged, CheckBox5.CheckedChanged, _rn CheckBox6.CheckedChanged, CheckBox7.CheckedChanged, CheckBox8.CheckedChanged, CheckBox9.CheckedChanged, CheckBox10.CheckedChangedrnrn Dim S As String = sender.textrn Dim l As Integer = InStr(S, ":") + InStr(S, ":")rn Dim T As String = S.Substring(0, l)rnrn ss = ss & Trnrn End Subrnrn '返还数据rn Private Sub form2_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosingrn Form1.Controls("TextBox1").Text = ssrn End SubrnrnEnd Classrn[/code] 论坛

第一个窗体关闭打开第二个窗体

01-26

[code=C#][/code]using System;rnusing System.Collections.Generic;rnusing System.Windows.Forms;rnrnnamespace treernrn static class Programrn rn /// rn /// 应用程序的主入口点。rn /// rn [STAThread]rn static void Main()rn rn Application.EnableVisualStyles();rn Application.SetCompatibleTextRenderingDefault(false);rn Application.Run(new Form2());//先启动2号窗体rn rn rnrn[color=#FF0000]************************************************************[/color]rn[code=C#]rnusing System;rnusing System.Collections.Generic;rnusing System.ComponentModel;rnusing System.Data;rnusing System.Drawing;rnusing System.Text;rnusing System.Windows.Forms;rnrnnamespace treernrn public partial class Form2 : Formrn rn public Form2()rn rn InitializeComponent();rn rnrn private void Form2_Load(object sender, EventArgs e)rn rn Form1 f1 = new Form1(this);//实例1号窗体,那里面的this有用什么用呢?rn f1.ShowDialog(this);//这个地方什么要用ShowDialog,为什么要用Show(this)就不行呢?rn rn rnrn[/code]rn[code=C#]rnusing System;rnusing System.Collections.Generic;rnusing System.ComponentModel;rnusing System.Data;rnusing System.Drawing;rnusing System.Text;rnusing System.Windows.Forms;rnrnnamespace treernrn public partial class Form1 : Formrn rn Form2 f2;rn public Form1(Form2 f2)rn rn this.f2 = f2;//这样有什么用处呢?rn InitializeComponent();rn rnrn private void button1_Click(object sender, EventArgs e)rn rn this.Close();rn rnrn private void button2_Click(object sender, EventArgs e)rn rn this.textBox1.Clear();rn this.textBox2.Clear();rn rnrn private void Form1_FormClosing(object sender, FormClosingEventArgs e)rn rn f2.Show();rn this.Close();rn rn rnrn[/code] 论坛

没有更多推荐了,返回首页