繁体   English   中英

在C#中使用循环从列表创建对象

[英]create objects from list with loop in C#

背景:在大多数情况下,我是使用C#进行自学的,因此,如果这是一个简单的问题,我深表歉意。 我正在创建一些影响邮件列表的东西(每个对象都有名称,地址,联系信息等),并且将在标签中打印出来(每个打印页面有两个列和四行)。 我在formMain中有一个列表,您可以在其中添加,编辑和删除单个标签,并且我有一个表单printPreview(one)用于从列表中选择的单个条目。

问题:我正在尝试为整个列表创建打印预览表单; 为列表中的每个对象生成一个组框(包含文本框和图片框)-这样,我将具有与对象完全相同的标签数量-然后用列表中每个对象各自的内容填充每个框。 每个分组框,文本框和图片框都有特定的大小,并且会隔开,因此每个标签之间都有空间。 所以这是我想要实现的伪代码;

//box[num] contains
//text box at location(6,19)
//picture box at location(222,19)

int locX = 0;
int locY = 0;
listObj = list.first;

for (int i = 0; i < list.count; i++)
{
  //create box[i] at location (locX, locY);
   box[i].textbox.text = listObj.text;
   box[i].picturebox.image = Image.FromFile(listObj.photoLocation);
   if(i%2)
   {
       locX+=400;
    }
   else
   {
       locY+=248;
       locX=0;
    }
   listObj = listObj.next;
}

现在,我知道其中存在很多漏洞,但是我只需要基本知识:如何让我的程序以与列表中对象数量相等的形式创建新的组框?

您的措辞让我有些不满,但是我将尝试解决这个问题。 如果我走了,请原谅我。

回答直接,简单的答案; 向表单添加组框:


GroupBox groupbox1 = new System.Windows.Forms.GroupBox();
groupbox1.Location = new System.Drawing.Point(x, y);
form1.Controls.Add(groupbox1);

Textbox textbox = new System.Windows.Forms.Textbox();
textbox.Location = new System.Drawing.Point(x2, y2);
groupbox1.Controls.Add(textbox);

// same for picturebox, where x/x2 and y/y2 are your calculated 
// placements of the controls

使它们与列表中的数目相等将需要某种迭代。 您必须创建一个列表并添加它们,或者仅对于(i = 0-> N)添加它们。 不过,您必须为每个展示位置计算数学,具体取决于您想要的外观(边距,填充,大小等)

现在,更详细一点:

我认为TableLayoutPanel或FlowLayoutPanel将非常适合您的工作。 将Table / FlowLayoutPanel放到对话框中,然后在代码中以编程方式创建组框并将其添加到表中。 两者都擅长为您处理控件定位。 如果您事先确定表格的大小,则不必担心查找位置,只需将它们一次添加一次,然后layoutpanel即可处理其余位置。


foreach(GroupBox groupbox in labelGroupBoxes)
{
    tableLayoutPanel.Controls.Add(groupbox);
}

我认为,您需要考虑几件事。 Winform控件的FlowlayoutPanel,TableLayoutPanel和Autosize属性是一些。 创建新窗体,添加布局面板,开始创建所需标签大小的组框,将tablelayoutpanel的行/列大小设置为AutoSize(如果使用的话),然后开始粘贴。

这是桌子布局面板上的一个相当不错的视频,我找不到我真正想要的那个...

http://msdn.microsoft.com/zh-CN/vstudio/Video/bb798032

flowlayoutpanel上的视频:

http://msdn.microsoft.com/zh-CN/vstudio/Video/bb798028

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM