Foxtable(狐表)用户栏目专家坐堂 → Panel控件有什么特殊的地方吗?


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

主题:Panel控件有什么特殊的地方吗?

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


加好友 发短信
等级:四尾狐 帖子:859 积分:10790 威望:0 精华:0 注册:2016/5/6 14:34:00
Panel控件有什么特殊的地方吗?  发帖心情 Post By:2017/5/23 17:21:00 [只看该作者]

我在程序中想给Panel边框重绘一下颜色,用自己的处理函数绑定了Panel控件的Paint事件。如下:
 Public Shared Sub OwnDrawBorder(ByRef panel As WinForm.Panel)
        Dim panelBase As Panel = panel.BaseControl
        AddHandler panelBase.Paint, AddressOf Panel_DrawBorder
 End Sub

 Public Sub Panel_DrawBorder(sender As Object, e As PaintEventArgs)
        Dim panel As Panel = CType(sender, Panel)
        Const width As Integer = 1
        ControlPaint.DrawBorder(
                                e.Graphics, panel.ClientRectangle,
                               Color.FromArgb(111, 157, 217), width, ButtonBorderStyle.Solid,
                               Color.FromArgb(111, 157, 217), width, ButtonBorderStyle.Solid,
                               Color.FromArgb(111, 157, 217), width, ButtonBorderStyle.Solid,
                               Color.FromArgb(111, 157, 217), width, ButtonBorderStyle.Solid
                            )
    End Sub

但是跟踪了一下代码,貌似Panel控件的Paint事件并没有被触发。
难道狐表中的Panel控件基类不是标准的Panel控件吗?

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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/5/23 17:56:00 [只看该作者]

 你需要刷新控件

 

Dim p = Forms("窗口1").controls("panel1").basecontrol
p.refresh


 回到顶部
帅哥哟,离线,有人找我吗?
Hopenight
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:859 积分:10790 威望:0 精华:0 注册:2016/5/6 14:34:00
  发帖心情 Post By:2017/5/23 18:04:00 [只看该作者]

以下是引用有点色在2017/5/23 17:56:00的发言:

 你需要刷新控件

 

Dim p = Forms("窗口1").controls("panel1").basecontrol
p.refresh

试过了,refresh也没用


 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/5/23 18:07:00 [只看该作者]

 我测试有效

 

全局代码

 

Public Sub OwnDrawBorder(ByRef panel As WinForm.Panel)
Dim panelBase As windows.forms.Panel = panel.BaseControl
AddHandler panelBase.Paint, AddressOf Panel_DrawBorder
msgbox(123)
End Sub

Public Sub Panel_DrawBorder(sender As Object, e As windows.forms.PaintEventArgs)
Dim panel As windows.forms.Panel = sender
Const width As Integer = 1
windows.forms.ControlPaint.DrawBorder( _
e.Graphics, panel.ClientRectangle, _
Color.FromArgb(111, 157, 217), width, Windows.Forms.ButtonBorderStyle.Solid, _
Color.FromArgb(111, 157, 217), width, Windows.Forms.ButtonBorderStyle.Solid, _
Color.FromArgb(111, 157, 217), width, Windows.Forms.ButtonBorderStyle.Solid, _
Color.FromArgb(111, 157, 217), width, Windows.Forms.ButtonBorderStyle.Solid _
)
output.show(Date.now)
End Sub

 

绑定事件

 

OwnDrawBorder(e.Form.controls("panel1"))

 

刷新调用pain事件

 

Dim a = Forms("窗口1").controls("panel1").basecontrol
a.refresh


 回到顶部
帅哥哟,离线,有人找我吗?
Hopenight
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:859 积分:10790 威望:0 精华:0 注册:2016/5/6 14:34:00
  发帖心情 Post By:2017/5/23 19:14:00 [只看该作者]

找到原因了,在这个Panel放了个Table控件,且是Fill的
结果就...

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106242 积分:540333 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/5/23 20:28:00 [只看该作者]

图片点击可在新窗口打开查看

 回到顶部