如何用鼠标保持和释放来检查TrackBar的滑动情况
我的Winforms程序中有一个跟踪栏,通过将其移动,它将刷新一种巨大的耗时方法.看看此代码: trackBar_ValueChanged(object sender, EventArgs e) { this.RefreshData(); } 此轨道栏有20个步骤.如果用户在我的情况下抓住跟踪栏的滑块并将其从20到0提取,则" RefreshData"将被执行20次,尽管它显示出正确的数据时显示正确的数据,即" refreshdata'ligne value 0,我想做类似的事情它仅在释放跟踪栏滑块时称为" RefreshData" 实现这一目标的任何帮助和技巧都将被申请! 谢谢. 解决方案 我以前做过此类操作的方式是使用计时器.每当跟踪栏的值更改时,重置计时器,以便以500ms(或适合您的任何内容)发射.如果用户在计时器启动之前更改值,它将再次重置,这意味着即使多次更改,计时器也只能触发一次. 这里唯一要观看的是计时器将在另一个线程上启动,您将无法从
0 2024-04-21
编程技术问答社区
通过平移和缩放计算出正确的光标位置
我已经解决了这个问题已有大约一个小时了. 我有一个支持平移和缩放的视口,通过存储X和Y轴的偏移来处理平移.变焦只是从0.2到14的浮点. 我的问题是,我需要能够将用户点击在视口上的东西放置,但是当我放大和pan时,鼠标坐标是不正确的.我无法弄清楚如何正确计算鼠标坐标. 这是一个显示我到目前为止所拥有的图像: https://i.stack.imgur. com/3hkhh.png 您可以看到鼠标原点始终位于视口组件的左上角.您可以在图像的左下角看到pan x和y偏移量以及缩放值.我还添加了与视口左上角有关的鼠标坐标的示例. 现在,由于该图像中它当前已在我放置的对象中被缩放. 谢谢您的时间! 用解决方案编辑的解决方案: void Viewport_MouseClick(object sender, MouseEventArgs e){ Point mousePosition = new Point((int)((e.X - Pan.X
0 2024-04-21
编程技术问答社区
鼠标点击时获取鼠标坐标
我在下面使用此代码,但它不像我想要的那样工作,也不知道如何实际制作. 我想做的就是获取鼠标坐标onClick,但是在用户确认消息框之后发生. messageBox>用户单击OK>用户单击屏幕上的任何地方>获取坐标 我应该从"确定按钮"开始计时器?我在计时器代码上做什么才能等待鼠标响应? 这是我现在拥有的(在我单击"确定"按钮时显示鼠标位置): private void button12_Click(object sender, EventArgs e) { if (MessageBox.Show("Pick a position after clicking OK", "OK", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) == DialogResult.OK) { // user clicked ok MouseEventArgs me = (Mouse
0 2024-04-20
编程技术问答社区
如何在不使用鼠标的情况下执行虚拟鼠标点击C#?
我想在Windows应用程序中进行单击,而无需使用真实的鼠标(因此我可以最大程度地减少它).就像一个机器人一样. 我该怎么做? 解决方案 我认为您要寻找的功能是PostMessage [DllImport("user32.dll", SetLastError = true)] public static extern bool PostMessage(int hWnd, uint Msg, int wParam, int lParam); 您可以阅读更多有关它的信息此方法基于您使用的过程句柄(HWND) ,直接在与程序关联的输入队列上发布消息 您还可以使用此功能通过发布按钮事件来发送鼠标单击,例如: PostMessage(hWnd, WM_LBUTTONDBLCLK, 0, l); 可以找到有关这些按钮事件的更多信息在MSDN . 我敢肯定,如果您在Internet上搜索样本中的鼠标鼠标事件,您会发现很多 其他解决方案 您可以使用计时
0 2024-04-20
编程技术问答社区
c# wpf重叠的控件不能接收鼠标事件
我正在建立一个帆布控制.这个根画布有几个重叠的孩子(也有帆布).这样做是这样,每个孩子都可以处理自己的图纸,然后我可以将最终结果与孩子组合结合在一起,以获得所需的行为. 就渲染而言,这非常有效.但是,这与鼠标事件不太好.鼠标事件的工作方式如下(以PreviewMouseMove为例): 1-如果根画布在鼠标下,则火灾事件 2-检查所有孩子,如果一个人在鼠标下,请停止 因此,我只会添加的第一个孩子会收到鼠标移动事件.该事件并非因为他们重叠而传播给所有儿童. 为了克服这一点,我尝试了以下内容: 1-覆盖根画布中的鼠标事件 2-对于每个事件 3-对于所有返回有效命中测试结果的孩子(即:在鼠标下,愿意处理事件(Ishittestvisible == true)),??? 这是我被卡住的地方,我以某种方式需要将鼠标事件发送给所有孩子,并停止事件的正常流程,以确保第一个孩子不会接受两次). 通过将raiseevent与孩子们经过的同一事件一起使用,事情似乎有效,但
0 2024-04-19
编程技术问答社区
如何让Windows 8 Metro的滚动查看器对鼠标滚轮做出反应?
我目前使用Metro和C#编写了Windows 8的应用程序.在我的应用程序中,我使用ScrollViewer和GridView的组合来显示我的数据.但是,我的问题是,我该如何用鼠标轮滚动它? 在我的搜索中,我发现了位于system.windows.input中的鼠标轮毂Parameters. 解决方案 " get_pagetranslation"实际上是" pagetranslation "鼠标轮毂上的属性,您可以通过说: 来访问它 wheelParameters.PageTranslation 这个: get_PageTranslation() 是实现Pagetranslation属性的方法的名称,但无法从C#或C ++应用程序访问. 其他解决方案 Winrt中的ScrollViewer确实使用鼠标轮毂可以锻炼.但是,在您的方案中,实际上有两个滚动浏览器,即您创建的一个,以及GridView模板中的一个.这两个冲突. 要解决此问题,我从Gri
0 2024-04-19
编程技术问答社区
c# uwp 指针的位置
在UWP中,我试图获得指针的位置. 我设法在下一个事件中做到了: private void Grid_PointerMoved(object sender, PointerRoutedEventArgs e) { PointerPoint point = e.GetCurrentPoint(mainGrid); var x = point.Position.X; var y = point.Position.Y; } 以这种方式将一直被解雇.因此,我需要一些财产来获得该职位.我发现了这个: var pointerPosition = Windows.UI.Core.CoreWindow.GetForCurrentThread().PointerPosition; 但并不总是返回正确的位置. 任何其他可以获取当前鼠标位置的属性? 解决方案 var pointerPosition
2 2024-04-19
编程技术问答社区
鼠标在扩展显示器上的位置
我在这个特定问题上找不到任何东西,所以它去了! 我有兴趣通过编程更改鼠标光标的位置. Cursor.Position = new Point(x, y); 使用单个显示器按预期工作.但是,当我插入第二个并选择扩展桌面时,更改光标的坐标仅相对于主屏幕工作. 那么,有人知道如何告诉光标我想移至其他屏幕吗? 解决方案 获取所需屏幕的宽度和高度,并相对于它移动光标 int width=Screen.AllScreens[1].Bounds.Width; int height=Screen.AllScreens[1].Bounds.Height; Cursor.Position=new Point(width-x,height-y);
0 2024-04-17
编程技术问答社区
鼠标移动速度太快,无法捕捉事件
这与:先前的问题 ,但是问题是我的代码只有在我将鼠标移动真的很快和周围的tablayoutpanel时才失败. 由于快速鼠标运动,C#或Windows可能会报告/触发事件吗? 如果是这样,我该如何纠正? 谢谢.我希望这不是双重发布.如果是这样,道歉. 解决方案 我解决了问题.这是重新排序逻辑流的问题. 溶液跨越3个鼠标事件鼠标,Mousemove,Mouseleave. private PictureBox HomeLastPicBox = null; private TableLayoutPanelCellPosition HomeLastPosition = new TableLayoutPanelCellPosition(0, 0); private void HomeTableLayoutPanel_MouseMove(object sender, MouseEventArgs e) {
0 2024-04-17
编程技术问答社区
按键+鼠标移动窗口(如Linux的ALT+鼠标下移)。
简单,我想移动一个窗口,按下Alt+鼠标,例如Linux OS(Alt+Drag). 可以将Win32 API(移动API)传递到感兴趣的窗口? 我有一个Windows Services,可以挂接键(特定于特定的ALT按钮). 当按下 alt 键并验证鼠标下降事件时,我想在任何地方单击窗口,不仅在标题栏上! 目前,我以这种方式移动我的表单窗口: using System.Runtime.InteropServices; [DllImport( "user32.dll", CharSet = CharSet.Auto, SetLastError = false )] static extern IntPtr SendMessage( IntPtr hWnd, uint Msg, int wParam, int lParam ); [DllImportAttribute( "user32.dll", CharSet = CharSet.Auto, SetLastEr
0 2024-04-16
编程技术问答社区
鼠标运动捕捉
我有一个使用Showdialog方法打开模态形式的应用程序. 显示此表格后,即使光标在表单外面,我也想捕获鼠标的运动. 如何捕获鼠标运动?我看到了带有捕获属性的东西,但我无法设法使它起作用. [编辑] 如果鼠标在表格外移动,我想通知 解决方案 Capture属性是正确的方法,但是有一些局限性. 只有前景窗口才能捕获鼠标 鼠标捕获可以由系统的其他部分禁用 Win32 API函数SetCapture每次"鼠标向上"事件都会重置.我认为这也适用于.net. 请参阅捕获鼠标时,您将收到通常的事件,但带有更宽的鼠标坐标范围(例如,如果鼠标剩下鼠标,则X位置为负X位置) ) 鼠标捕获是脆弱的,因为它的全球性质.检查是否还有其他方法可以处理某些事件.也许MouseLeave或MouseEnter事件在您的情况下就足够了. 其他解决方案 您只能使用静态属性 control.souseposition . 其他解决方案 您可以使用光标属性读取光标
0 2024-04-16
编程技术问答社区
使用C#的鼠标钩子
我正在尝试模拟"硬件"鼠标单击,因为似乎某些软件阻止了来自PostMessage的输入.我知道有SendInput,但这不是一个选择,因为我还需要在背景窗口中兼容.该解决方案似乎是一个低级的鼠标钩,但我已经搜索了,除了登录器,没有操纵移动鼠标,单击等.用作假鼠标驱动程序的C ++/C包装器. http://support.microsoft.com/kb/kb/318804 它似乎没有任何进一步的帮助. 任何帮助:) 解决方案 不确定可能是什么"某些软件",但可以肯定的是,UAC使您无法将消息戳入高架程序的窗口中.它称为UIPI,用户界面特权隔离. 通常,使用后的伪造输入根本无法正常工作.对于键盘输入而言,这尤其是一个问题,但鼠标输入也有麻烦.没有一个好方法可以更改键盘状态以进行另一个过程.当程序在处理输入消息时检查偏移状态时,这很重要.许多人做. 唯一真正的解决方案是使用sendInput()模拟输入.现在您有一个要解决的重点问题. 其他解决方案
0 2024-04-16
编程技术问答社区
为什么Unity3D中的摄像机会围绕Z轴旋转?
我在Unity3D中有一个主摄像头我想根据鼠标输入而旋转,因此它可以作为第一人称视频游戏,在其中您可以根据要查看的位置移动鼠标at. 相机的启动值(Uneventor Tab In Unity中的转换选项卡)为: 位置:x = -1,y = 1,z = -11. 旋转:x = 0,y = 0,z = 0. 比例:x = 1,y = 1,z =1. 我为主相机添加了一个脚本组件.这是以下类: using UnityEngine; using System.Collections; public class CameraMove : MonoBehaviour { float deltaRotation = 50f; // Use this for initialization void Start () { } // Update is called once per frame void U
0 2024-04-16
编程技术问答社区
窗口中的自动完成文本框和 "输入时隐藏指针"。
如何通过应用程序禁用"键入指针"选项?我对光标隐藏的问题有问题,而不会在不按逃生或失去窗口焦点的情况下将其恢复.该应用程序已用C#编写,并使用WPF.不需要技术特定的答案,因为使用任何技术可能是可能的. 这是场景:用户可以输入文本框,并在盒子下方显示自动完成列表.但是,一旦用户开始键入,他/她将无法从下拉菜单中选择一个项目,因为没有鼠标光标. 我注意到Firefox没有这种行为.例如,在地址栏中输入URL时,鼠标光标永远不会消失.我还看到过这种行为的其他地方,所以我知道必须有可能. 任何帮助都非常感谢! 解决方案 我通过设置断点,即首次在文本框中键入文本框时,WPF读取public SystemParameters.MouseVanish属性,该属性调用SystemParametersInfo(SPI_GETMOUSEVANISH, ...)以使鼠标消失.随后的调用SystemParameters.MouseVanish使用缓存值. 两个可能的解决方案:
0 2024-04-16
编程技术问答社区
WinForms光标只在一个表单上隐藏
我有一个带有2个同时可见表格的C#应用​​程序,并且当它仅在其中一个上结束时,我需要隐藏鼠标光标.如果我使用cursor.hide(),则对它们都应用了更改. 解决方案 您可以制作"空白"光标,并设置myForm.Cursor = blankCursor;这将使该特定表单显示一个特定的光标,这可能是完全透明的. 其他解决方案 您需要使用MouseEnter>和MouseLeave事件来实现此逻辑,每个形式都像: private void frm1_MouseEnter(object sender, EventArgs e) { Cursor.Hide(); } private void frm1_MouseLeave(object sender, EventArgs e) { Cursor.Show(); } 在应隐藏光标的表单上执行abobe,并将其添加到应使光标可见的表格中:
0 2024-04-16
编程技术问答社区
如何在基于WPF的应用程序中限制光标的移动?
我正在使用WPF应用程序,更具体地说是带有可拖动元素的画布. 一旦将项目拖动,我想将光标移动的范围限制为在拖动物品的画布内部. 可以启动阻力的事件如下所示 private void WidgetCanvas_PreviewHeaderLeftMouseDown(object sender, MouseButtonEventArgs e) { e.Handled = true; ... logic to figure out if this is a valid drag, blah blah blah ... this.IsDragging = true; // TODO: clip the available cursor movement to actual width of Canvas } 在预览鼠标上,我想简单地将光标移动回到正​​常状态. 一旦我开始拖动(PreviewMouseMove),我将监视鼠标的
0 2024-04-16
编程技术问答社区
不使用System.Windows.Forms设置鼠标位置
是否有一种方法可以在不使用system.windows.forms.cursor的情况下操纵鼠标位置?类似于Interop? 原因是我们使用的是一个专业的.NET子集,该子集无法包括System.Windows.Forms. 解决方案 糟糕的糟糕,请阅读问题太快,这是正确的Pinvoke Call [DllImport("user32.dll")] static extern bool SetCursorPos(int X, int Y); 来源: http://www.pinvoke.net/defake.net/default.aspx/user32.setcursorpos 其他解决方案 private void MoveCursor() { // Set the Current cursor, move the cursor's Position, // and set its clipping rectangle to the for
2 2024-04-15
编程技术问答社区
ComboBox在下拉时如何捕捉鼠标?
我正在尝试建模Combobox下拉菜单的行为(或其他下拉菜单,包括上下文菜单),即使您单击其他任何地方,下拉菜单都关闭,即使是无法集中的东西. 我尝试订阅诸如Mousecapturechanged,Lostfocus和离开之类的活动.我有一个自定义的usercontrol,它是一个下拉列表,我只想在用户单击其他任何地方时将其关闭. 这似乎在许多控件中都完成了,所以如果没有简单的方法来做. 到目前为止,我可以提出的过复杂的方法是使用PinVoke和SetCapture()函数,或者创建MessageFilter.如果这些是唯一的选择,我不确定哪个更好. 解决方案 组合蛋白是由2个控件构建的. 基础 - 当不活动(控制) 时可见 下拉列表 - 在编辑模式或列表选择模式(窗口或表单)中可见 通常可见基座.当用户单击ComboBox时,基本控制隐藏并显示了下拉列表控件.此开关是在后台完成的,因此对于用户来说,控件似乎只是扩展了. 您要捕获的事件是通过下拉
0 2024-04-15
编程技术问答社区