以下是我以前写的自定义控件,公布了事件~~~你自己研究一下
using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows.Forms;namespace NexSmart.NexCash.UI.DataCommand
{
/// <summary>
/// DataOperate 的摘要说明。
/// </summary>
public delegate void Add();
public delegate void Del();
public delegate void Edit();
public delegate void Cancel();
public delegate void Save();
/// <summary>
/// 自定义控件,用于数据操作
/// </summary>
public class DataOperate : System.Windows.Forms.UserControl
{
public event Add AddEvent;
public event Del DelEvent;
public event Edit EditEvent;
public event Cancel CancelEvent;
public event Save SaveEvent; private bool blnDel,blnEdit,blnCancel,blnAdd,blnSave;
private string strAddText = "增 加";
private string strEditText = "修 改";
   
private System.Windows.Forms.Button butAdd;
private System.Windows.Forms.Button butDel;
private System.Windows.Forms.Button butEdit;
private System.Windows.Forms.Button butCancel;
private System.Windows.Forms.Button butSave; #region "control property"
/// <summary>
/// 设置删除按钮的Enable属性
/// </summary>
public bool DelButtonEnable
{
get
{
return blnDel;
}
set
{
blnDel = value;
butDel.Enabled = blnDel;
}
}
/// <summary>
/// 设置编辑按钮的Enable属性
/// </summary>
public bool EditButtonEnable
{
get
{
return blnEdit;
}
set
{
blnEdit = value;
butEdit.Enabled = blnEdit;
}
} /// <summary>
/// 设置取消按钮的Enable属性
/// </summary>
public bool CancelButtonEnable
{
get
{
return blnCancel;
}
set
{
blnCancel = value;
butCancel.Enabled = blnCancel;
}
} /// <summary>
/// 设置增加按钮的Enable属性
/// </summary>
public bool AddButtonEnable
{
get
{
return blnAdd;
}
set
{
blnAdd = value;
butAdd.Enabled = blnAdd;
}
} /// <summary>
/// 设置保存按钮的Enable属性
/// </summary>
public bool SaveButtonEnable
{
get
{
return blnSave;
}
set
{
blnSave = value;
butSave.Enabled = blnSave;
}
}
/// <summary>
/// 设置增加按钮的Text属性
/// </summary>
public string AddButtonText
{
get
{
return strAddText;
}
set
{
strAddText = value;
butAdd.Text = strAddText;
}
} /// <summary>
/// 设置编辑按钮的Text属性
/// </summary>
public string EditButtonText
{
get
{
return strEditText;
}
set
{
strEditText = value;
butEdit.Text = strEditText;
}
} #endregion
/// <summary> 
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null; public DataOperate()
{
// 该调用是 Windows.Forms 窗体设计器所必需的。
InitializeComponent();
blnCancel = false; // TODO: 在 InitializeComponent 调用后添加任何初始化 } /// <summary> 
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
} #region 组件设计器生成的代
private void butAdd_Click(object sender, System.EventArgs e)
{
             

if(butAdd.Text == "增 加")
{

butAdd.Text = "增加完毕";
butDel.Enabled = false;
butEdit.Enabled = false;
butCancel.Enabled = false;
butSave.Enabled = false; }
else
{
butAdd.Text = "增 加";
butAdd.Enabled = true;
butCancel.Enabled = true;
butSave.Enabled = true;
butDel.Enabled = true;
butEdit.Enabled = true;
} try
{
AddEvent();
}

catch (Exception  ex)
{
   MessageBox.Show( ex.ToString() );
}
           

} private void butDel_Click(object sender, System.EventArgs e)
{
blnCancel = true; //只要点击过该按扭,取消键就有效
butAdd.Enabled = true;
butCancel.Enabled = true;
butSave.Enabled = true;
butDel.Enabled = false;
// butEdit.Enabled = false; try
{
DelEvent();
}
catch
{
}
} private void butEdit_Click(object sender, System.EventArgs e)
{
blnCancel = true; //只要点击过该按扭,取消键就有效
if( butEdit.Text == "修 改")
{
butEdit.Text = "修改完毕";
butAdd.Enabled = false;
butCancel.Enabled = false;
butSave.Enabled = false;
butDel.Enabled = false;
}
else
{
butEdit.Text = "修 改";
butAdd.Enabled = true;
butCancel.Enabled = true;
butSave.Enabled = true;
butDel.Enabled = false;
butEdit.Enabled = true;
}

try
{
EditEvent();
}
catch
{

}
} private void butCancel_Click(object sender, System.EventArgs e)
{
butAdd.Enabled = true;
     butDel.Enabled = false;
// butEdit.Enabled = false;
// butCancel.Enabled = false;
// butSave.Enabled = false;
try
{
CancelEvent();
}
catch(System.Exception err)
{
MessageBox.Show(err.Message.ToString());
}
} private void butSave_Click(object sender, System.EventArgs e)
{
butAdd.Enabled = true;
butDel.Enabled = false;
// butEdit.Enabled = false;
     butCancel.Enabled = false;
butSave.Enabled = false;
try
{
SaveEvent();
}
catch
{

}
}


}
}

解决方案 »

  1.   

    //定义事件的委托
            public delegate void ButtonClickEventHandler(object sender,System.EventArgs e); //定义事件
            public event ButtonClickEventHandler ButtonClick;// 以下是处理事件的方法
    private void buttonBack_Click(object sender, System.EventArgs e)
    {
        ButtonClick(sender,e);
    }----------------
    主页面:
    private void InitializeComponent()
    {    
    this.Load += new System.EventHandler(this.Page_Load);
             this.LiYunQiStepPanelControl11.ButtonClick += new ButtonClickEventHandler(this.???);//tab
    }
    既然已经把属性都public了,那么就不用把它作为方法的参数,直接在主页面访问就可以
    string title = LiYunQiStepPanelControl1.TitlelabelText;
      

  2.   

    >>>>Eddie005(暴走005) 
    谢谢
    按照你教的方法,修改后运行正常。
    我的错误在于定义事件委托时定义了一个字符型入参,而实际上应该是事件(大概是这回事吧)另外,经常看到(object sender, System.EventArgs e)而且这里的e还有很多不同方法和属性
    譬如dataGrid.Click等,能给解释一下(object sender, System.EventArgs e)到底是什么意思么?
    常用的方法是什么?
    分不太多,不好意思,先谢。
      

  3.   

    sender是触发事件的东西,可以是任何继承object的,例如
    void Button1_Click(object sender, System.EventArgs e)
    {
       Button tmp = (Button)sender;
    }
    void DropDownList1_SelectedIndexChanged(object sender, System.EventArgs e)
    {
       DropDownList tmp = (DropDownList)sender;
    }至于System.EventArgs则是用来保存事件数据,.net已经预定义好各种事件委托
    个人觉得其实不用深究,详情参阅.net framework SDK文档很抱歉不能给你讲更多,一方面水平有限,一方面时间有限
      

  4.   

    另外最好不要“(请saucer(思归)、Eddie005(暴走005)以及各位老大帮助)”,我还不够格,会被笑话的,呵呵~~~ (虽然我还是听得蛮开心)