C# Winforms所有者绘制的控件和调整大小

C# Winforms所有者绘制的控件和调整大小,c#,winforms,resize,gdi+,ownerdrawn,C#,Winforms,Resize,Gdi+,Ownerdrawn,我正在设计一个名为ViewPanel的控件。本质上,它只是一个面板,将其文本属性绘制为标题。为此,我调整DisplayRectangle属性,以便在顶部留出足够的空间来绘制一些文本 我正在经历的问题是,当控件调整大小时,它的子控件似乎落后了一点。对于许多操纵DisplayRectangle的所有者绘制控件,我都遇到了这个问题 例如: 正如您在这里看到的,我有一个ViewPanel控件,它绘制了一个蓝色标题栏,还请注意ViewPanel在每个方向上都填充了16px ViewPanel控件有一个子L

我正在设计一个名为ViewPanel的控件。本质上,它只是一个面板,将其文本属性绘制为标题。为此,我调整DisplayRectangle属性,以便在顶部留出足够的空间来绘制一些文本

我正在经历的问题是,当控件调整大小时,它的子控件似乎落后了一点。对于许多操纵DisplayRectangle的所有者绘制控件,我都遇到了这个问题

例如:

正如您在这里看到的,我有一个ViewPanel控件,它绘制了一个蓝色标题栏,还请注意ViewPanel在每个方向上都填充了16px

ViewPanel控件有一个子ListView

我已经调整了控件的大小-请注意ViewPanel是如何正确绘制标题栏的,但是子控件没有相应地重新定位自己

问题:


什么负责更新子控件的位置?是否需要重写某些内容?

已为其他任何所有者图形控件解决:

protected override void WndProc(ref Message m)
{
    const int WM_WINDOWPOSCHANGED = 0x0047;
    base.WndProc(ref m);
    if (m.Msg == WM_WINDOWPOSCHANGED)
    {
        //Make changes to your display rectangle here...
        this.PerformLayout();
    }
}

您是否尝试将ListView的锚点属性设置为Top、Left、Right和Bottom?我建议您设置边距,而不是使用DisplayRectangle。设置边距将自动调整其子控件@将ListView设置为停靠。fill@RohitPrakash我需要考虑的不仅仅是这个特殊问题,我有几个控件依赖于改变显示矩形