繁体   English   中英

如何在 C# WinForms 中用对角线分割两个面板?

[英]How to make a diagonal line divide two panels in C# WinForms?

这是我的表格,我正在努力使中间的对角线将表格的左右部分均匀地分开 这条线是在一个单独的面板中绘制的,有一个脚本指示它到 position 线的位置(此外,该面板的背景设置为透明)。 我的表单的左侧是另一个面板以及右上角的黑色部分。 登录元素(email 和密码字段、注册和登录按钮等)附加到表单本身。

运行时的表单图像

编辑器中的表单图像

我尝试在其他面板的相同位置添加其他线条,但它仍然看起来不像我想要的那样,因为尽管原始面板的透明背景与线条相交,但这些面板仍然重叠。

我不知道该怎么做,所以非常感谢您的帮助;)

我会将其放入自己的用户控件中。 之后,您可以通过ForeColorBackgroundColorThicknessRightToLeft设置所有内容:

public class DiagonalSeparator : UserControl
{
    private int thickness = 3;

    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);
        using (Graphics g = e.Graphics)
        {
            g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
            g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
            g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

            var p = new Pen(ForeColor, thickness);
            var point1 = RightToLeft == RightToLeft.No ? new Point(0, 0) : new Point(Width, 0);
            var point2 = RightToLeft == RightToLeft.No ? new Point(Width, Height) : new Point(0, Height);
            g.DrawLine(p, point1, point2);
        }
    }

    [DefaultValue(3)]
    [Description("The thickness of the drawn line"), Category("Appearance")]
    [Browsable(true), EditorBrowsable(EditorBrowsableState.Always)]
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
    public int Thickness
    {
        get
        {
            return thickness;
        }

        set
        {
            thickness = value;
            Invalidate();
        }
    }
}

然后可以将此控件用作设计器中的任何其他控件,并且您可以检查可视化是否按预期工作。

如果想用中间的对角线等分表格的左右部分,可以参考以下代码:

private void panel3_Paint(object sender, PaintEventArgs e)
{
    base.OnPaint(e);
    using (Graphics g = e.Graphics)
    {
        g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
        g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
        g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
        g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

        var p = new Pen(Color.Red, 3);
        var point1 = new Point(0, 0);
        var point2 = new Point(panel3.Width, panel3.Height);
        g.DrawLine(p, point1, point2);
    }
}

您可以在代码中更改对角线的颜色和大小。

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM