【问题标题】:How can I create a line in a WinForms Application?如何在 WinForms 应用程序中创建一行?
【发布时间】:2011-03-06 11:04:30
【问题描述】:

我想在 WinForms 应用程序中创建一个简单的 3D 线条,以改善我的表单布局的视觉排列。 此行与 About Windows 对话框中的行完全相同(可在 Windows Explorer -> Help -> About Windows 中打开)。

一个例子被检查here。最后一行 (3D) 是我想要的,而不是第一行。

如何在 C# 或 Visual Basic (.NET) 中做到这一点?

【问题讨论】:

    标签: winforms graphics


    【解决方案1】:

    添加一个带有 3D 边框且没有文本的 Label 控件,然后将高度设置为 2。

    【讨论】:

      【解决方案2】:

      如果您使用 SysInternals 的 ZoomIt 实用程序,您可以看到这只是两行代码。深灰色高于白色。使用 Graphics.DrawLine() 绘制线条非常简单,您只需要确保选择与表单的 BackColor 配合良好的深色即可。如果用户选择了另一个主题,那并不总是战舰灰色。这使得 GroupBox 技巧失败了。

      此示例代码可用:

          protected override void OnPaint(PaintEventArgs e) {
              Color back = this.BackColor;
              Color dark = Color.FromArgb(back.R >> 1, back.G >> 1, back.B >> 1);
              int y = button1.Bottom + 20;
              using (var pen = new Pen(dark)) {
                  e.Graphics.DrawLine(pen, 30, y, this.ClientSize.Width - 30, y);
              }
              e.Graphics.DrawLine(Pens.White, 30, y+1, this.ClientSize.Width - 30, y+1);
          }
      

      注意此代码中button1 的使用,以确保在正确的高度绘制线条,即使在重新缩放表单时也是如此。选择您自己的控件作为该行的参考。

      【讨论】:

        【解决方案3】:

        一种方法是创建一个没有标签且高度为 0(或者是 1,不太记得)的组框 - 我知道我以前使用过这个技巧,即使感觉有点 hacky :-)

        【讨论】:

        • 嗨@Tor,我试过一次,但是如果用户在Windows中使用皮肤,这会使线条看起来很奇怪!!!我正在寻找并替代这种技术。
        【解决方案4】:

        我也使用过GroupBox hack,它的好处是可以根据操作系统边框主题自行设置样式。

        VB Power Packs 控件集合中还有一个 Line 类。里面还有一些我们也用过的好东西。

        编辑:这是我使用上述方法绘制水平线的 Seperator 类。

        public class Separator : GroupBox
        {
            // Methods
            protected override void SetBoundsCore(int x, int y, int width, int height, BoundsSpecified specified)
            {
                base.SetBoundsCore(x, y, width, 3, specified);
            }
        
            // Properties
            [DefaultValue("")]
            public override string Text
            {
                get
                {
                    return string.Empty;
                }
                set
                {
                }
            }
        }
        

        【讨论】:

          【解决方案5】:

          你可以通过添加一个Label并将其文本设置为下划线“_”来获得行分隔符效果

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-06-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多