C#UserControl在TableLayoutPanel单元格之外绘制

时间:2018-01-09 19:37:47

标签: winforms user-controls tablelayoutpanel drawstring

C#.Net 4.5 Winform

在我的表单上,我有一个SplitContainer,并在右侧面板中,我的自定义UserControl与TableLayoutPanel。

当我在TableLayoutPanel的每个单元格中绘制UserControl项目时,我想使用DrawString在当前单元格的分区和它上面的单元格上显示文本。

目前:

单元格的UserControls在TableLayoutPanel的每个单元格中作为“填充”停靠。

    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
        AutoScroll = false;
        AutoSize = false;
        Dock = DockStyle.Fill;
        Margin = new Padding(0);
    }

我将绘制矩形偏移到它的高度的一半:

var topOffset = ClientRectangle.Top - (ClientRectangle.Height / 2);

paintRect = new Rectangle(ClientRectangle.X + Padding.Left,
                        topOffset + Padding.Top,
                        ClientRectangle.Width - Padding.Left - Padding.Right,
                        ClientRectangle.Height - Padding.Top - Padding.Bottom);

我为图形创建了一个新的剪切区域,并打印出文本:

using (Graphics newGraphics = this.CreateGraphics())
{
    newGraphics.SetClip(paintRect);

    e.Graphics.SetClip(newGraphics);

    e.Graphics.DrawString(
        "ABCD 1234",
        Font,
        new SolidBrush(ForeColor),
        paintRect, style);


}

文字被截断 - 见图片enter image description here

需要显示文本的单元格UserControl(位于顶部,中途插入控件,以及TableLayoutPanel单元格,位于其上方。我认为我需要更改这些单元格的剪辑以不剪切文本,但不成功

如何在UserControl OnPaint中显示包含UserControl的TableLayoutPanel单元格所在的“图层”的“外部”或“顶部”文本?

0 个答案:

没有答案