2010-02-21 5 views
1

У меня есть Form1 и класс в файле AbstractClass.cs.Как ссылаться на метку WinForms из класса

Я хочу вызвать метку в Form1 и назначить строку msg тексту в этой таблице.

Как я могу это сделать ???

это мой класс.

//"Concrete CPUMoon" drived from AbstractCPU class when Diagnosticing CPU for Moon system 
class CPUMoon : AbstractCPU 
{ 
    public override void DisplayName(AbstractCPU a) 
    { 
     //Form1 f1 = new Form1(); 

     string msg; 
     // create reader & open file 
     StreamReader tr = new StreamReader("Moon.txt"); 
     String fromFile = tr.ReadLine(); 
     // close the stream 
     tr.Close(); 
     msg = "CPU diagnosing has be done for " + a.GetType().Name + "    " + fromFile; 
     //Console.WriteLine("CPU diagnosing has be done for " + a.GetType().Name + "    //" + fromFile); 
    } 
} 
+0

Вам нужно будет объяснить вашу проблему подробно !! Не можете ли вы просто назначить имя метки/id. lblName = msg; – azamsharp

+0

Является ли этикетка уже на форме? Используется ли метод DisplayName в том же потоке, что и форма? Если это так, вы можете сделать это (с меткой с именем «label1»: label1.Text = msg; –

+0

Я хочу передать строку в классе на метку в другой форме !!! – Eyla

ответ

0

Все, что вам нужно, это недвижимость в классе, а затем вызвать этот объект из класса, как

public class AnyCLass 
    { 
     public string Message{get; set;} 
     // any other methods or properties in class ... 
     // note thatin any method which you change the Message content it should be 
     // used and if you do not call the method which change the Message value , 
     // you have a string.Empty value 
     // to test this change the Message Value in Constructor like below 

     public AnyClass() 
     { 
      this.Message = "You have to change the value somewhere which call with user"; 
     } 
    } 

    public partial class Form1.cs 
    { 
     AnyClass instance = new AnyClass(); 
     Label1.Text = instance.Message; 
    } 
2

в вашем CPUMoon класса создать свойство

class CPUMoon : AbstractCPU 
{ 
    public string message {get;set;} 
    public override void DisplayName(AbstractCPU a) 
    { 
     //Form1 f1 = new Form1(); 

     // create reader & open file 
     StreamReader tr = new StreamReader("Moon.txt"); 
     String fromFile = tr.ReadLine(); 
     // close the stream 
     tr.Close(); 
     message = "CPU diagnosing has be done for " + a.GetType().Name + "    " + fromFile; 
     //Console.WriteLine("CPU diagnosing has be done for " + a.GetType().Name + "    //" + fromFile); 
    } 
} 

в вашем Form1 класса, вызовите метод CPUMoon и использовать свойство общественного сообщения в Form1 Label.

CPUMoon c = new CPUMoon(); 
label1.Text = c.Message; 
+0

благодарит вас за ответ Я сделал но когда я вызываю метод из формы он возвращает нулевое сообщение CPUMoon с = новый CPUMoon();. lbl1.Text = c.message; любые советы ?? – Eyla

+0

поставить точку отладки в методе DisplayName и посмотреть что происходит? –

+0

'c.Message' пуст, потому что' DisplayName() 'не был вызван. –

1

Элементы управления на форме являются закрытыми. Если вы хотите, чтобы иметь возможность изменять свойства одного из некоторого внешнего класса, то вам необходимо сделать вашу форму выставить общественную собственность, чтобы сделать так:

public class Form1 
{ 
    public string MyMessage 
    { 
     get { return label1.Text; } 
     set { label1.Text = value; } 
    } 
} 

Тогда становится тривиальной ссылкой:

Form1 form = new Form1(); 
form.MyMessage = "..."; 

Я должен указать, что то, что вы пишете, выглядит довольно сумасшедшим кодом спагетти. Но, не зная подробностей того, что вы пытаетесь сделать, это примерно столько же советов, сколько может предложить любой.

+0

Я реализую ваш код, но его возвращает null! любой совет, – Eyla

+0

@Eyla: Что возвращает' null'? свойство getter? плохо верните текст текста ярлыка. Вы должны быть более конкретными в том, что вы делаете, и в чем проблема, чтобы я мог ее отладить. – Aaronaught

Смежные вопросы