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 = ...
}
}
}
...全文
447 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都是私有的,你是如何在另外一个项目中如何使用这个自定义控件的
Microsoft Visual Studio 2010做的C#实时监控鼠标位置和左键点击时的位置实例,主要代码: public class MouseHook { private Point point; private Point Point { get { return point; } set { if (point != value) { point = value; if (MouseMoveEvent != null) { var e = new MouseEventArgs(MouseButtons.None, 0, point.X, point.Y, 0); MouseMoveEvent(this, e); } } } } private int hHook; private const int WM_LBUTTONDOWN = 0x201; public const int WH_MOUSE_LL = 14; public Win32Api.HookProc hProc; public MouseHook() { this.Point = new Point(); } public int SetHook() { hProc = new Win32Api.HookProc(MouseHookProc); hHook = Win32Api.SetWindowsHookEx(WH_MOUSE_LL, hProc, IntPtr.Zero, 0); return hHook; } public void UnHook() { Win32Api.UnhookWindowsHookEx(hHook); } private int MouseHookProc(int nCode, IntPtr wParam, IntPtr lParam) { Win32Api.MouseHookStruct MyMouseHookStruct = (Win32Api.MouseHookStruct)Marshal.PtrToStructure(lParam, typeof(Win32Api.MouseHookStruct)); if (nCode < 0) { return Win32Api.CallNextHookEx(hHook, nCode, wParam, lParam); } else { if (MouseClickEvent != null) { MouseButtons button = MouseButtons.None; int clickCount = 0; switch ((Int32)wParam) { case WM_LBUTTONDOWN: button = MouseButtons.Left; clickCount = 1; break; } var e = new MouseEventArgs(button, clickCount, point.X, point.Y, 0); MouseClickEvent(this, e); } this.Point = new Point(MyMouseHookStruct.pt.x, MyMouseHookStruct.pt.y); return Win32Api.CallNextHookEx(hHook, nCode, wParam, lParam); } } public delegate void MouseMoveHandler(object sender, MouseEventArgs e); public event MouseMoveHandler MouseMoveEvent; public delegate void MouseClickHandler(object sender, MouseEventArgs e); public event MouseClickHandler MouseClickEvent; }

111,096

社区成员

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

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

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