以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  Panel控件有什么特殊的地方吗?  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=101017)

--  作者:Hopenight
--  发布时间:2017/5/23 17:21:00
--  Panel控件有什么特殊的地方吗?
我在程序中想给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控件吗?

--  作者:有点色
--  发布时间:2017/5/23 17:56:00
--  

 你需要刷新控件

 

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


--  作者:Hopenight
--  发布时间:2017/5/23 18:04:00
--  
以下是引用有点色在2017/5/23 17:56:00的发言:

 你需要刷新控件

 

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

试过了,refresh也没用


--  作者:有点色
--  发布时间: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
--  发布时间:2017/5/23 19:14:00
--  
找到原因了,在这个Panel放了个Table控件,且是Fill的
结果就...

--  作者:有点蓝
--  发布时间:2017/5/23 20:28:00
--  
图片点击可在新窗口打开查看