当前位置: 首页 > 编程语言 > C#

C#窗体控件移动分享

时间:2023-04-10 23:09:57 C#

C#窗体控件移动有没有办法控制窗体可以移动到哪里?所以如果我移动一张桌子,它只会在垂直轴上移动,而当我试图水平移动它时,什么也没有发生。我不想要像changechanged或move事件这样的有缺陷的实现,并将它们弹回内联。我没有办法使用类似WndProc覆盖的东西,但在搜索了一段时间后,我找不到任何东西。请帮助您很可能想要覆盖WndProc并处理WM_MOVING消息。根据MSDN:WM_MOVING消息被发送到用户正在移动的窗口。通过处理此消息,应用程序可以监视拖动矩形的位置并在必要时更改其位置。这是一种方法,但是,您显然需要根据自己的需要进行调整:usingSystem.Diagnostics;使用System.Runtime.InteropServices;使用System.Windows.Forms;namespaceVerticalMovingForm{publicpartialclassForm1:Form{privateconstintWM_MOVING=0x0216;私有只读intpositionX;私有只读intpositionR;公共Form1(){左=400;宽度=500;位置X=左;positionR=左+宽度;}protectedoverridevoidWndProc(refMessagem){if(m.Msg==WM_MOVING){varr=(RECT)Marshal.PtrToStructure(m.LParam,typeof(RECT));r.Left=positionX;r.Right=positionR;Marshal.StructureToPtr(r,m.LParam,false);}base.WndProc(refm);}[StructLayout(LayoutKind.Sequential)]privatestructRECT{publicintLeft;公共诠释顶部;publicint对;公共诠释底部;}}}例如:使用System.Runtime.InteropServices;protectedoverridevoidWndProc(refMessagem){if(m.Msg==0x216)//WM_MOVING=0x216{Rectanglerect=(Rectangle)Marshal.PtrToStructure(m.LParam,类型(矩形));if(rect.Left上面的代码将最小左手位置设置为100不需要像driis那样重新创建RECT结构,.NET原生Rectangle工作得很好。但是,您必须通过X属性设置位置,因为Left是一个GetonlypropertyVB.NET版本:以上就是C#学习教程:C#表单控件移动端分享的全部内容,如果对大家有用,需要进一步了解C#学习教程,希望大家多多指教更加注意它——受保护的重载覆盖SubWndProc(ByRefmAsMessage)Ifm.Msg=&H216Then'WM_MOVING=0x216DimrectAsRectangle=DirectCast(Marshal.PtrToStructure(m.LParam,GetType(Rectangle)),长方形)若为正左本文整理自网络,不代表立场,如涉及侵权,请点右联系管理员删除,转载请注明出处: