http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 7351|回复: 5

[Winform] form2窗体修改form1窗体内容

[复制链接]
发表于 2013-3-14 20:06:38 | 显示全部楼层 |阅读模式
近一直很忙,今天才有空上论坛来看看,发现站长对于窗体之间传值的说法产生疑问,今天就此贴贴出我对窗体之间修改内容的方法贴出我的解决代码,由于本人技术水平有限,若有错误之处还望大侠指点,本人不胜感激!
好的废话少说,现在进入主题
首先我是看到站长的一篇相同问题解决办法的帖子时感觉解决办法过于麻烦,所以把我自己的这个方法贴出
【原帖】 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]

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




1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2013-3-14 20:57:03 | 显示全部楼层
楼主你的方式和我的相比,是多了一反操作的的功能,然后就是把我调用方法的方式改成了直接调用控件,这好像没什差别吧,到是不建议你这样写。首先互操作的作用不大,再就是会让初学的混淆,不清楚到底是在做什么,因为你写的是form2修改form1的内容,本来这个就不好理解,我联系你先把这个说清,在这个深入的时才加上这个功能,再就是直接调用控件不安全,不利于扩展,如果有多处时就会加大代码量,但是你却多了两个public变量。另外我建议&#160;&#160;&#160;&#160;button2.Enabled&#160;=&#160;false;这句这show前面。这是我的个人理解,还请楼主指教,哈哈:-D
 楼主| 发表于 2013-3-14 21:44:29 | 显示全部楼层
的确,这样不易初学者的理解。由于是临时写的,所以很仓促了。。。我又重新翻看了你的代码,发现你的代码中也存在一个public 变量,这样也不利于代码的安全性,我建议将其也改成private 变量。可以在form2的构造方法中传递参数,你觉得呢。。。
 楼主| 发表于 2013-3-14 21:45:56 | 显示全部楼层
站长苏飞 发表于 2013-3-14 20:57
楼主你的方式和我的相比,是多了一反操作的的功能,然后就是把我调用方法的方式改成了直接调用控件,这好像 ...

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

访问者其实影响不大,主要是主窗体,当然会更好。
发表于 2013-11-10 13:32:49 | 显示全部楼层
想请教您,关于Form应用程序,制作一个主Form,三个子Form(一个登陆Form,一个模态式Form,一个非模态式Form)。
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-11-15 17:17

© 2014-2021

快速回复 返回顶部 返回列表