C# 当显示垂直滚动条时,控制位置发生变化
一旦显示面板的垂直滚动条,控件的位置就会改变。C# 当显示垂直滚动条时,控制位置发生变化,c#,winforms,C#,Winforms,一旦显示面板的垂直滚动条,控件的位置就会改变。面板中的属性AutoScroll已启用 代码: 控件MsgItem的位置太远,此时滚动条显示了它的外观示例 将FlowLayoutPanel与而不是面板一起使用 而且您不必设置位置使用FlowLayoutPanel with而不是Panel 您不必设置位置您可以这样做 var count = panel2.Controls.Count; MsgItem item = new MsgItem("testing"); item.Top = count =
面板中的属性AutoScroll
已启用
代码:
控件MsgItem
的位置太远,此时滚动条显示了它的外观示例
将FlowLayoutPanel与而不是面板一起使用
而且您不必设置位置使用FlowLayoutPanel with而不是Panel
您不必设置位置您可以这样做
var count = panel2.Controls.Count;
MsgItem item = new MsgItem("testing");
item.Top = count == 0 ? 10 : (panel2.Controls[count - 1].Bottom + 10);
panel2.Controls.Add(item);
对于您的原始代码
int an = 10;
private void Incoming_Click(object sender, EventArgs e)
{
MsgItem item = new MsgItem("testing");
item.Top = an;
an = item.Top + item.Height + 10;
panel2.Controls.Add(item);
}
解决方法是跟踪面板的滚动
private void panel2_Scroll(object sender, ScrollEventArgs e)
{
switch (e.ScrollOrientation)
{
case ScrollOrientation.VerticalScroll:
var change = e.NewValue - e.OldValue;
an -= change;
break;
}
}
因此,对于使用TableLayoutPanel
或FlowLayoutPanel
的布局方案,建议您这样做
var count = panel2.Controls.Count;
MsgItem item = new MsgItem("testing");
item.Top = count == 0 ? 10 : (panel2.Controls[count - 1].Bottom + 10);
panel2.Controls.Add(item);
对于您的原始代码
int an = 10;
private void Incoming_Click(object sender, EventArgs e)
{
MsgItem item = new MsgItem("testing");
item.Top = an;
an = item.Top + item.Height + 10;
panel2.Controls.Add(item);
}
解决方法是跟踪面板的滚动
private void panel2_Scroll(object sender, ScrollEventArgs e)
{
switch (e.ScrollOrientation)
{
case ScrollOrientation.VerticalScroll:
var change = e.NewValue - e.OldValue;
an -= change;
break;
}
}
因此,对于使用TableLayoutPanel
或FlowLayoutPanel
的布局方案,建议您尝试使用“item.Location.Y”而不是“item.Top”,在计算时,您需要使用autoscrollposition,而不仅仅是item.Top:an=item.Top+item.Height+10+panel2.autoscrollposition.Y代码>-另请参阅。我想这是复制品!如果你做得好,你说的话就行不通了,但可能有不止一种方法..你可能想尝试使用“item.Location.Y”而不是“item.Top”你需要使用autoscrollposition,而不仅仅是item.Top在计算时:an=item.Top+item.Height+10+panel2.autoscrollposition.Y代码>-另请参阅。我想这是复制品!如果你做对了,你说的话就行不通了,但可能不止一种方法…不应该左进右出不应该左进右出这很好,您能解释一下问题是什么吗?当您滚动面板时,子控件的布局正在改变,并且值an
变得错误。查看我的回答中的更新。这很好,你能解释一下问题是什么吗?当你滚动面板时,子控件的布局正在改变,值an
正在出错。请参阅我的答案中的更新