2012-12-05 26 views
2

我有一个控制中显示的3D图像,我可以做几件事(旋转,缩放,绘制东西等)。该控件将Dock填充到面板中,工具栏允许我们控制图像操作。动态安排控制平铺在一个面板内

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

  • 如果用户打开1个图像,它占用的空间
  • 如果用户选择2个的图像的100%,它们是由侧
  • 如果用户选择4个 图像中示出侧,他们平铺。
  • 等...

基本上,这可以很容易地与MDI形式实现,但是该模块嵌套到一个应用程序,以便是不可能的。我可能这一切都手动做到这一点,通过计算大小和使用TableLayoutPanel,但我认为必须有一些东西在那里做的伎俩。

有什么建议吗?

注:我在winform,我也有DevExpress的11

回答

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名称,我用按钮作为示例控件。 这段代码假定通过点击添加新按钮,应该将一行或一列添加到布局中。你可以自定义它来做你想做的。

希望这会有所帮助。