C# 滚动带有自定义绘制控件的面板
我有一个面板,其中包含一组自定义绘制的控件。我知道如何编程滚动面板,但问题是滚动时控件如何绘制。向右滚动时,控件显示为正常,但向左滚动时,控件显示不正确。这只是完整应用程序的开始,所以我现在有一些基本的测试。需要找到一种方法使控件在滚动时正确绘制 表格编号:C# 滚动带有自定义绘制控件的面板,c#,winforms,custom-controls,draw,C#,Winforms,Custom Controls,Draw,我有一个面板,其中包含一组自定义绘制的控件。我知道如何编程滚动面板,但问题是滚动时控件如何绘制。向右滚动时,控件显示为正常,但向左滚动时,控件显示不正确。这只是完整应用程序的开始,所以我现在有一些基本的测试。需要找到一种方法使控件在滚动时正确绘制 表格编号: public partial class Form1 : Form { Panel pn; private int location = 0; public Form1() { Initial
public partial class Form1 : Form
{
Panel pn;
private int location = 0;
public Form1()
{
InitializeComponent();
pn = new Panel()
{
Width = this.ClientRectangle.Width - 20,
Height = 120,
BackColor = Color.Black,
Left = 5,
Top = 20
};
pn.AutoScroll = false;
pn.VerticalScroll.Maximum = 100;
pn.HorizontalScroll.Maximum = this.ClientRectangle.Width - 100;
pn.VerticalScroll.Visible = false;
pn.HorizontalScroll.Visible = false;
pn.AutoScrollPosition = new Point(0, 0);
pn.AutoScroll = true;
this.KeyPreview = true;
this.KeyDown += new KeyEventHandler(keyPress);
for(int i = 0; i<10;i++)
{
CustomControl1 cc = null;
if (i % 2 != 0)
cc = new CustomControl1()
{
isOdd = true,
Width = 100,
Height = 100,
Left = (100*i)+5,
Top = 0
};
else
cc = new CustomControl1()
{
isOdd = false,
Width = 100,
Height = 100,
Left = (100 * i) + 5,
Top = 0
};
pn.Controls.Add(cc);
}
this.Controls.Add(pn);
}
private void keyPress(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.A:
if(location - 20 >0)
{
location -= 20;
pn.HorizontalScroll.Value = location;
}
else
{
location = 0;
pn.AutoScrollPosition = new Point(location, 0);
}
break;
case Keys.D:
if(location +20 < pn.HorizontalScroll.Maximum)
{
location += 20;
pn.HorizontalScroll.Value = location;
}
else
{
location = pn.VerticalScroll.Maximum;
pn.AutoScrollPosition = new Point(location, 0);
}
break;
}
foreach(Control c in pn.Controls)
{
c.Invalidate();
}
}
}
不要剪辑您的图形:
//Rectangle rc = new Rectangle(pe.ClipRectangle.X, pe.ClipRectangle.Y, 100, 100);
Rectangle rc = new Rectangle(0, 0, 100, 100);
还忘了提到向左滚动是“A”,向右滚动是“D”
,但向左滚动时,它看起来不正确
什么样子不正确?它通过显示控件上下一个控件将控件一分为二。我想让它显示面板的边缘。这很难解释,除非你测试代码并亲自查看,我确实测试过。我怎么知道你在努力实现什么?你没有把这个放在你的问题里,只是加了一张图片来说明我的意思
//Rectangle rc = new Rectangle(pe.ClipRectangle.X, pe.ClipRectangle.Y, 100, 100);
Rectangle rc = new Rectangle(0, 0, 100, 100);