【问题标题】:Drawing a line in Winforms在 Winforms 中画一条线
【发布时间】:2009-07-03 07:13:23
【问题描述】:

我在简单的 Windows 窗体中的组框内画线时遇到问题。

这是我的代码:

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();                        
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);            
            DrawLShapeLine(groupBox1.CreateGraphics(), 10, 10, 20, 40);
        }

        public void DrawLShapeLine(System.Drawing.Graphics g, int intMarginLeft, int intMarginTop, int intWidth, int intHeight)
        {
            Pen myPen = new Pen(Color.Black);
            myPen.Width = 2;
            // Create array of points that define lines to draw.
            int marginleft = intMarginLeft;
            int marginTop = intMarginTop;
            int width = intWidth;
            int height = intHeight;
            int arrowSize = 3;
            Point[] points =
             {
                new Point(marginleft, marginTop),
                new Point(marginleft, height + marginTop),
                new Point(marginleft + width, marginTop + height),
                // Arrow
                new Point(marginleft + width - arrowSize, marginTop + height - arrowSize),
                new Point(marginleft + width - arrowSize, marginTop + height + arrowSize),
                new Point(marginleft + width, marginTop + height)
             };

            g.DrawLines(myPen, points);
        }
    }

如果我将 DrawLShapeLine 方法附加到按钮单击事件,它可以正常绘制,但不会在加载表单时进行绘制。

请指教。

【问题讨论】:

    标签: c# .net winforms system.drawing


    【解决方案1】:

    又快又脏:

    如何创建一个宽度为 1 像素的面板并给它一个背景色?

    【讨论】:

    • 这不会做对角线。
    • 如果您不想想要对角线并且想要避免使用 GDI+,这是个好建议。
    • 或者给它一个固定的单边框。
    【解决方案2】:

    GroupBoxPaint 事件连接一个事件处理程序,并从该事件处理程序中调用DrawLShapeLine。然后,您应该使用事件参数中提供的 Graphics 对象:

    private void groupBox1_Paint(object sender, PaintEventArgs e)
    {
        DrawLShapeLine(e.Graphics, 10, 10, 20, 40);
    }
    

    正如您的代码现在看起来一样,当表单需要绘画时,它将尝试在GroupBox 中绘画。组框可以在任何其他场合绘制,这将使您绘制的线条消失。

    【讨论】:

      【解决方案3】:

      另一种选择是使用 Visual Basic Power Pack 中提供的行控件。

      http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/d9e082c8-5386-4481-a744-1c9029805696/

      如果您有 Visual Studio 2008 SP1 或 Visual Studio 2010,则无需下载任何内容。

      如果您在工具箱中没有看到 Visual Basic PowerPacks 控件,请右键单击工具箱并在上下文菜单中选择“全部显示”。

      【讨论】:

        【解决方案4】:

        添加一个没有文字的标签,一个 3D 边框,高度为 2(你必须在属性页中设置高度,而不是使用 GUI)!

        【讨论】:

          【解决方案5】:

          我不确定是否发生了其他事情,但您应该在 GroupBox 的 Paint 事件上画线,而不是在 Form 的。

          【讨论】:

            【解决方案6】:

            System.Drawing.Pen可用于在Windows窗体中画线。

             Graphics surface = CreateGraphics();
             Pen pen1 = new Pen(Color.Black, 2);
             surface.DrawLine(pen1, this.Width / 2, 0, this.Width / 2, this.Height);
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2020-03-12
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多