2016-09-06 28 views
-1

我是C#中的新手,現在我遇到了一個我無法解決的問題。無法獲取label.text c#

我已經創建了多個的TabPages相同的標籤:

public Label ChosenType = new Label(); 

    private void EvalType() 
    { 
     Label labelChosenType = new Label(); 
     labelChosenType.AutoSize = false; 
     labelChosenType.Left = 710; 
     labelChosenType.Top = 3; 
     labelChosenType.Width = 350; 
     labelChosenType.Height = 96; 
     labelChosenType.Text = "Some text"; 
     labelChosenType.Font = new Font("Arial", 14, FontStyle.Bold); 
     labelChosenType.TextAlign = ContentAlignment.MiddleCenter; 
     labelChosenType.BackColor = Color.Red; 
     labelChosenType.ForeColor = Color.White; 
     labelChosenType.Click += new EventHandler(labelChosenType_Click); 
     tabControl1.SelectedTab.Controls.Add(labelChosenType); 
    } 

    private void SetGeneralInfo() 
    {   
     for (int i = 0; i < tabControl1.TabCount; i++) 
     { 
      tabControl1.SelectTab(i); 
      EvalType(); 
     } 
    } 

    private void labelChosenType_Click(object sender, EventArgs e) 
    { 
     MessageBox.Show(labelChosenType.Text); 
    } 

的問題是,消息框爲空。爲什麼我無法從標籤中獲得文字? (這不是主要功能,但這是最簡單的方法,以顯示問題)

我試圖添加名稱= =「一些文本」+我,但它是所有標籤上的相同,它didn沒有工作。

謝謝!

+0

出現的消息框,但它是空白 – donmichael

+0

好像標籤對象的實例僅限於虛空方法,你需要把它'outside'虛空方法 – TheQuestioner

+2

在'labelChoosenType_Click()'方法,「labelChoosenType」標識符指的是什麼?它肯定不會引用'EvalType()'方法中聲明的** local **變量'labelChoosenType'。你有沒有把它設置爲有用的東西?請提供可靠地再現問題的良好[mcve]。哦,這個詞拼寫爲「選擇」。 –

回答

0

沒有看到更多的代碼...我最好的猜測是你所指的labelChooseType_Click()事件處理程序中的labelChoosenType不是你認爲的Label

每個新Label添加到TabControlnew Label - 和標籤由labelChoosenTypeEvalType()方法的簡稱。因此,當您單擊Label時,text屬性引用您尚未使用EvalType()方法初始化的另一個對象。

如果您嘗試在單個事件處理函數中處理同一類型的多個對象,那麼使用參數object sender會更好。就目前而言,完全不清楚labelChoosenType引用的是什麼對象。

private void labelChoosenType_Click(object sender, EventArgs e) 
{ 
    Label clickedLabel = sender as Label; 
    if (clickedLabel != null) 
    { 
     MessageBox.Show(clickedLabel.Text); 
    } 
    else 
    { 
     // clickedLabel is not a Label or is null, do something else 
    } 
} 
-1

需要聲明的標籤對象公開/私有(它需要的void函數外)作爲當前的結構,標籤對象僅在void EvalType()功能

public Label labelChoosenType = new Label(); 

private void EvalType() 
{ 
    labelChoosenType.AutoSize = false; 
    labelChoosenType.Left = 710; 
    labelChoosenType.Top = 3; 
    labelChoosenType.Width = 350; 
    labelChoosenType.Height = 96; 
    labelChoosenType.Text = "Some text"; 
    labelChoosenType.Font = new Font("Arial", 14, FontStyle.Bold); 
    labelChoosenType.TextAlign = ContentAlignment.MiddleCenter; 
    labelChoosenType.BackColor = Color.Red; 
    labelChoosenType.ForeColor = Color.White; 
    labelChoosenType.Click += new EventHandler(labelChoosenType_Click); 
    tabControl1.SelectedTab.Controls.Add(labelChoosenType); 
} 

private void labelChoosenType_Click(object sender, EventArgs e) 
{ 
    MessageBox.Show(labelChoosenType.Text); 
} 

嘗試和檢查訪問如果這可行。

+0

我已經在問題之前宣佈了它,只是沒有提到它 - 對不起,拼寫錯誤 – donmichael

+0

* Label對象只能在void EvalType()函數中訪問* - 這不是真的。對它的引用也將被添加到「TabControl」對象中,並作爲「對象發送者」攜帶到click事件處理程序中。 – khargoosh