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.事件触发,这样少了事件注册,我们在其他窗体中引用控件时只需要注册事件和编辑事件处理程序即可,可以对比上一篇博客
            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();
        }  

        //新闻被点击  事件触发方法
        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>
        /// 新闻标题
        /// </summary>
        private string _NewsTitle = "";  

        [Description("新闻标题"), Category("Appearance")]
        public string NewsTitle
        {
            get { return _NewsTitle; }
            set
            {
                _NewsTitle = value;
                this.Invalidate();
            }
        }  

        private Color _MouseOnColor = new Color();
        [Description("鼠标划上的样色"), 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;
        }
    }
} 

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c# 控件 自定义控件
, new
, 事件
, this
, using
, system
public
c站、c语言、cf、ch、c罗,以便于您获取更多的相关知识。

时间: 2024-12-06 04:00:13

c#自定义控件中事件的处理的相关文章

控件位置-c#如何让自定义控件中的控件随父控件变化而其位置按比例变化

问题描述 c#如何让自定义控件中的控件随父控件变化而其位置按比例变化 如图,如何让c随着b的变化而变化,b是自定义控件 解决方案 你可以通过dock和anchors控制它的自动位置,你所说的按比例,没明白,感觉你可能需要写代码,在resize事件中处理具体比例 解决方案二: 我做过一个类似的,就是在resize中计算相对应的比例然后缩放控件大小再计算对应位置重新放置控件. 解决方案三: 这个最简单的是用flowlayoutpanel和tablelayoutpanel去布局,子控件dock在里面就

使用DHTML中事件的总结

dhtml 为组件提供事件处理入口,可以极大的提高组件的封闭性,同时又能让组件很好的和外界通信.并且这也是我们已经习惯使用的一种开发模式,.NET.DHTML等都提供了一套完整的事件处理模型.下面是关于使用DHTML中事件的一个总结.   DHTML提供了3种事件的使用方式,它们分别是:   1.Inline HTML: <ELEMENT onXXX='handler'></ELEMENT>   这是最简单最常用的事件绑定方式,不过这里onXXX的值为handler是不太确切的说法

我对C#中事件委托的通俗看法

这是我对C#中事件的通俗看法,比较适合初学者(其实我也是初学者)对C#事件的理解,本人因为刚入门,在学习C#的事件原理时,发现很多书上写得很不好理解,不适合初学者,所以我想在这里谈谈我对它的看法,可能不是很准确,如果说得对的,请大家鼓鼓掌,不对的或是不规范的地方,还请高手帮忙更正一下,谢谢了. 在学C#之前,我看过<JAVA编程思想>,还有一些JAVA的入门级的书籍,其中对事件的讲解,总是用事件监听,事件适配器来举例, 所以我就一直认为,在C#中,RUNTIMING会一直监测每个控件的状态,如

为自定义控件添加自定义事件

事件,委托,总是看起来有点绕,不过本文不介绍这些,只说说如何为自定义控件添加自定义事件. 本文所说的自定义控件,非继承其他现有Microsoft控件或者组合控件,而是完全继承UserControl的 东西. 既然不是继承自其他现有控件或者控件组合,在特定需求下,有添加自定义事件的可能性,或者对继 承自UserControl而得到的事件进行些许扩展,以期以简便的方式得到更丰富的信息等等. 下面简单介绍2个例子,有用之人作为参考,大拿级别的,ignore吧. 例1. 添加完全自定义事件. 需求: 假

WinXP系统中事件查看器怎么打开

  WinXP系统中事件查看器怎么打开          第一:事件查看器怎么打开? 要打开事件查看器,请按照下列步骤操作: 1.单击"开始",然后单击"控制面板".单击"性能和维护",再单击"管理工具",然后双击"计算机管理".或者,打开包含事件查看器管理单元的 MMC. 2.在控制台树中,单击"事件查看器".应用程序日志.安全日志和系统日志显示在"事件查看器"窗口

ios-iphone中事件没有被调用

问题描述 iphone中事件没有被调用 在应用中有几个UIViewController.其中一个willAnimateRotationToInterfaceOrientation 事件调用成功了. 如何让willAnimateRotationToInterfaceOrientation对所以可见视图有效? 解决方案 RootViewController中: - (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientat

请教大神,android中我需要在自定义控件中绘制一个透明的小三角行?

问题描述 请教大神,android中我需要在自定义控件中绘制一个透明的小三角行? 请教大神,android中我需要在自定义控件中绘制一个透明的小三角行,比如我需要在LinearLayout的底部绘制一个透明背景小三角,该怎么绘制呢? 我在绘制的时候将设置成透明背景,绘制小三角不显示,必须要给他设置一个背景才会显示,纠结啊 解决方案 可以定义一个path吧,连接成一个三角形,然后画出来 解决方案二: 让UI给你做一个三角形的透明图 设为背景 解决方案三: path连接成个三角形的话,如果这个自定义

android-Android自定义控件中为Button设置自定义监听器出现空指针。

问题描述 Android自定义控件中为Button设置自定义监听器出现空指针. Android自定义TopBar中给ImageButton设置自定义点击监听器,当点击ImageButton时在listener处出现NullPointerException. 会出错的地方我在后面写了//TODO . 请问为什么会出现listener没有被实例化的情况? 还有为什么在MainActivity中使用findViewById实例化TopBar也会出现不能实例化控件的情况? IDE : Android S

关于JAVA中事件分发和监听机制实现的代码实例

文章标题:关于JAVA中事件分发和监听机制实现的代码实例 文章地址: http://blog.csdn.net/5iasp/article/details/37054171 作者: javaboy2012 Email:yanek@163.com qq:    1046011462     一.场景假设 假设有博客系统中需要实现如下功能: 系统中用户发布文章,修改文章,删除文章时,需要一些相关的操作需要执行. 发布文章后,给好友发送邮件通知,给用户加积分,对文章做全文索引. 修改文章后,给好友发送