Tag: mouseevent

同时检测鼠标左键和右键?

我正在重新制作Windows Minesweeper(来自XP),他们所包含的内容是,如果您同时使用鼠标左键单击带有尽可能多的标记的数字,则会显示该数字周围的所有其他隐藏的图块。 我很难说在同一时间同时按下左右鼠标按钮……我正在使用一对bool,每个按钮一个带有OnMouseDown和OnMouseUp事件但是如果是2个按钮在同一时间(或非常接近)单击,然后只有一个MouseDown事件关闭而另一个没有…如果您单击并按住其中一个按钮然后单击并按住另一个,代码可以正常工作。 有没有更好的方法来检测这种“双重”点击? 编辑: 好吧,小故事为什么我把它搞砸了(它一直都有效)。 我有一个运行Windows 7的macbook pro。对于那些不知道的人,macbook pro只有一个鼠标按钮栏,通常会留下点击,但是如果你放下2个手指就可以点击右键,这样你就可以’两者都做(并且没有中间点击)。 所以我正在构建我的应用程序并将其发送给我的朋友,他告诉我它不起作用,所以我发布了这个问题。 我终于决定在我的另一台笔记本电脑上试用它,带有2个鼠标按键的戴尔XPS ……一旦它在那里工作,我将它传递给其他朋友,他们确认它有效。 我不知道我的第一个朋友是如何搞砸了,但故事的道德是不要买任何苹果。 至少那是我得到的道德。

如何捕获(WPF)窗口之外发生的鼠标事件?

