MouseEventArgs

spmzfz 2017-06-07 12:42:11
我编写一个自定义控件,在自定义控件中有UserControl1_MouseMove(object sender, MouseEventArgs e)事件,我在里面使用了一个变量(int) SelectData,并且这个变量它在运行时随鼠标在控件上的移动而发生变化,然后我想在另外一个项目中使用这个自定义控件,我想在同样的MouseMove()中能够通过e.SelectData 来再次做一些事情。请问在自定义控件项目中如何编码把(int) SelectData 加入到MouseEventArgs e中去?





namespace WindowsFormsControlLibrary1
{
public partial class UserControl1: UserControl
{
public UserControl1()
{
InitializeComponent();
}


private int SelectData;

private void UserControl1_MouseMove(object sender, MouseEventArgs e)
{
//....
//SelectData = ...
}
}
}
...全文
446 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
你需要自定义 e的内容就要继承自EventArgs,这是参数基类,可以任意定义要传递的数据。 同时也要通过自定义event来实现这个事件触发,因为本身的MouseMove中的参数已经满足不了要求,所以就需要额外的event了。 如果已不再使用OnMyMouseMov 最好使用-= 操作符将事件的引用移除掉。
  • 打赏
  • 举报
回复
自定义一个包含selectData的EventArgs,类似:

 public class MyEventArgs : EventArgs
    {
        public int selectData { get; set; }
    }
在 UserControl1 中自定义一个EventHandler,类似:

public event EventHandler<MyEventArgs> OnMyMouseMove;
触发自定义OnMyMouseMove事件,类似:

private void UserControl1_MouseMove(object sender, MouseEventArgs e)
        {
             if(OnMyMouseMove!=null){
                  OnMyMouseMove(this, new MyEventArgs { selectData = 100 });
             }
        }
调用方需要订阅 OnMyMouseMove 事件即可。
xuzuning 2017-06-07
  • 打赏
  • 举报
回复
MouseEventArgs 没有地方容纳额外的属性,所以只能在继承类中加 SelectData 属性 但是鼠标事件是由操作系统触发的,他并不知道有你的 扩展MouseEventArgs 的存在 所以你应该在 UserControl1 中定义一个 event 由使用者订阅
正怒月神 2017-06-07
  • 打赏
  • 举报
回复
把SelectData封装成公开属性。而不是私有变量。
xdashewan 2017-06-07
  • 打赏
  • 举报
回复
MouseMove和SelectData都是私有的,你是如何在另外一个项目中如何使用这个自定义控件的

111,096

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