C# FlowLayoutPanel仅在垂直方向自动调整大小?

C# FlowLayoutPanel仅在垂直方向自动调整大小?,c#,winforms,visual-studio,C#,Winforms,Visual Studio,我正在FlowLayoutPanel中动态加载图像。我需要这个面板自动大小,但只有垂直 这可能吗?如果可能,我该如何实现它?简单地说,添加一个control added类型的事件: private void flowLayoutPanel1_ControlAdded(object sender, ControlEventArgs e) { if (flowLayoutPanel1.Controls.Count % 10 == 0) flowLayoutPanel1.Set

我正在
FlowLayoutPanel
中动态加载图像。我需要这个面板自动大小,但只有垂直


这可能吗?如果可能,我该如何实现它?

简单地说,添加一个control added类型的事件:

private void flowLayoutPanel1_ControlAdded(object sender, ControlEventArgs e)
{
    if (flowLayoutPanel1.Controls.Count % 10 == 0)
        flowLayoutPanel1.SetFlowBreak(e.Control as Control, true);
}
设置
AutoSize=true


设置
flowdirection=LeftToRight

我从面板上手动设置了大小。例如:


它对我有用。Thx all

这看起来可能是一个丑陋的解决方案,但它对我有效:

  • 在变量中存储面板的当前宽度
  • 将自动调整模式设置为true
  • 执行需要调整面板大小的操作
  • 从变量恢复上一个面板的宽度

                int i = _panel1.Width;
                _panel1.AutoSize = true;
                _panel1.AutoSizeMode = AutoSizeMode.GrowOnly;
                /*some action going on here*/
                _panel1.AutoSize = false;
                _panel1.Size = new Size(_panel1.Width, 80);
    
  • 也许吧


    会帮助你的。

    有可能吗?您试过了吗?我只从flowLayoutPanel=true设置了AutoSize属性;但是面板“水平增加”在添加到True的控件上设置FlowBreak属性。如果您在代码中添加它们,则使用面板的SetFlowBreak()方法。您也可能会被问到这个问题,该问题涉及FlowLayoutPanel中的图片缩放:
    int newHeight=listImages.Count/10*100与int
    newHeight=listImages相同。计数*10我知道,但int newHeight=listImages.Count/10*100;更好的理解是10是每行的图片数,100是每行的高度提示:它甚至更易于阅读和维护:
    int newHeight=listImages.Count/numberOfPicturesPerLine*picturehight
    ,定义为
    const int numberOfPicturesPerLine=10这将以垂直方式添加控件,但是列表现在比我的面板大,并且我的滚动条不见了,我如何重新获取它?@Giancarlo您的滚动条不显示可能有多种原因。所有这些都是设置每行控件的数量。我建议做一些进一步的研究和修补,如果你还在挣扎,问一个新问题。
    
                int i = _panel1.Width;
                _panel1.AutoSize = true;
                _panel1.AutoSizeMode = AutoSizeMode.GrowOnly;
                /*some action going on here*/
                _panel1.AutoSize = false;
                _panel1.Size = new Size(_panel1.Width, 80);
    
    FlowLayoutPanel1.WrapContents = False;
    FlowLayoutPanel1.FlowDirection = System.Windows.Forms.FlowDirection.TopDown;