我有一个Window元素,其WindowStyle=”None”和AllowsTransparency=”True” ,因此它没有标题栏并支持透明度。 我希望用户能够通过左键单击窗口中的任意位置并拖动来将窗口移动到屏幕上的任何位置。 只要按下鼠标左键,窗口就会随鼠标一起拖动。 我能够使用这个function有一个例外:当鼠标移动到窗口之外时(例如当在窗口边缘按下鼠标左键并且鼠标移动时),窗口不再捕获鼠标位置,不随鼠标拖动。 以下是我用来完成工作的代码隐藏代码: public Point MouseDownPosition { get; set; } public Point MousePosition { get; set; } public bool MouseIsDown { get; set; } private void window_MyWindowName_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { MouseDownPosition = e.GetPosition(null); MouseIsDown = true; } private void window_MyWindowName_MouseMove(object sender, MouseEventArgs e) { if (MouseIsDown) { MousePosition = e.GetPosition(null); Left […]

控制台应用程序在鼠标单击时冻结

我有一个非常简单的C#控制台应用程序,它显示一些文本和循环等待输入,直到按下转义键或提供超时时间。 using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading; namespace SampleApp { public static class Program { public static void Main (string [] args) { var key = new ConsoleKeyInfo(); var watch = Stopwatch.StartNew(); var timeout = TimeSpan.FromSeconds(5); Console.WriteLine(“Press escape to return to the previous screen…”); Console.WriteLine(); do { Console.WriteLine(“This screen […]

Panel中的MouseEnter和MouseLeave事件及其子控件

我有一个包含子控件的Panel 。 如果我处理Panel的MouseEnter和MouseLeave事件及其子项的MouseEnter和MouseLeave事件, MouseLeave以下顺序引发事件: Panel.MouseEnter Panel.MouseLeave Child1.MouseEnter Child1.MouseLeave Panel.MouseEnter Panel.MouseLeave 但我需要以下顺序: Panel.MouseEnter Child1.MouseEnter Child1.MouseLeave Panel.MouseLeave 那可能吗?

有没有办法检测用户控件外的鼠标点击?

我正在创建一个自定义下拉框,我想在下拉框外单击鼠标时进行注册,以便隐藏它。 是否可以检测到控件外的点击? 或者我应该在包含的表单上制作一些机制,并在任何下拉框打开时检查鼠标点击?

发送鼠标和键盘事件

我正在开发一个必须将一些键或鼠标事件发送到活动窗口的应用程序。 我正在使用这个类: 鼠标 using System.Runtime.InteropServices; using System.Windows.Forms; namespace Mouse { public static class VirtualMouse { // import the necessary API function so .NET can // marshall parameters appropriately [DllImport(“user32.dll”)] static extern void mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo); // constants for the mouse_input() API function private const int MOUSEEVENTF_MOVE = 0x0001; […]

控制台应用程序鼠标单击XY坐标检测/比较

我有一个游戏,我正在C#控制台应用程序中工作,纯粹作为练习,然后继续更好的方法。 与使用内置按钮function的Windows窗体应用程序相反,我正在努力抓住光标位置(我知道该怎么做)并将其与控制台应用程序内部的一些区域进行比较,如下所示:也许像素位置,但我也不知道是否有某种内置单位的空间而不是像素(这最后一位是我无法想象的部分)。 PS我知道这是一般性的,没有代码已经提供,但我不觉得它是需要的,因为我要求的是如何在控制台应用程序中获取XY坐标的简要说明,并将它们粘贴在int中变量。 提前谢谢了! :d

控件如何在该控件外部处理鼠标单击?

我正在编写一个自定义控件,我希望控件在用户点击控件时从编辑状态切换到正常状态。 我正在处理LostFocus事件,这有助于当用户标记或者点击另一个可聚焦的控件时。 但如果他们没有点击Focusable,它就不会切换出它的编辑状态。 所以我有两个解决方案: 当它进入编辑状态时,将树向上移动到最顶层元素,并为MouseDownEvent添加处理程序(并处理“已处理”事件)。 在处理程序中,我将控件从其编辑状态中踢出,并从最顶层的元素中删除处理程序。 这似乎有点像黑客,但它可能会运作良好。 示例代码: private void RegisterTopMostParentMouseClickEvent() { _topMostParent = this.FindLastVisualAncestor(); if ( _topMostParent == null ) return; _topMostParent.AddHandler( Mouse.MouseDownEvent, new MouseButtonEventHandler( CustomControlMouseDownEvent ), true ); } private void UnRegisterTopMostParentMouseClickEvent() { if ( _topMostParent == null ) return; _topMostParent.RemoveHandler( Mouse.MouseDownEvent, new MouseButtonEventHandler( CustomControlMouseDownEvent ) ); _topMostParent = null; } 使用Mouse.PreviewMouseDownOutsideCapturedElement并向我的控件添加处理程序。 在处理程序中,我将控件从其编辑状态中踢出。 […]

如何检测鼠标是否在整个表单和子控件内?

我需要检测用户何时将鼠标移动到Form及其所有子控件上以及何时离开Form。 我尝试了Form的MouseEnter和MouseLeave事件,我尝试了WM_MOUSEMOVE & WM_MOUSELEAVE和WM_NCMOUSEMOVE和WM_NCMOUSELEAVE对的Windows消息,但似乎没有任何工作,因为我想… 我的大多数表格都被各种各样的儿童控件占据,没有太多客户区可见。 这意味着如果我非常快速地移动鼠标,则不会检测到鼠标移动,尽管鼠标位于窗体内。 例如,我有一个停靠在底部,桌面和TextBox之间的TextBox,只有一个非常小的边框。 如果我快速将鼠标从底部移动到TextBox中,则不会检测到鼠标移动,但鼠标位于TextBox内部,因此位于Form内部。 我怎样才能实现我的需要?

除非我移动光标,否则SendInput不会执行鼠标单击按钮

除非我移动光标,否则SendInput不会执行鼠标单击按钮。 我很感激对这一个的帮助,因为我似乎无法绕过它。 我有一个程序,在前景窗口上执行鼠标单击,我在其中使用SendInput模拟鼠标左键单击。 问题是,如果我将光标移动到点击位置而不是SendInput将进行点击,但是如果我不移动光标而不是没有点击发生,即使通过我传递x和y指向MouseInputData。 我想执行鼠标左键而不需要实际移动光标。 贝娄是我的课程(相当简单和直接前进) namespace StackSolution.Classes { public static class SendInputClass { [DllImport(“user32.dll”, SetLastError = true)] static extern uint SendInput(uint nInputs, ref INPUT pInputs, int cbSize); [DllImport(“user32.dll”)] static extern bool SetCursorPos(int X, int Y); [DllImport(“user32.dll”)] [return: MarshalAs(UnmanagedType.Bool)] static extern bool GetCursorPos(out Point lpPoint); [StructLayout(LayoutKind.Sequential)] struct INPUT { public SendInputEventType type; public MouseKeybdhardwareInputUnion mkhi; […]