【问题标题】:Dynamically Generated Grid of Images动态生成的图像网格
【发布时间】:2017-11-10 09:03:08
【问题描述】:

我正在编写一个 Winform 应用程序,用于处理打印在一张纸上的产品网格。为了更有效地与我的最终用户沟通,我的任务是创建网格的可视化表示(而不是仅仅给他们“Row x Col y in text”)来描绘无法处理工作表上的哪些项目。

我的第一个想法是使用在网格中对齐的图像网格(绿色复选标记/红色 X)来匹配应用程序实际处理的工作表。这种方法的问题在于,最终我们将拥有使用不同纸张对齐方式的不同作业。一个可能是 3x10 网格,另一个可能是 1x8 等。

我可以使用什么东西来定义我的表单区域为图像保留,并且还有一种方法可以插入我的图像文件的副本,这些副本已经调整大小以适合该区域?

类似:

container.add(
    new Image("myFileLocation", imgHeight, imgWidth), 
    (container.height / numRows), 
    (container.width/numCols)
    );

?

对不起,如果这是一个愚蠢的问题。我对 c# 很熟悉,但为这些东西设计 GUI 的经验几乎为零。

【问题讨论】:

  • 在表格上添加TableLayoutPanel,要求行数和列数(3x10 等),并将图像放在不同的单元格中

标签: c# .net winforms visual-studio


【解决方案1】:

@ASh 这正是我想要的,谢谢。

如果它可以帮助其他人,这里有一些参考资料,我发现它们对学习如何使用 TableLayoutPanels 很有用:

在运行时生成行/列。 TableLayoutPanel rows & columns at runtime

添加图片文件到图片框 Set image source to picturebox which is added dynamically to Table Layout Panel

调整图片框内的图像大小(拉伸填充) Fit Image into PictureBox

在单元格内居中图像 https://docs.microsoft.com/en-us/dotnet/framework/winforms/controls/how-to-align-and-stretch-a-control-in-a-tablelayoutpanel-control

我的代码:

int rows = 7; //Will come from database
int cols = 3; //Will come from database
int colWidth;
int rowHeight;
PictureBox pbox;
Random rnd = new Random();

colWidth = 100 / cols;
if (100 % cols != 0)
    colWidth--;

rowHeight = 100 / rows;
if (100 % rows != 0)
    rowHeight--;


tabLP.Controls.Clear();
tabLP.ColumnStyles.Clear();
tabLP.RowStyles.Clear();

tabLP.ColumnCount = cols;

for (int i = 0; i < rows; i++)
{
    tabLP.RowStyles.Add(new RowStyle(SizeType.Percent, rowHeight));                
    for (int j = 0; j < cols; j++)
    {
        tabLP.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, colWidth));

        if (rnd.NextDouble() > 0.5 )
        {
            pbox = new PictureBox() { Image = Properties.Resources.red_X};
        }
        else
        {
            pbox = new PictureBox() { Image = Properties.Resources.checkbox_green };
        }

        pbox.Dock = DockStyle.Fill;
        pbox.SizeMode = PictureBoxSizeMode.StretchImage;
        tabLP.Controls.Add(pbox, j, i);
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-05
    • 2015-05-09
    • 2011-11-17
    • 1970-01-01
    • 2021-08-24
    • 1970-01-01
    • 2011-03-31
    • 2012-04-21
    相关资源
    最近更新 更多