簡體   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