显示垂直滚动条时控制位置更改



一旦显示面板的垂直滚动条,控件的位置就会改变。 已启用
Panel 中的属性AutoScroll法典:

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);
}

滚动条显示时控件MsgItem的位置太远 这里是一个示例 它的外观看到问题

你可以这样做

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;
    }
}

因此,对于使用TableLayoutPanelFlowLayoutPanel的布局方案,建议

使用

使用 FlowLayoutPanel 而不是 Panel并且您不必设置位置

最新更新