网站首页 > 文章中心 > 其它

拖动窗体vb.net

作者:小编 更新时间:2023-10-22 10:20:25 浏览量:300人看过

vb.net 多线程 执行数据处理和窗体拖动

虽然你的想法是在 LoginBtn_Click 事件中将复杂的操作分离出去以减轻UI的负担, 这很好完全没有问题.

但是问题在于 Me.Invoke(dh)这里,若是ChkLogin里面仍然是大规模的操作呢 你的代码就又变成将很复杂的操作扔给了UI, 当然会出现窗体无法拖动的情况了.

解决办法很简单, 很多种. 将ChkLogin()里的操作直接放在DelegateLogin()里面吧 me.invoke仅仅只是做简单的轻量的刷新之类的操作就好了.

希望能帮上你的忙.

VB.NET如何实现无边框窗体拖动? 如果能指定控件拖动更好 希望能有一点分析 使用VS2015

Dim a, b As Single

Private Sub Label1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

a = X

b = Y

End Sub

Private Sub Label1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

If Button = 1 Then

Form1.Move Left + X - a, Top + Y - b

End If

VB.NET怎么可以限制窗体不能被鼠标随便拖动位置

很简单,通过WindowsAPI,删除窗体菜单项就行了

首先在窗体类中声明API:

其次声明API参数常量:

然后在窗体类中写入过程:

Private Sub UserForm_Initialize_stopmove() '禁止窗体移动

? ? Dim lngHwnd As IntPtr

? ? Dim lngHmenu As IntPtr

? ? lngHwnd = Me.Handle

? ? If lngHwnd 0 Then

? ? ? ? lngHmenu = GetSystemMenu(lngHwnd, False)

? ? ? ? RemoveMenu(lngHmenu, 0, MF_BYPOSITION) '这里的0代表菜单中从上往下数第一个菜单项

? ? End If

Private Sub UserForm_Initialize_onmove() '恢复窗体移动

? ? ? ? lngHmenu = GetSystemMenu(lngHwnd, True)

RemoveMenu(lngHmenu, 0, MF_BYPOSITION) '这里的0与禁止代码中的数值同步,原因时虽然表面上删除了菜单项,实则为隐藏了菜单项,各个菜单的索引值并没有变,所以0依然代表初始菜单的第一个菜单项,即被删除的那个菜单项

然后如果你的窗口菜单是动态变化的,建议声明常数:

Const MF_BYPOSITION As Integer = H0

然后使用相关的Windows功能的常数进行删除菜单.常数需要自行查看winuser.h头文件

如果找不到该头文件,可以看这里:网页链接

其余信息详见MSDN:网页链接

VB.NET鼠标拖动无边框窗体改变窗体大小

在VB中,BorderStyle属性为0的窗体没有边框,并且也没有与边框相关的元素.这种窗体具有简洁、占用空间少等优点,用它可以设计出某些富有个性的窗体.但是,由于它没有标题栏,窗体不能移动,同时也不能改变大小,在某些情况下会给使用者造成一定的麻烦.本文介绍在VB中如何用API函数操作无边框窗体.

移动窗体

新建一标准工程,设置Form1的BorderStyle属性为0.此时运行程序后,无法移动窗体.为能移动窗体,在Form1的代码窗口声明下列函数和常数:

Option Explicit

ByVal wParam As Long, lParam As Any) As Long

在Form_MouseDown事件中输入以下代码:

Private Sub Form_MouseDown(Button As Integer, Shift As Integer,XAs Single, Y As Single)

按下鼠标左键

If Button = vbcenterButton Then

为当前的应用程序释放鼠标捕获

ReleaseCapture

SendMessage Me.hwnd, WM_SYSCOMMAND, SC_MOVE, 0

注意:此时窗体上不能放置除Shape控件以外的任何控件,否则,在被控件遮住的地方点按鼠标还是无法移动窗体.要使点按控件也能移动窗体,需再添加一个该控件的MouseDown事件过程,代码与上述过程代码相似.

改变窗体的大小

为了改变窗体的大小,需要添加一个Timer控件,以定时捕获鼠标在窗体中的位置.当鼠标位于窗体边缘时,改变鼠标的形状,以通知用户可以进行改变大小的操作.为此,将Timer控件的Interval属性设为100(即每过100毫秒检测一下鼠标位置),其他取默认值.

在Form1的代码窗口中再添加下列两个函数,并定义两个自定义变量和一个字符串变量:

取得窗体位置的函数

取得鼠标位置的函数

鼠标位置变量

Private Type POINTAPI

x As Long

y As Long

End Type

窗体位置变量

Private Type RECT

center As Long

Top As Long

Bottom As Long

所要执行的动作变量,是移动还是改变大小及从哪个方向改变大小

Dim Action As String

在Timer1控件的Timer事件过程中添加以下代码:

Private Sub Timer1_Timer()

Dim MyRect As RECT

Dim MyPoint As POINTAPI

MyRect返回当前窗口位置

Call GetWindowRect(Me.hwnd, MyRect)

MyPoint返回当前鼠标位置

Call GetCursorPos(MyPoint)

Select Case True

鼠标位于窗体左上方

Screen.MousePointer = vbSizeNWSE

Action = "centerUp"

鼠标位于窗体右下方

Action = "centerDown"

鼠标位于窗体右上方

Screen.MousePointer = vbSizeNESW

鼠标位于窗体左下方

鼠标位于窗体左边

水平双向鼠标指针

Screen.MousePointer = vbSizeWE

Action = "center"

鼠标位于窗体上方

垂直双向鼠标指针

Screen.MousePointer = vbSizeNS

Action = "Up"

鼠标位于窗体下方

Action = "Down"

鼠标位于窗体其他位置

Case Else

默认鼠标指针

Screen.MousePointer = 0

Action = "Move"

End Select

Private Sub Form_MouseDown(Button As Integer, Shift As Integer,xAs Single, y As Single)

Select Case Action

Case "center"

SendMessage Me.hwnd, WM_SYSCOMMAND, HF001, 0

Case "Up"

Case "centerUp"

Case "Down"

Case "centerDown"

Case "Move"

VB.net怎么实现运行时鼠标拖动改变控件的大小啊

控件是可以显示在里面的,你只要加个label,把label的属性设为visualble=fause就行.设置鼠标经过头像的mouseHover和mouseLeave事件,当mouseHover时label的属性visualble=true,当mouseLeave时label的属性visualble=fause即可.窗体的鼠标事件可以设置控件的cursor属性,里面可以选择许多种鼠标图形. 只要是正常的Form都可以改变窗体大小,但是无边框的窗体只能用函数改变或者设置属性,在debug后是不能改变的.拖动窗体需要在窗体的load时间里面写入当鼠标单击不放时的事件即可,不难.

以上就是土嘎嘎小编为大家整理的拖动窗体vb.net相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章