苏飞论坛

标题: form2窗体修改form1窗体内容 [打印本页]

作者: 逆尘    时间: 2013-3-14 20:06
标题: form2窗体修改form1窗体内容
近一直很忙,今天才有空上论坛来看看,发现站长对于窗体之间传值的说法产生疑问,今天就此贴贴出我对窗体之间修改内容的方法贴出我的解决代码,由于本人技术水平有限,若有错误之处还望大侠指点,本人不胜感激!
好的废话少说,现在进入主题
首先我是看到站长的一篇相同问题解决办法的帖子时感觉解决办法过于麻烦,所以把我自己的这个方法贴出
【原帖】 form2窗体修改form1窗体内容问题
http://www.sufeinet.com/forum.php?mod=viewthread&tid=1273&fromuid=2968
下面是我的解决办法
首先我们建立两个窗体form1和form2,如图
分别修改每个窗体的各个控件的 Modified 属性

然后在form1的代码这样写:

[code=csharp]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 WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        /// <summary>
        /// 此处定义一个f2窗体类型变量,注意可见级别
        /// </summary>
        public Form2 f2;

        private void button2_Click(object sender, EventArgs e)
        {
            f2 = new Form2();//初始化一个新的form2
            f2.f1 = this;//将当前窗体做为变量值传递过去
            f2.Show();//弹出form2窗体
            button2.Enabled = false;
        }
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                f2.textBox1.Text = "你单击了form1窗体的按钮";
                this.textBox1.Text = "";        //此处的文本控件是不一样的不要弄混了
            }
            catch
            {
            }
        }
        private void button3_Click(object sender, EventArgs e)
        {
            f2.Close();
        }
    }
}

[/code]

以下是form2的窗体代码

[code=csharp]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 WindowsFormsApplication3
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
        /// <summary>
        /// 此处定义一个form1类型变量,注意可见级别
        /// </summary>
        public Form1 f1;

        private void button1_Click(object sender, EventArgs e)
        {
            f1.textBox1.Text = "你单击了form2窗体的按钮";
            this.textBox1.Text = "";        //此处的文本控件是不一样的不要弄混了


        }

        private void Form2_FormClosing(object sender, FormClosingEventArgs e)
        {
            f1.button2.Enabled = true;
        }
    }
}

[/code]

这样编译运行是可以通过的,如果你觉得这个有什么不足之处或你还有什么更好的方法,还望你可以指出大家一起交流
写的不好,还望不要见笑呵呵!



作者: 站长苏飞    时间: 2013-3-14 20:57
楼主你的方式和我的相比,是多了一反操作的的功能,然后就是把我调用方法的方式改成了直接调用控件,这好像没什差别吧,到是不建议你这样写。首先互操作的作用不大,再就是会让初学的混淆,不清楚到底是在做什么,因为你写的是form2修改form1的内容,本来这个就不好理解,我联系你先把这个说清,在这个深入的时才加上这个功能,再就是直接调用控件不安全,不利于扩展,如果有多处时就会加大代码量,但是你却多了两个public变量。另外我建议&#160;&#160;&#160;&#160;button2.Enabled&#160;=&#160;false;这句这show前面。这是我的个人理解,还请楼主指教,哈哈:-D
作者: 逆尘    时间: 2013-3-14 21:44
的确,这样不易初学者的理解。由于是临时写的,所以很仓促了。。。我又重新翻看了你的代码,发现你的代码中也存在一个public 变量,这样也不利于代码的安全性,我建议将其也改成private 变量。可以在form2的构造方法中传递参数,你觉得呢。。。
作者: 逆尘    时间: 2013-3-14 21:45
站长苏飞 发表于 2013-3-14 20:57
楼主你的方式和我的相比,是多了一反操作的的功能,然后就是把我调用方法的方式改成了直接调用控件,这好像 ...

的确,这样不易初学者的理解。由于是临时写的,所以很仓促了。。。我又重新翻看了你的代码,发现你的代码中也存在一个public 变量,这样也不利于代码的安全性,我建议将其也改成private 变量。可以在form2的构造方法中传递参数,你觉得呢。。。
作者: 站长苏飞    时间: 2013-3-14 21:48
逆尘 发表于 2013-3-14 21:45
的确,这样不易初学者的理解。由于是临时写的,所以很仓促了。。。我又重新翻看了你的代码,发现你的代码 ...

访问者其实影响不大,主要是主窗体,当然会更好。
作者: 申振辉63    时间: 2013-11-10 13:32
想请教您,关于Form应用程序,制作一个主Form,三个子Form(一个登陆Form,一个模态式Form,一个非模态式Form)。





欢迎光临 苏飞论坛 (http://www.sufeinet.com/) Powered by Discuz! X3.4