WinForm怎样画一条线,要跨越多个控件的

时间:2023-02-01 23:48:46
如题,试过在From上直接绘图,会跑到所有控件下面,不是我希望的

12 个解决方案

#1


引用
如题,试过在From上直接绘图,会跑到所有控件下面,不是我希望的

不明白LZ要画什么样的线,实现什么样的效果。--->当前热点控件,始终在最前面。

#2


放个btn在事件中画线。由于你画线是的PAINT中,子控件在父控件后绘制,所以挡住了

#3


因为你在form上画的,而控件在它上面,肯定会挡住下面画的线。一个简单的方法是,把form上的控件背景色都设置成透明色,这样会把线的颜色透上来。还有就是你要进行计算了,窗体上的这条线,经过控件哪里,然后在该控件上画相应的部分。肯定是用第二种方法,稍微写些算法。

#4


引用 楼主 TryToday 的回复:
如题,试过在From上直接绘图,会跑到所有控件下面,不是我希望的


“直接绘图”,这个太低级了。

你可以使用高级的(可能是在vb兼容类库中的)Line等控件。

#5


如果你想提高效率,你应该自己学会开发控件的技术。

不要胡乱“绘图”。应该开发控件。

#6


Panel  Height=1   设置背景

#7


用GDI绘直线
protected void Page_Load(object sender, EventArgs e)
    {
        Bitmap bitmap = new Bitmap(200, 150);//创建位图
        Graphics g = Graphics.FromImage(bitmap);//创建画布
        g.Clear(Color.WhiteSmoke);//清空背景色
        Pen myPen = new Pen(Color.Blue, 2);//创建画笔对象
        g.DrawLine(myPen, 20, 30, 120, 30);//绘制直线
        System.IO.MemoryStream ms = new System.IO.MemoryStream();
        bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
        Response.ClearContent();//清除缓存区中所有内容
        Response.ContentType = "image/Gif";//设置输出图片类型
        Response.BinaryWrite(ms.ToArray());//写入HTTP流输出到页面上
    }

#8


是不是可以这样搞,搞一个截图控件。只要触发开始截图的时候,先截取当前软件界面,用一个image把界面挡住,截图画在image上。然后在image上画线。

#9


引用 8 楼 wangyue4 的回复:
是不是可以这样搞,搞一个截图控件。只要触发开始截图的时候,先截取当前软件界面,用一个image把界面挡住,截图画在image上。然后在image上画线。

那所有控件就都点不了了?

#10


using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            //在所有控件之上画线
            var gp = new GraphicsPath();
            gp.AddLines(new[] {new Point(0, 0), new Point(300, 300), new Point(302, 300), new Point(2, 0), new Point(0, 0)});
            var line = new Control
                       {
                           Region = new Region(gp),
                           Bounds = new Rectangle(50, 50, 300, 300),
                           BackColor = Color.Red
                       };
            Controls.Add(line);
            line.BringToFront(); //保证线在上边

            //画个button对比用
            Controls.Add(new Button {Bounds = new Rectangle(100, 100, 200, 200)});
        }
    }
}

#11


引用 10 楼 phommy 的回复:
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            //在所有控件之上画线
            var gp = new GraphicsPath();
            gp.AddLines(new[] {new Point(0, 0), new Point(300, 300), new Point(302, 300), new Point(2, 0), new Point(0, 0)});
            var line = new Control
                       {
                           Region = new Region(gp),
                           Bounds = new Rectangle(50, 50, 300, 300),
                           BackColor = Color.Red
                       };
            Controls.Add(line);
            line.BringToFront(); //保证线在上边

            //画个button对比用
            Controls.Add(new Button {Bounds = new Rectangle(100, 100, 200, 200)});
        }
    }
}

画根斜线会怎么样?

#12


WinForm怎样画一条线,要跨越多个控件的

#1


引用
如题,试过在From上直接绘图,会跑到所有控件下面,不是我希望的

不明白LZ要画什么样的线,实现什么样的效果。--->当前热点控件,始终在最前面。

#2


放个btn在事件中画线。由于你画线是的PAINT中,子控件在父控件后绘制,所以挡住了

#3


因为你在form上画的,而控件在它上面,肯定会挡住下面画的线。一个简单的方法是,把form上的控件背景色都设置成透明色,这样会把线的颜色透上来。还有就是你要进行计算了,窗体上的这条线,经过控件哪里,然后在该控件上画相应的部分。肯定是用第二种方法,稍微写些算法。

#4


引用 楼主 TryToday 的回复:
如题,试过在From上直接绘图,会跑到所有控件下面,不是我希望的


“直接绘图”,这个太低级了。

你可以使用高级的(可能是在vb兼容类库中的)Line等控件。

#5


如果你想提高效率,你应该自己学会开发控件的技术。

不要胡乱“绘图”。应该开发控件。

#6


Panel  Height=1   设置背景

#7


用GDI绘直线
protected void Page_Load(object sender, EventArgs e)
    {
        Bitmap bitmap = new Bitmap(200, 150);//创建位图
        Graphics g = Graphics.FromImage(bitmap);//创建画布
        g.Clear(Color.WhiteSmoke);//清空背景色
        Pen myPen = new Pen(Color.Blue, 2);//创建画笔对象
        g.DrawLine(myPen, 20, 30, 120, 30);//绘制直线
        System.IO.MemoryStream ms = new System.IO.MemoryStream();
        bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
        Response.ClearContent();//清除缓存区中所有内容
        Response.ContentType = "image/Gif";//设置输出图片类型
        Response.BinaryWrite(ms.ToArray());//写入HTTP流输出到页面上
    }

#8


是不是可以这样搞,搞一个截图控件。只要触发开始截图的时候,先截取当前软件界面,用一个image把界面挡住,截图画在image上。然后在image上画线。

#9


引用 8 楼 wangyue4 的回复:
是不是可以这样搞,搞一个截图控件。只要触发开始截图的时候,先截取当前软件界面,用一个image把界面挡住,截图画在image上。然后在image上画线。

那所有控件就都点不了了?

#10


using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            //在所有控件之上画线
            var gp = new GraphicsPath();
            gp.AddLines(new[] {new Point(0, 0), new Point(300, 300), new Point(302, 300), new Point(2, 0), new Point(0, 0)});
            var line = new Control
                       {
                           Region = new Region(gp),
                           Bounds = new Rectangle(50, 50, 300, 300),
                           BackColor = Color.Red
                       };
            Controls.Add(line);
            line.BringToFront(); //保证线在上边

            //画个button对比用
            Controls.Add(new Button {Bounds = new Rectangle(100, 100, 200, 200)});
        }
    }
}

#11


引用 10 楼 phommy 的回复:
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            //在所有控件之上画线
            var gp = new GraphicsPath();
            gp.AddLines(new[] {new Point(0, 0), new Point(300, 300), new Point(302, 300), new Point(2, 0), new Point(0, 0)});
            var line = new Control
                       {
                           Region = new Region(gp),
                           Bounds = new Rectangle(50, 50, 300, 300),
                           BackColor = Color.Red
                       };
            Controls.Add(line);
            line.BringToFront(); //保证线在上边

            //画个button对比用
            Controls.Add(new Button {Bounds = new Rectangle(100, 100, 200, 200)});
        }
    }
}

画根斜线会怎么样?

#12


WinForm怎样画一条线,要跨越多个控件的