用一个例子来说明吧,这样比较好明白一些。

就是打开主窗体,datagridview加载了一些数据,然后我们在打开的子窗体中,输入一些条件,让主窗体中的数据随着加载的条件来动态实现加载数据。

这就需要涉及到从子窗体传值到主窗体,然后筛选数据,最后绑定。其中,个人认为,最为高效的方法就是利用委托事件来实现。

我们可以先看看子窗体的代码:

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 WindowsFormsApplication1
{

public delegate void SearchDelegate(string str);

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

public event SearchDelegate SearchEvent;

private void btnOK_Click(object sender, EventArgs e)
        {
            SearchEvent(txt.Text);
            this.Close();
        }
    }
}

可以很明显的看到,子窗体中有一个全局的委托,然后申明了一个SearchEvent的事件。那么当我们点击按钮的时候,我们需要将条件委托出去,该如何做呢?代码:

SearchEvent(txt.Text);
看上去很明显,直接将我们的txt.text的文本值给委托了出去,至于怎么处理,是不用关心的。

现在我们开始看主窗体的代码了:

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

namespace WindowsFormsApplication1
{
    public partial class mainFrm : Form
    {
        public mainFrm()
        {
            InitializeComponent();
        }

public string connStr = "server=.;uid=sa;pwd=251147;database=bloginfo;";

private void mainFrm_Load(object sender, EventArgs e)
        {
            BindGridView();
        }

private DataTable  getDT(string sql)
        {
            DataTable dt = new DataTable();
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                conn.Open();
                SqlDataAdapter sda = new SqlDataAdapter(sql, conn);
                sda.Fill(dt);
            }
            return dt;
        }

private void BindGridView()
        {
            string sql = "select * from testblog";
            this.dgv.DataSource = getDT(sql);
        }

private void 数据筛选ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            searchFrm sf = new searchFrm();
            sf.SearchEvent+=new SearchDelegate(sf_SearchEvent);
            sf.ShowDialog();
        }

private void sf_SearchEvent(object o)
        {
            string str = o.ToString();
            string sql = "select * from testblog where sws_mc like '%"+str+"%'";
            this.dgv.DataSource = getDT(sql);
        }
    }
}

看到了没,从子窗体抛出的事件委托,被主窗体的 sf.SearchEvent+=new SearchDelegate(sf_SearchEvent);这句话给接收住了,并且在

private void sf_SearchEvent(object o)
        {
            string str = o.ToString();
            string sql = "select * from testblog where sws_mc like '%"+str+"%'";
            this.dgv.DataSource = getDT(sql);
        }
代码中进行了处理,哈哈,我们的传值成功了。

其实,扩展一下,我们传过来的object类型可以是任何种类的,比如说arraylist 比如说泛型的一些容器等等。只要传到主窗体,拆箱开来,就会发现子窗体的一些内容已经传到了主窗体了,剩下的,就是处理了。

C#的委托事件在winform窗体中实现传值备忘相关推荐

  1. winform C#的委托事件在winform窗体中传值,也可用于刷新另一窗体(窗体A刷新窗体B)...

    窗体A :代码如下: public delegate void BrushPermission();//定义一个委托/// <summary>/// 刷新主界面的权限(功能按钮)/// & ...

  2. 怎样在Winform窗体中嵌入Web浏览器

    背景 项目当中需要在Winform窗体中嵌入网页,虽然微软自带了WebBrowser控件,但是她是以IE模式运行的,兼容性实在太差,找了一圈发现有个叫CefSharp的家伙还不错,于是就拿来玩了一下. ...

  3. 【二次开发】将CATIA嵌入到Winform窗体中

    由于项目需要,我们需要将CATIA嵌入到我们的软件之中,要求在软件启动后,同时调用并启动CATIA软件,并能够屏蔽掉软件自身的菜单和按钮.通过在网上查阅资料,实现了这一功能. 调用并启动CATIA p ...

  4. WinForm窗体中如何在一个窗体中取到另一个窗体的值

    例如我们定义两窗体,Form1和Form2,如何在Form2中取到Form1中的一个值呢? 解决方法1: 在Form1 中定义一个成员变量,例如public string a = " &qu ...

  5. C#操作数据库,将其查查出来的记录条数显示在winform窗体中的方法之一

    1 //1.数据库链接的基本操作(略) 2 //2.创建对象函数(关键部分) 3 sqlConn.Open(); 4 //初始化定义记录条数 5 int n = 0; 6 object obj = s ...

  6. C# :Winform窗体中文字滚动显示

    想要做到文字滚动显示,首先需要把文字写入Lable控件中,将Label控件的位置改变就可以实现文字的位置变换. 1.在窗体中添加Timer和Lable控件 2.编写代码 //滚动 Lable priv ...

  7. WinForm窗体间如何传值

    窗体间传递数据,无论是父窗体操作子窗体,还是子窗体操作符窗体,有以下几种方式: 公共静态变量: 使用共有属性: 使用委托与事件: 通过构造函数把主窗体传递到从窗体中: 一.通过静态变量 特点:传值是双 ...

  8. C#Winform窗体中传值

    在窗体Form2中定义公有属性Form2Value,获取和设置textBox1的文本值 并且还定义一个accept事件public string Form2Value { get { return t ...

  9. C# 中对WinForm窗体中的控件快速设置TableIndex次序

    点击"视图"--"Tab键顺序",然后便可设置. 参考文章 1. ssilspro,在vs2008中做winform程序的时,调整控件TableIndex顺序的 ...

最新文章

  1. python中的linearregression_【python+机器学习(2)】python实现Linear Regression
  2. OSError: mysql_config not found
  3. linux如何退出python编辑器_centos linux 终端已经调成python3,怎么安装python3的IDLE编译器,...
  4. fiddler和wireshark工具介绍及对比 - [测试技术知识]
  5. python-mysql驱动64位
  6. 架​设​W​e​b​服​务​器
  7. 如何备份和还原Firefox设置
  8. ruby操作常用数据库 - 使用DBI[翻译 转帖]
  9. 【Java并发编程】—–“J.U.C”:ArrayBlockingQueue
  10. Webservice 实践
  11. Qt_QSS 样式表属性大全
  12. 最短哈密尔顿圈matlab解法_数学建模学习笔记
  13. 费式序列(斐波那契数列)
  14. 【第1128期】从北京回来的年轻人,该告诉你点什么?
  15. 山东农业大学计算机考研资料汇总
  16. pmp知识点(9)-项目资源管理
  17. 汇编语言-用Si和Di实现字符串复制到其他的区域
  18. hadoop启动后jps查不到namenode的解决办法
  19. Python语言基础学习
  20. 报错:TestEngine with ID ‘junit-jupiter‘ failed to discover tests

热门文章

  1. centos执行-查看,复制,删除-命令的脚本
  2. 浅说 XSS 和 CSRF
  3. 第二次作业--线性表
  4. autofac 用法总结
  5. PDO绑定含IN的SQL语句的参数注意事项
  6. java struts2模拟百度百科图片中的防盗链设置
  7. 日本光伏相关企业倒闭数量上升 帝国征信调查
  8. 移动端touchstart、touchmove事件的基本使用
  9. 数据管控引领科技未来
  10. iframe中请求页面而session失效时页面跳转问题