[英]change the text of a label which has been created programmatically in C#?
我在應用程序運行時(在運行時)在私有void中txt1
編程方式創建了一個名為txt1
的標簽,我想在另一個私有void中更改此標簽的文本,但我無法從另一個void訪問txt1
!
用於動態創建標簽的腳本:
private void labelCreate()
{
Label txt1 = new Label();
}
腳本改變文本txt1
已在創建labelCreate
無效(這個腳本不起作用,因為txt1
還沒有被宣布為對照):
private void labelTextChange()
{
txt1.Text = "Hello World!";
}
更新1:我需要創建100個具有不同名稱的標簽,然后我將使用for
語句創建100個標簽。 我無法聲明100個全局變量。 所以我需要傳遞變量而不是將它們聲明為全局變量。
更新2:是否可以將for
語句中的100個標簽聲明為全局?
更新3:假設我想從數據庫中獲取一些數據,我想在唯一標簽中單獨顯示它們。 所以我給每個標簽命名並根據我從DB獲得的不同數據更改它們的文本! 所以我需要2個空洞:一個用於根據我從DB獲得的行數創建標簽,另一個空白用於更改我之前創建的標簽文本!
問題:如何訪問在不同的void中創建的控件? 如果有答案請分享鏈接:)
謝謝
在您的班級全球申報Label
Label txt1;
private void labelCreate()
{
txt1 = new Label();
}
比訪問另一種方法
private void labelTextChange()
{
txt1.Text = "Hello World!";
}
編輯1
如果您有多個標簽,在創建標簽時,您可以將這些對象存儲在一個數組中,當您需要更改這些文本時,請執行此操作
Label[] labelsArray //declare globally
private void labelTextChange()
{
// Get Label objects from array
labelsArray = { label1, label2, label3, label4, label5 };
for (int i = 0; i < labelsArray.Count(); i++)
{
labelsArray[i].Text = "Hello.. " + (i + 1).ToString();
}
}
如果您有動態數量的標簽,則可以使用列表。
List<Label> labels;
private void labelCreate()
{
labels = new List<Label>();
for(int i = 0; i < 100; i++)
{
labels.Add(new Label());
}
}
private void labelTextChange()
{
// use the index or search for the name of the label
labels[42].Text = "Hello World!";
}
以下是有關變量生命周期及其可訪問性的信息(可以從中讀取和/或寫入變量),您可以找到helpflul。
在您的代碼中,Label1是一個私有變量,在labelTextChange方法中無法訪問。
您需要將txt1聲明為類變量。
Label txt1;
private void labelCreate()
{
txt1 = new Label();
}
private void labelTextChange()
{
txt1.Text = "Hello World!";
}
您面臨的問題與以下問題有關:
編輯1:您正在尋找的是一個可以存儲多個標簽的字段,如List或數組。 考慮到這個領域的用法,我會說List是一個不錯的選擇。
如果你想讓你的生活更輕松,我會使用ListBox或DataGridView而不是很多標簽。 據我所知,標簽並不意味着以您描述的方式使用,如上所述,還有其他控件更適合此類應用。
編輯2:
int amountOfRows;
Label[] labels;
public void setLabels(List<string> inputData)
{
//allocate memory for the array
amountOfRows = inputData.Count;
labels = new Label[amountOfRows];
for(int i=0; i<amountOfRows; i++)
{
labels[i] = new Label();
//set properties like location and size of labels here first
labels[i].Text = inputData[i];
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.