动态生成的图像网格

时间:2017-06-08 15:00:14

标签: c# .net winforms visual-studio

我正在编写一个Winform应用程序来处理打印在工作表上的产品网格。为了更有效地与我的最终用户沟通,我的任务是创建一个网格的可视化表示(而不是仅仅给它们“在文本中排列x列)”来描述无法处理工作表上的哪些项目。 / p>

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

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

类似的东西:

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

对不起,如果这是一个愚蠢的问题。我对c#感到很自在,但对于为这些事情设计GUI几乎没有经验。

1 个答案:

答案 0 :(得分:1)

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

如果它有助于其他任何人在这里有一些我发现有用的参考资料来学习如何使用TableLayoutPanels:

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

将图片文件添加到picturebox 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);
    }

}