C# 在面板中动态排列要平铺的控件

C# 在面板中动态排列要平铺的控件,c#,winforms,devexpress,C#,Winforms,Devexpress,我有一个三维图像显示在一个控制,我可以做几件事(旋转,缩放,画东西,等等…)。此控件填充到面板中,工具栏允许我们控制图像操作 我希望能够通过动态平铺图像来同时查看多个图像。因此: 如果用户打开一个图像,它将占用100%的空间 如果用户选择2个图像,它们将并排显示 如果用户选择4 图像,它们是平铺的 等等 基本上,这可以通过MDI表单轻松实现,但该模块嵌套在应用程序中,因此不可能实现。我可以通过计算大小和使用TableLayoutPanel手动完成这一切,但我想一定有什么东西可以做到这一点 有

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

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

  • 如果用户打开一个图像,它将占用100%的空间
  • 如果用户选择2个图像,它们将并排显示
  • 如果用户选择4 图像,它们是平铺的
  • 等等
基本上,这可以通过MDI表单轻松实现,但该模块嵌套在应用程序中,因此不可能实现。我可以通过计算大小和使用TableLayoutPanel手动完成这一切,但我想一定有什么东西可以做到这一点

有什么建议吗


注意:我在winform中,我有DevExpress 11,如果您只需要平铺,
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));
            }
        }
private void btnNewImage\u单击(对象发送方,事件参数e)
{
如果(imgCount==0)
添加(新按钮{Text=“Image”+++imgCount,Dock=DockStyle.Fill},0,0);
其他的
{
//tlp是作为Dock.Fill停靠的TableLayoutPanel
if(tlp.RowCount==tlp.ColumnCount)
{
tlp.ColumnCount++;
对于(int i=0;i
您可以用控件名替换
new Button
,我使用Button作为示例控件。 这段代码假设通过点击AddNew按钮,一行或一列应该被添加到布局中。你可以自定义它来做任何你想做的事情

希望这有帮助