gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:50:58 25 4
gpt4 key购买 nike

我有一个显示在控件中的 3D 图像,我可以对其执行几项操作(旋转、缩放、绘制东西等...)。此控件通过 Dock 填充到面板中,工具栏允许我们控制图像操作。

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

  • 如果用户打开1张图片,它会占用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));
}
}

您可以将 new Button 替换为您的控件名称,我使用按钮作为示例控件。此代码假定通过点击添加新按钮,应将一行或一列添加到布局中。您可以对其进行自定义以执行任何您想要的操作。

希望这对您有所帮助。

关于c# - 动态排列要在面板内平铺的控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13731162/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com