下面是用户控件的代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms; namespace winform_test.UserControls
{
public partial class conYMPC : UserControl
{
private string sb_ym; public string Sb_ym
{
get { return sb_ym; }
}
private string sb_pc; public string Sb_pc
{
get { return sb_pc; }
} //委托
public delegate void MyChangeEventHandler();
//事件
public event MyChangeEventHandler MyChange;
//方法
public void OnMyChange()
{
if (MyChange != null)
MyChange();
} public conYMPC()
{
InitializeComponent();
}
/// <summary>
///窗体初始化
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void conYM_Load(object sender, EventArgs e)
{
BindYear();
} /// <summary>
/// 得到年份
/// </summary>
private void BindYear()
{
string sql = "select distinct left(sb_ym,4)+'年' as sb_year from sb_ympc order by sb_year desc";
DataSet ds = SqlHelp.GetDataSet(sql); foreach (DataRow dr in ds.Tables[0].Rows)
{
cboY.Properties.Items.Add(dr["sb_year"].ToString());
}
cboY.SelectedIndex = 0;
}
/// <summary>
/// 得到月份
/// </summary>
private void BindMonth()
{
cboM.Properties.Items.Clear();
string sql = "select distinct right(sb_ym,2)+'月' as sb_month from sb_ympc where sb_ym like '" + cboY.Text.Substring(0, 4) + "%' order by sb_month desc";
DataSet ds = SqlHelp.GetDataSet(sql);
foreach (DataRow dr in ds.Tables[0].Rows)
{
cboM.Properties.Items.Add(dr["sb_month"].ToString());
}
cboM.SelectedIndex = 0;
}
/// <summary>
/// 得到批次
/// </summary>
private void BindPC()
{
cboPC.Properties.Items.Clear();
string sql = "select sb_pc from sb_ympc where sb_ym='" + cboY.Text.Substring(0, 4) + cboM.Text.Substring(0, 2) + "' order by sb_pc";
DataSet ds = SqlHelp.GetDataSet(sql);
foreach (DataRow dr in ds.Tables[0].Rows)
{
cboPC.Properties.Items.Add(dr["sb_pc"].ToString());
}
cboPC.SelectedIndex = 0;
}
/// <summary>
/// 年份下拉列表框改变事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void cboY_SelectedIndexChanged(object sender, EventArgs e)
{
BindMonth();
CheckChange();
}
/// <summary>
/// 月份下拉列表框改变事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void cboM_SelectedIndexChanged(object sender, EventArgs e)
{
BindPC();
CheckChange();
}
/// <summary>
/// 批次下拉列表框改变事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void cboPC_SelectedIndexChanged(object sender, EventArgs e)
{
CheckChange();
} /// <summary>
/// 检查下拉列表框的值是否改变,改变的话更新
/// </summary>
private void CheckChange()
{
string _sb_ym = cboY.Text.Substring(0, 4) + cboM.Text.Substring(0, 2);
string _sb_pc = cboPC.Text;
if (_sb_ym != sb_ym || _sb_pc != sb_pc)
{
sb_ym = _sb_ym;
sb_pc = _sb_pc;
OnMyChange();//触发这个方法
}
}
}
}

这个图片是用户控件的截图:

下面是调用用户控件窗体的代码:

  private void frmStart_Load(object sender, EventArgs e)
{
//给控件绑定事件
conYMPC1.MyChange += new UserControls.conYMPC.MyChangeEventHandler(aa);
} void aa()
{
MessageBox.Show("申报年月:" + conYMPC1.Sb_ym + " 申报批次:" + conYMPC1.Sb_pc);
}

这样在改变用户控件中的值的时候,在窗体终究可以监听到这个事件什么时候触发。

