c#自定義控件中事件的處理

字號:


    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    namespace ClientControl
    {
    //1.定義委托
    public delegate void NewsClickEventHandle(object sender,NewsEventArg args);
    public partial class NewsStage : Control
    {
    //2.定義事件
    public event NewsClickEventHandle NewsClicked;
    private Graphics g;
    private bool isMouseOn = false;
    public NewsStage()
    {
    InitializeComponent();
    //3.事件觸發(fā),這樣少了事件注冊,我們在其他窗體中引用控件時(shí)只需要注冊事件和編輯事件處理程序即可,可以對比上一篇博客
    this.Click += new EventHandler(NewsStage_Click);
    this.MouseMove += new MouseEventHandler(NewsStage_MouseMove);
    this.MouseLeave += new EventHandler(NewsStage_MouseLeave);
    }
    void NewsStage_MouseLeave(object sender, EventArgs e)
    {
    isMouseOn = false;
    this.Invalidate();
    }
    void NewsStage_MouseMove(object sender, MouseEventArgs e)
    {
    isMouseOn = true;
    this.Invalidate();
    }
    //新聞被點(diǎn)擊 事件觸發(fā)方法
    void NewsStage_Click(object sender, EventArgs e)
    {
    if (_NewsID>=0&&_NewsTitle!="")
    {
    NewsEventArg myArgs = new NewsEventArg(_NewsID,_NewsTitle);
    NewsClicked(this, myArgs);
    }
    }
    private int _NewsID = 0;
    [Description("新聞ID"), Category("Appearance")]
    public int NewsID
    {
    get { return _NewsID; }
    set
    {
    _NewsID = value;
    this.Invalidate();
    }
    }
    /// <summary>
    /// 新聞標(biāo)題
    /// </summary>
    private string _NewsTitle = "";
    [Description("新聞標(biāo)題"), Category("Appearance")]
    public string NewsTitle
    {
    get { return _NewsTitle; }
    set
    {
    _NewsTitle = value;
    this.Invalidate();
    }
    }
    private Color _MouseOnColor = new Color();
    [Description("鼠標(biāo)劃上的樣色"), Category("Appearance")]
    public Color MouseOnColor
    {
    get { return _MouseOnColor; }
    set
    {
    _MouseOnColor = value;
    }
    }
    protected override void OnPaint(PaintEventArgs pe)
    {
    base.OnPaint(pe);
    g = this.CreateGraphics();
    if (isMouseOn)
    {
    g.DrawString(_NewsTitle, this.Font, new SolidBrush(this._MouseOnColor), new PointF(0, 0));
    }
    else
    {
    g.DrawString(_NewsTitle, this.Font, new SolidBrush(this.ForeColor), new PointF(0, 0));
    }
    }
    protected void Dispose()
    {
    g.Dispose();
    }
    }
    public partial class NewsEventArg : EventArgs
    {
    public int NewsID = 0;
    public string NewsTitle = "";
    public NewsEventArg(int newsID,string newsTitle){
    NewsID = newsID;
    NewsTitle = newsTitle;
    }
    }
    }