gpt4 book ai didi

c# - 绘制控件

转载 作者:行者123 更新时间:2023-11-30 21:58:33 28 4
gpt4 key购买 nike

我有一个用于放置面板的表单。在这个面板中,我添加了一些图片框。我的问题是我想在此面板内绘制可以覆盖其他控件(图片框)的线条。这些线必须在面板边界内

我尝试在上面的控件上绘制表单,用下面的代码覆盖 WS_CLIPCHILDREN 值。

const int WS_CLIPCHILDREN = 0x02000000;


protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.Style &= ~WS_CLIPCHILDREN;
//cp.Style &= ~0x04000000; //WS_CLIPSIBLINGS
//cp.ExStyle |= 0x00000020; //WS_EX_TRANSPARENT
//cp.Style &= 0x7DFFFFFF;

return cp;
}
}

出现面板滚动条时出现问题。我绘制的代码是在 Form1_Paint 事件上,当我滚动面板时,所有的线条都散布在整个表单中。

   private void panel3_Paint(object sender, PaintEventArgs e)
{
for (int i = 0; i < from.Count; i++)
{
AdjustableArrowCap bigarrow = new AdjustableArrowCap(5, 5);
Pen pen = new Pen(Color.Black, 3);
pen.StartCap = System.Drawing.Drawing2D.LineCap.Round;
pen.CustomEndCap = bigarrow;
Graphics g;
g = this.CreateGraphics();
g.DrawLine(pen, from[i].X - panel3.HorizontalScroll.Value, from[i].Y - panel3.VerticalScroll.Value, to[i].X - panel3.HorizontalScroll.Value, to[i].Y - panel3.VerticalScroll.Value);
}
}

from & to 数组是两个列表变量,我在其中保存行应该开始和结束的位置。见下图:

Before scroll manually

After scrolling

我不想让红圈里的那些线显示出来有什么想法吗?

最佳答案

尝试使用 Paint 事件参数附带的 Graphics 对象,而不是创建自己的图形。

这样你就可以:

private void panel3_Paint(object sender, PaintEventArgs e)
{
for (int i = 0; i < from.Count; i++)
{
AdjustableArrowCap bigarrow = new AdjustableArrowCap(5, 5);
Pen pen = new Pen(Color.Black, 3);
pen.StartCap = System.Drawing.Drawing2D.LineCap.Round;
pen.CustomEndCap = bigarrow;

var g = e.Graphics;
g.DrawLine(pen, from[i].X - panel3.HorizontalScroll.Value, from[i].Y - panel3.VerticalScroll.Value, to[i].X - panel3.HorizontalScroll.Value, to[i].Y - panel3.VerticalScroll.Value);
}
}

关于c# - 绘制控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29999637/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com