Foxtable(狐表)用户栏目专家坐堂 → 怎样移动窗口中的panel


  共有3494人关注过本帖树形打印复制链接

主题:怎样移动窗口中的panel

帅哥哟,离线,有人找我吗?
百事可乐
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:44 积分:601 威望:0 精华:0 注册:2019/4/21 8:51:00
怎样移动窗口中的panel  发帖心情 Post By:2021/5/21 12:28:00 [显示全部帖子]

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

 回到顶部
帅哥哟,离线,有人找我吗?
百事可乐
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:44 积分:601 威望:0 精华:0 注册:2019/4/21 8:51:00
  发帖心情 Post By: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编辑过]

 回到顶部