Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VB.Net-当用户单击表单外部但未最小化时进行检查_Vb.net_Winforms_Forms_Events - Fatal编程技术网

VB.Net-当用户单击表单外部但未最小化时进行检查

VB.Net-当用户单击表单外部但未最小化时进行检查,vb.net,winforms,forms,events,Vb.net,Winforms,Forms,Events,我正在尝试在VB.NET窗体中创建一个复制粘贴实用程序,从任意位置选择文本,将其拖动到文本框中,然后将其作为纯文本自动复制到剪贴板。我希望将其设置为当窗口打开并单击关闭时,执行此行: CopyBox.SelectAll() 但我尝试过的所有活动都不起作用。我尝试过使用MyBase.LostFocus、MyBase.Leave、MyBase.Deactivate,但当我在表单外单击时,没有一个会被触发。如果我将表单最小化,它们会起作用,但这没有帮助。有没有办法做到这一点?在鼠标按键事件中,检查光

我正在尝试在VB.NET窗体中创建一个复制粘贴实用程序,从任意位置选择文本,将其拖动到文本框中,然后将其作为纯文本自动复制到剪贴板。我希望将其设置为当窗口打开并单击关闭时,执行此行:

CopyBox.SelectAll()

但我尝试过的所有活动都不起作用。我尝试过使用MyBase.LostFocus、MyBase.Leave、MyBase.Deactivate,但当我在表单外单击时,没有一个会被触发。如果我将表单最小化,它们会起作用,但这没有帮助。有没有办法做到这一点?

在鼠标按键事件中,检查光标相对于窗体的位置。如果在外部,只需执行所需的函数

根据我的评论

Declare Auto Function GetAsyncKeyState Lib "user32.dll" (ByVal vKey As Long) As Short

While True
  If GetAsyncKeyState(1) <> 0 Then
        MsgBox("click")
  End If
  System.Threading.Thread.Sleep(150) 
End While
将自动函数GetAsyncKeyState Lib“user32.dll”(ByVal vKey作为Long)声明为Short
虽然是真的
如果GetAsyncKeyState(1)为0,则
MsgBox(“单击”)
如果结束
系统线程线程睡眠(150)
结束时

在鼠标按键事件中,检查光标相对于表单的位置。如果在外部,只需执行所需的函数

根据我的评论

Declare Auto Function GetAsyncKeyState Lib "user32.dll" (ByVal vKey As Long) As Short

While True
  If GetAsyncKeyState(1) <> 0 Then
        MsgBox("click")
  End If
  System.Threading.Thread.Sleep(150) 
End While
将自动函数GetAsyncKeyState Lib“user32.dll”(ByVal vKey作为Long)声明为Short
虽然是真的
如果GetAsyncKeyState(1)为0,则
MsgBox(“单击”)
如果结束
系统线程线程睡眠(150)
结束时

您尝试过“表单”本身的停用事件而不是文本控件吗?

您尝试过“表单”本身的停用事件而不是文本控件吗?

您尝试过吗?我刚刚尝试过在文本框中使用.DragOver和.DragEnter,但是,当我试图将文本拖到文本框中时,它们都没有触发。您尝试过吗?我只是尝试对文本框使用.DragOver和.DragEnter,但当我试图将文本拖到文本框中时,它们都没有触发。是否有一种方法可以在不知道表单的确切边界的情况下指定,例如“如果光标位置超出了格式”或者我需要使用x和y坐标以及表单的大小吗?您也可以尝试设置表单的捕获属性。将此设置为true,则即使鼠标位于窗体之外,只要没有其他控件具有焦点,也会导致窗体接收鼠标事件。我认为lostfocus事件将以这种方式启动。听起来不错,但我不太确定如何进行。我尝试使用MyBase.MouseDown,但只有当鼠标位于表单上方时,它才起作用,这一点无法实现。您可以使用GetAsyncKeyState检测表单外部的单击。我用一段代码再次编辑了我的回复,好主意,但我不知道如何实现它。我只在控制台中使用过GetAsyncKeyState,我不知道如何翻译它,也不知道在表单中在何处使用它。有没有一种方法可以在不知道表单的确切边界的情况下指定它,例如“如果游标位置超出了意识形态”或者我需要使用x和y坐标以及表单的大小吗?您也可以尝试设置表单的捕获属性。将此设置为true,则即使鼠标位于窗体之外,只要没有其他控件具有焦点,也会导致窗体接收鼠标事件。我认为lostfocus事件将以这种方式启动。听起来不错,但我不太确定如何进行。我尝试使用MyBase.MouseDown,但只有当鼠标位于表单上方时,它才起作用,这一点无法实现。您可以使用GetAsyncKeyState检测表单外部的单击。我用一段代码再次编辑了我的回复,好主意,但我不知道如何实现它。我只在控制台中使用过GetAsyncKeyState,我不知道如何翻译它,也不知道在表单中的何处使用它。是的。我刚刚又试了一次,很奇怪,它只在调试中起作用。当我把断点放进去时,在文本框内单击,然后在窗体外单击,事件就会触发,一切都会顺利进行。在没有断点的情况下,我在文本框内单击,在表单外单击,然后单击nada。我刚刚又试了一次,很奇怪,它只在调试中起作用。当我把断点放进去时,在文本框内单击,然后在窗体外单击,事件就会触发,一切都会顺利进行。没有断点,我在文本框内单击,在表单外单击,然后单击nada。