动态排列要在面板内平铺的控件

时间:2012-12-05 19:45:59

标签: c# winforms devexpress

我有一个3D图像显示在一个控件中,我可以做几件事(旋转,缩放,绘制东西等......)。此控件是Dock填充到面板中,工具栏允许我们控制图像操作。

我希望能够通过动态平铺图像来同时查看多个图像。所以:

  • 如果用户打开1张图片,则会占用100%的空间
  • 如果用户选择了2张图片,则会并排显示
  • 如果用户选择4 图像,它们是平铺的。
  • 等...

基本上,这可以通过MDI表单轻松实现,但此模块嵌套到应用程序中,因此无法实现。通过计算大小并使用TableLayoutPanel,我可以手动完成所有操作,但我认为必须有一些可以解决问题的方法。

有什么建议吗?

注意:我在winform中,我确实有DevExpress 11

1 个答案:

答案 0 :(得分:1)

如果您只是需要平铺,TableLayoutPanel可以完全为您做到这一点:

    private void btnNewImage_Click(object sender, EventArgs e)
    {
        if (imgCount == 0)
            tlp.Controls.Add(new Button { Text = "Image " + ++imgCount, Dock = DockStyle.Fill }, 0, 0);
        else
        {
            // tlp is the TableLayoutPanel which is docked as Dock.Fill
            if (tlp.RowCount == tlp.ColumnCount)
            {
                tlp.ColumnCount++;
                for (int i = 0; i < tlp.RowCount; i++)
                    tlp.Controls.Add(new Button { Text = "Image " + ++imgCount, Dock = DockStyle.Fill }, tlp.ColumnCount - 1, i);
                tlp.ColumnStyles.Clear();
                for (int i = 0; i < tlp.ColumnCount; i++)
                    tlp.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, (float)100.0 / (float)tlp.ColumnCount));
            }
            else
            {
                tlp.RowCount++;
                for (int i = 0; i < tlp.ColumnCount; i++)
                    tlp.Controls.Add(new Button { Text = "Image " + ++imgCount, Dock = DockStyle.Fill }, i, tlp.RowCount - 1);
                tlp.RowStyles.Clear();
                for (int i = 0; i < tlp.RowCount; i++)
                    tlp.RowStyles.Add(new RowStyle(SizeType.Percent, (float)100.0 / (float)tlp.RowCount));
            }
        }

您可以使用控件名称替换new Button,我使用按钮作为示例控件。 此代码假设通过点击添加新按钮,应该在布局中添加行或列。您可以自定义它以执行任何操作。

希望这有帮助。