以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  怎样移动窗口中的panel  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=166164)

--  作者:百事可乐
--  发布时间:2021/5/21 12:28:00
--  怎样移动窗口中的panel
如题,在一个窗口中,因为有个panel要显示详情数据和图表,当点击显示时它可以显示出来,但位置无法移动,挡住后方内容。是否可以象其它软件一样,可以按住panel后可以移动它?
注:这里最好是不要用模式窗口来显示详情,因为数据比较多,一些变量和表都存在于当前窗口中,如果用到模式窗口,就相当于要重新生成那些table了,这样重复的操作就太多了。

--  作者:有点蓝
--  发布时间:2021/5/21 13:32:00
--  
参考:http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=49697&skin=0
--  作者:百事可乐
--  发布时间:2021/5/21 13:38:00
--  
已解决。参考 http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=82977&replyID=&skin=1

=====================
1、设置二个全局变量用于记录 该控件按下时的左上角坐标
Vars("CtrlX")
Vars("CtrlY")

2、在窗口mouseDown事件中记录下按下时的控件坐标:
If e.Button = MouseButtons.Left Then
    If e.Sender.Name.StartsWith("Panel") Then
        Vars("CtrlX")  = e.X
        Vars("CtrlY") = e.Y
    end if
end if

3、在窗口mouseMove事件中实现对这个控件的移动
If e.Button = MouseButtons.Left Then
    If e.Sender.Name.StartsWith("Panel") Then
        e.Sender.Left += e.x - Vars("CtrlX")
        e.Sender.top += e.y - Vars("CtrlY")
    end if
end if

4、如果移动后的控件要显示在最上层,在mouseDown事件中再添加以下代码
Dim pn As WinForm.Panel 
pn = e.Form.Controls(e.sender.Name)
pn.TopMost = True

5、注意:其中引用的控件"Panel",是大小写敏感的,所以必须用大写的"P",我之前使用了"panel"无论如何都实现不了移动。

================
感谢前人的付出,所以我乐意再次小结如上,给各位需要的朋友。
[此贴子已经被作者于2021/5/21 13:40:31编辑过]