C# winform中自定义用户控件 然后在页面中调用用户控件的事件的更多相关文章

  1. 回发或回调参数无效。在配置中使用 pages enableEventValidation=true 或在页面中使用 %@ Page EnableEventValidation=true % 启用了事件验证

    WebForm中回发或回调参数无效问题的解决 解决 .NET中回发或回调参数无效问题的解 该错误的详细提示信息为: 回发或回调参数无效.在配置中使用 <pages enableEventVali ...

  2. 回发或回调参数无效。在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page EnableEventValidation="true" %> 启用了事件验证。

    问题补充: “/Source”应用程序中的服务器错误. 回发或回调参数无效.在配置中使用 <pages enableEventValidation="true"/> 或 ...

  3. jQuery 中使用 DOM 操作节点,对页面中的表格实现增、删、查、改操作

    查看本章节 查看作业目录 需求说明: 在 jQuery 中使用 DOM 操作节点,对页面中的表格实现增.删.查.改操作 点击"增加"超链接时,将表格中的第一条数据添加到表格的末尾 ...

  4. 在Struts2框架中使用OGNL表达式(在jsp页面中使用OGNL表达式)

    1. Struts2引入了OGNL表达式,主要是在JSP页面中获取值栈中的值 2. 具体在Struts2中怎么使用呢?如下步骤 * 需要先引入Struts2的标签库(在JSP页面的最上面位置) > ...

  5. angular4 动态Form中获取表单字段并在页面中使用的方法

    主要有两种方式 第一种 使用get属性 页面中使用如下: 第二种 使用普通方法事件  页面中使用如下 *转载请附出处

  6. 033. asp.netWeb用户控件之二将页面转换成web控件和使用Web控件显示热点新闻

    访问Web用户控件的属性 ASP.NET提供的各种服务器控件都有其自身的属性和方法,程序开发人员可以灵活地使用服务器控件中的属性和方法开发程序.在用户控件中,程序开发人员也可以自行定义各种属性和方法, ...

  7. 在ASP.NET MVC 3 中自定义AuthorizeAttribute时需要注意的页面缓存问题

    一.ASP.NET MVC中使用OutputCache实现服务器端页面级缓存 在ASP.NET MVC中,假如我们想要将某个页面(即某个Action)缓存在服务器端,可以在Action上标上以下特性: ...

  8. Servlet从本地文件中读取图片,并显示在页面中

    import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpSer ...

  9. 关于在c#中引用外部dll文件,在页面中找不到命名空间

    最近在项目中碰到这样的问题,经过搜索,发现是vs2010的版本不对,VS默认的版本是.NET Framework 4 Client Profile,需要将他更改为.NET Framework 4 版本 ...

随机推荐

  1. lspci能看到ifconfig -a看不到网卡

    随着宽带技术的快速发展,服务器使用万兆网卡的概率越来越高.最近装了几台服务器都用的万兆网卡,为了图便宜,网卡和模块都是淘宝上买的,这部还真遇到不少问题. 我的服务器都是centos6.4 64位的,网 ...

  2. apache shiro整合spring(一)

    apache shiro整合spring 将shiro配置文件整合到spring体系中 方式一:直接在spring的配置文件中import shiro的配置文件 方式二:直接在web.xml中配置sh ...

  3. 个人学习jQuery笔记

    1.$(“#div1”).text()是获取id为div1的文本内容,也可以填充值 $(“#div1”).html() 是获取id 为div1的HTML内容值 也可以填充值 2.$(“#div1”)是 ...

  4. C# 设计模式巩固笔记 - 建造者模式

    前言 写给自己-贵在坚持.建造者模式不复杂,但是想个形象的例子好难. 介绍-建造者模式 定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 实现 建造者模式主要是应对复杂 ...

  5. VirtualBox安装Redhat9.0

    1.准备软件 虚拟机:VirtualBox-4.3.8-92456-Win.exe RedHat:shrike-i386-disc1.iso     shrike-i386-disc2.iso     ...

  6. Datastage8.5导入导出DS作业例子

    以下为Datastage8.5的命令行方式的导入和导出,直接登陆服务器执行如下命令即可.不是Datastage客户端的导入和导出,使用命令行方式的好处是:可以将该命令使用shell脚本进行调用导入和导 ...

  7. Redis数据结构:字典(hash表)

    使用场景: # set person name "tom" # set person name "jerry" 1. 字典结构: 哈希表数据结构 typedef ...

  8. 【LeetCode 67_字符串_算术运算】Add Binary

    string addBinary(string a, string b) { int alen = a.size(); int blen = b.size(); ) return b; ) retur ...

  9. windows的虚拟磁盘(vhd,vhdx)使用

    以前一直使用u盘或者移动硬盘接上usb直接拷贝文件,发觉速度一般.而且一般只有一个盘,分类也很不方便. 后来发现windows的虚拟磁盘可以解决我的问题... 经过一段时间的使用后发觉使用虚拟磁盘的方 ...

  10. Java基础学习-常见API

    package commonAPIs; /*java.lang 类 Object java.lang.Object public class Object类 Object 是类层次结构的根类.每个类都 ...