0

次のコードでパネルを左右に流そうとしています。

private void btnLeft_Click(object sender, EventArgs e)
{
    if (flowPanelItemCategory.Location.X <= xpos)
    {
        xmin = flowPanelItemCategory.HorizontalScroll.Minimum;
        if (flowPanelItemCategory.Location.X >= xmin)
        {
            xpos -= 100;
            flowPanelItemCategory.Location = new Point(xpos, 0);
        }
    }
}

private void btnRight_Click(object sender, EventArgs e)
{
    if (flowPanelItemCategory.Location.X <= xpos)
    {
        xmax = flowPanelItemCategory.HorizontalScroll.Maximum;
        if (flowPanelItemCategory.Location.X < xmax)
        {
            xpos += 100;
            flowPanelItemCategory.Location = new Point(xpos, 0);
        }
    }
}

しかし、フロー パネルは、.HorizontalScroll.Maximum;

どうすればこれを修正できますか?

4

1 に答える 1

0

最初に驚いたのは、Location プロパティを設定している理由です。そうすれば、スクロール位置を設定していませんが、実際には FlowLayoutPanel の場所を移動しています。

AutoScrollこれを試すこともできますが、次のように設定した場合にのみ機能するようですTrue:

private void btnLeft_Click(object sender, EventArgs e)
{
    int scrollValue = flowPanelItemCategory.HorizontalScroll.Value;
    int change = flowPanelItemCategory.HorizontalScroll.SmallChange;
    int newScrollValue = Math.Max(scrollValue - change, flowPanelItemCategory.HorizontalScroll.Minimum);
    flowPanelItemCategory.HorizontalScroll.Value = newScrollValue;
    flowPanelItemCategory.PerformLayout();
}

private void btnRight_Click(object sender, EventArgs e)
{
    int scrollValue = flowPanelItemCategory.HorizontalScroll.Value;
    int change = flowPanelItemCategory.HorizontalScroll.SmallChange;
    int newScrollValue = Math.Min(scrollValue + change, flowPanelItemCategory.HorizontalScroll.Maximum);
    flowPanelItemCategory.HorizontalScroll.Value = newScrollValue;
    flowPanelItemCategory.PerformLayout();
}

このコードは、現在のスクロール ビューを取得し、'scroll-step-size' に基づいて増分または減分しますが、その境界を超えることはありません。

于 2014-12-09T13:18:49.927 に答える