Vb.net 是否通过拖动其他元素在窗体中移动?
我在VB.NET中制作了一个将DLL注入进程的小程序。这将帮助我学习如何逆向工程和表单设计。唯一的问题是我把表单做成了一个无边界的表单,这意味着我不能拖动它。所以我添加了一个GroupBox元素来覆盖表单大小。我希望能够点击并拖动GroupBox,移动整个表单,就好像它是表单本身,而不是无边界的一样。这听起来可能令人困惑,但这是我目前的代码Vb.net 是否通过拖动其他元素在窗体中移动?,vb.net,Vb.net,我在VB.NET中制作了一个将DLL注入进程的小程序。这将帮助我学习如何逆向工程和表单设计。唯一的问题是我把表单做成了一个无边界的表单,这意味着我不能拖动它。所以我添加了一个GroupBox元素来覆盖表单大小。我希望能够点击并拖动GroupBox,移动整个表单,就好像它是表单本身,而不是无边界的一样。这听起来可能令人困惑,但这是我目前的代码 Private Sub Loader_Load(ByVal sender As System.Object, ByVal e As System.E
Private Sub Loader_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
DLLs.Name = "DLLs"
Button1.Text = "Browse"
Label1.Text = "Waiting for process.exe"
Timer1.Interval = 50
Timer1.Start()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
OpenFileDialog1.Filter = "DLL (*.dll) |*.dll"
OpenFileDialog1.ShowDialog()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
For i As Integer = (DLLs.SelectedItems.Count - 1) To 0 Step -1
DLLs.Items.Remove(DLLs.SelectedItems(i))
Next
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
If IO.File.Exists(OpenFileDialog1.FileName) Then
Dim TargetProcess As Process() = Process.GetProcessesByName(Textbox1.Text)
If TargetProcess.Length = 0 Then
Me.Label1.Text = ("Waiting for process.exe")
Else
Timer1.Stop()
Me.Label1.Text = "Successfully injected"
Call Inject()
End If
Else
End If
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
Me.Close()
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
If IO.File.Exists(OpenFileDialog1.FileName) Then
Dim TargetProcess As Process() = Process.GetProcessesByName(Textbox1.Text)
If TargetProcess.Length = 0 Then
Me.Label1.Text = ("Waiting for process.exe")
Else
Timer1.Stop()
Me.Label1.Text = "Successfully injected"
Call Inject()
End If
Else
End If
End Sub
Private Sub OpenFileDialog1_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles OpenFileDialog1.FileOk
Dim FileName As String
FileName = OpenFileDialog1.FileName.Substring(OpenFileDialog1.FileName.LastIndexOf("\"))
Dim DllFileName As String = FileName.Replace("\", "")
Me.DLLs.Items.Add(DllFileName)
End Sub
Private Sub DLLs_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DLLs.SelectedIndexChanged
Me.TopMost = True
End Sub
假设您的groupbox为“GroupBox1”:
Private Sub GroupBox1_MouseDown(sender As Object, e As MouseEventArgs) Handles GroupBox1.MouseDown
GroupBox1.Capture = False
Dim msg As Message = Message.Create(Me.Handle, &HA1, 2, 0&)
Me.DefWndProc(msg)
End Sub
下面是我用来处理类似情况的代码。如果要单击窗体上的任意位置进行拖动,则必须为窗体上的每个控件创建“MouseDown”和“MouseMove”处理程序
Private m_CursorOffset As Point
Public Sub GroupBox1_MouseDown(sender As Object, e As MouseEventArgs) Handles GroupBox1.MouseDown
If e.Button = Windows.Forms.MouseButtons.Left Then
m_CursorOffset = e.Location
End If
End Sub
Public Sub GroupBox1_MouseMove(sender As Object, e As MouseEventArgs) Handles GroupBox1.MouseMove
If e.Button = Windows.Forms.MouseButtons.Left Then
'Distance we moved
Dim d As Point = New Point(e.X - m_CursorOffset.X, e.Y - m_CursorOffset.Y)
'New location of the form
Dim adjustedLocation As New Point(Me.Location.X + d.X, Me.Location.Y + d.Y)
' Set the new position of our form
Me.Location = adjustedLocation
End If
End Sub
请考虑用严格的选项来测试这一点。我从我的几个老项目中得到了这个。IDE建议严格打开,工作正常,这将是:Dim msg As Message=Message.Create(Me.Handle,&HA1,CType(2,IntPtr),CType(0&,IntPtr))抱歉,不确定如何在注释中格式化代码。只需将其放在代码段中它所属的位置。