簡體   English   中英

更改已在C#中以編程方式創建的標簽文本?

[英]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!";
    }

您面臨的問題與以下問題有關:

  • 在函數中創建對象時,只能在函數本身中使用它。
  • 為了能夠使用對象(在本例中為Label),您必須在函數之外聲明它,通常在所有函數之上。 (標簽txt1;)
  • 在函數外部聲明了Label之后,可以使用一個函數來實例化對象(txt1 = new Label();)
  • 在另一個函數中,您可以設置標簽的.Text屬性

編輯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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM