2016-09-06 17 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); 
    } 

問題は、メッセージボックスが空白であるということです。なぜ私はラベルからテキストを取得できないのですか?

私は= "some text" + iのような名前を追加しようとしましたが、それはすべてのタブで同じでしたが、それはありませんでした(これは主な機能ではありません)仕事はありません。

ありがとうございました!あなたの現在の構造のよう(それはvoid関数の外にする必要があります)ラベルは、プライベート公開/オブジェクト宣言する必要があり

+0

メッセージボックスが表示されますが、ラベルオブジェクトのインスタンス化が唯一voidメソッドに制限されているよう – donmichael

+0

はそう、あなたが 'labelChoosenType_Click()'メソッドはvoidメソッド – TheQuestioner

+2

outside' 'それを配置する必要があり、空白であります、 'labelChoosenType'識別子は何を指していますか?これは 'EvalType()'メソッドで宣言された** local **変数 'labelChoosenType'を参照していません。あなたはそれを何か有用なものに設定しましたか?問題を確実に再現する良い[mcve]を提供してください。ああ、その言葉は「選ばれた」と綴られています。 –

答えて

0

より多くのコードを見ずに...私の最高の推測では、labelChoosenTypeあなたがlabelChooseType_Click()イベントハンドラで参照しているが、あなたはそれだと思うLabelではないということです。ラベルはEvalType()方法のlabelChoosenType外で呼ばないと-

あなたはTabControlに追加する各新しいLabel

new Labelです。したがって、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 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イベントハンドラに' object sender'として渡されます。 – khargoosh

関連する問題