2013-08-30 57 views
0

我只想知道在不使用GDI +的情况下在窗体中绘制线条的最佳方式,而是使用工具箱中的控件。在Windows窗体中绘制一条线的最佳方式C#

+0

您可以使用工具箱中的Visual Basic的PowerPack下有线状。 –

+0

什么样的线?你可以绘制一个带有黑色边框的1像素宽面板(虽然它的绘制方法会使用gdi +我相信)或者为边框样式调用gdi32.dll(不加) – Sayse

回答

3

您可以使用Visual Basic电源包线形状类 - http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.powerpacks.lineshape.aspx

使用Label控件

  1. 另一种解决方案添加一个Label控件到窗体。
  2. 将标签文本设置为空。
  3. 将BorderStyle设置为Fixed3D。
  4. 将AutoSize设置为false。
  5. 将高度设置为2(最容易通过在标签属性下的大小/高度字段中输入2来完成)。

来源:Draw horizontal divider in winforms

+0

+1,但是我会添加锚定以使行的大小调整为窗口 – Sayse

+0

也许:http://blogs.msdn.com/b/vsdata/archive/2009/12/29/visual-basic-powerpacks-is-released-in-visual-studio-2010-beta2.aspx – rheitzman

3

可能不是最好的选择,但应该帮助

 Label lbl = new Label(); 
     lbl.Text = "_________________________________"; 
     this.Controls.Add(lbl); 
-1

你可以用我的控制:

using System; 
using System.Collections; 
using System.Collections.Generic; 
using System.Data; 
using System.Diagnostics; 
public class AmenLine : Control 
{ 

    bool SzChInternaly; 
    public enum EDIR : int 
    { 
     Horizontal = 0, 
     Vertical = 1, 
     Slash = 2, 
     BKSlash = 3 
    } 

    public enum eStyle : int 
    { 
     rect = 0, 
     circ = 1 
    } 

    private eStyle _DrawStyle; 
    public eStyle DrawStyle { 
     get { return _DrawStyle; } 
     set { 
      _DrawStyle = value; 
      BuildMe(_Direc); 
     } 
    } 

    private EDIR _Direc = EDIR.Horizontal; 
    public EDIR Direction { 
     get { return _Direc; } 
     set { 
      if ((value == EDIR.Horizontal && _Direc == EDIR.Vertical) | (value == EDIR.Vertical && _Direc == EDIR.Horizontal)) { 
       SzChInternaly = true; 
       this.Size = new Size(this.Height, this.Width); 
      } 
      _Direc = value; 
      BuildMe(value); 
     } 
    } 

    private void BuildMe(EDIR BodyDir) 
    { 
     try { 
      SzChInternaly = true; 
      Drawing2D.GraphicsPath gr = new Drawing2D.GraphicsPath(); 
      switch (BodyDir) { 
       case EDIR.Horizontal: 
        this.Size = new Size(this.Width, _BorderWidth + 10); 
        gr.AddRectangle(new Rectangle(0, (-_BorderWidth + this.Height)/2, this.Width, _BorderWidth)); 
        break; 
       case EDIR.Vertical: 
        this.Size = new Size(_BorderWidth + 10, this.Height); 
        gr.AddRectangle(new Rectangle((-_BorderWidth + this.Width)/2, 0, _BorderWidth, this.Height)); 
        break; 
       case EDIR.Slash: 
        try { 
         // CType(_BorderWidth * Height/Width, Integer) 
         for (i = 0; i <= Convert.ToInt32(Math.Pow(Math.Pow(Width, 2) + Math.Pow(Height, 2), 0.5)); i += _BorderWidth) { 
          switch (_DrawStyle) { 
           case eStyle.circ: 
            gr.AddPie(i, Convert.ToInt32(Height * i/Width), _BorderWidth, _BorderWidth, 0, 360); 
            break; 
           case eStyle.rect: 
            gr.AddRectangle(new Rectangle(i, Convert.ToInt32(Height * i/Width), _BorderWidth, _BorderWidth)); 
            break; 
          } 
         } 
        } catch { 
        } 
        break; 
       case EDIR.BKSlash: 
        try { 
         // CType(_BorderWidth * Height/Width, Integer) 
         for (i = 0; i <= Convert.ToInt32(Math.Pow(Math.Pow(this.Height, 2) + Math.Pow(this.Width, 2), 0.5)); i += _BorderWidth) { 
          switch (_DrawStyle) { 
           case eStyle.circ: 
            gr.AddPie(Width - 1 - i, Convert.ToInt32(Height * i/Width), _BorderWidth, _BorderWidth, 0, 360); 
            break; 
           case eStyle.rect: 
            gr.AddRectangle(new Rectangle(Width - 1 - i, Convert.ToInt32(Height * i/Width), _BorderWidth, _BorderWidth)); 
            break; 
          } 
         } 
        } catch { 
        } 
        break; 
      } 
      this.Region = new Region(gr); 
      SzChInternaly = false; 
     } catch { 
     } 
    } 

    private int _BorderWidth = 1; 
    public int BorderWidth { 
     get { return _BorderWidth; } 
     set { 
      _BorderWidth = value; 
      BuildMe(_Direc); 
     } 
    } 

    public AmenLine() 
    { 
     this.BackColor = Color.Black; 
     BuildMe(_Direc); 
    } 

    protected override void OnSizeChanged(System.EventArgs e) 
    { 
     base.OnSizeChanged(e); 
     if (SzChInternaly == false) 
      BuildMe(_Direc); 
    } 
} 
-1

您可以通过画线运行代码如下:

Pen pen = new Pen(Color.FromArgb(255, 0, 0, 0)); 
e.Graphics.DrawLine(pen, 20, 10, 300, 100); 
相关问题