2016-10-03 79 views
0

我使用的是C#和Windows窗體,我有一個包含20個標籤的組框(頂部10行,底部10行)。基於組中的位置屬性設置label.text

我想根據它們在組框中的位置座標來設置這些標籤的Text屬性。同一行中所有標籤的Y座標保持不變,只有X座標變化。

Example locations: 

label1.Location is (6,16), label2.Location is (33,16) ... label10.Location is (150,16) 

label11.Location is (6,43), label12.Location is (33,43) ... label20.Location is (150,43) 

現在原本label.Text被設定爲label_[int a]_[int b]其中int a是1和10之間的一個數,以顯示它的「列」號和int b是要麼1 OR 2爲它的「行」數。

現在,這一切都很好,但我需要60個分組框,每個分組有20個標籤,並且對每個標籤進行重命名是相當痛苦的,這就是爲什麼id喜歡這樣做。

其原因是因爲每個「列」在頂部或底部行中只有1個數字。

現在我的第一個問題是; 是否可以通過其位置屬性設置文本屬性?

第二,stackoverflow蜂巢的思想能想到一個更好/有效的方式來做到這一點?

NOTE: 我已經嘗試將標籤加載到列表中,嘗試使用循環,但是這會在選擇適當的標籤時產生複雜性。

我想開發一個單獨的方法,可以在每個groupbox上單獨使用。

現在,雖然這一切都在我心中有意義,但我並不立即看到我可以提供哪些其他信息。

+1

首先,這對我沒有意義「我有一個包含12個標籤的組框(上排10個,下排10個)」。我可能睡過幾次數學課,但我想我記得10 + 10等於20而不是12.其次,一般來說,創建一個將容器作爲參數的方法,讓它通過孩子循環來設置標籤。 – Kevin

回答

-1

我想可以試試GroupBox.Controls的foreach,你也可以在這個foreach中查看他們的名字。例如:

foreach(Label lbl in groupBox1.Controls 
{ 
    if (lbl.Name.Contains("[int_a]_[int_b]")) 
    { 
     lbl.Text = "Label Text"; 
    } 
} 

我想這給你一個基礎,你需要什麼

1

這聽起來像一個很好的候選人的用戶控制我。

使用groupbox和labels設計一個用戶控件。 公開你需要的操作。可能是將命名約定設置爲對您更有意義的好時刻。

另一種方法可能是從代碼生成標籤而不是像@Kevin所說的設計時間。創建一個方法,將您帶到需要的groupbox和其他值。然後根據需要設置標籤名稱和位置(查看設計器文件)。

+0

definitly我正在尋找的答覆,現在嘗試了這一點,並會看到它是否以我需要它的方式工作,希望看到別人提出之前我將其標記爲我的答案,謝謝,甚至沒有考慮自定義控制+1 –