C# winform中自定义用户控件 然后在页面中调用用户控件的事件
2017-02-19 04:50
761 查看
下面是用户控件的代码:
这个图片是用户控件的截图:
下面是调用用户控件窗体的代码:
这样在改变用户控件中的值的时候,在窗体终究可以监听到这个事件什么时候触发。
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中自定义用户控件 然后在页面中调用用户控件的事件
- 关于在c#中创建用户控件后,winform应用程序在调用中无法通过点击用户控件的子控件为其自动添加事件代码的问题
- C# WinForm 用户自定义控件闪烁的问题
- C# winform 用户控件里调用 wcf 发生“ Could not find default endpoint。。。。。。”错误
- 用户控件使用事件与调用页面交互
- saucer(思归)解决的关于:页面A.aspx 动态载入用户自定义控件a.ascx,但a.ascx中的按钮提交后,不执行按钮的事件,而是直接刷新页面
- 使用C#反射实现用户控件调用父页面方法
- 在用户控件中如何调用主页面的事件之页面反射
- 一个aspx页面有2个按钮,都是服务器控件,服务器上的DLL如何知道用户点击了哪个按钮,从而按钮的事件函数被调用
- c#的aspx页面中引用了用户控件,如何相互调用后台方法
- 在用户控件中如何调用主页面的事件之事件委托
- 使用C#反射实现用户控件调用父页面方法
- 页面上调用用户控件的事件
- C# Winform 通过FlowLayoutPanel及自定义的编辑控件,实现快速构建C/S版的编辑表单页面
- C# aspx页面动态加载ascx用户控件 及 利用反射调用
- 用户控件使用事件与调用页面交互
- 在C# WinForm程序中创建控件数组及相应的事件处理
- C# 中用户控件中添加事件和使用
- C#.net中web工程中创建用户控件和被调用的方法
- 页面装载用户控件时的事件顺序