2010-02-21 2 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 클래스 CPUMoon 메소드를 호출하고 Form1에 라벨의 공공 메시지 속성을 사용하여, 귀하를 Form1 클래스에

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); 
    } 
} 

라는 속성을 만듭니다.

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

답장을 보내 주셔서 감사합니다. . 내가 양식에서 메서드를 호출 할 때하지만 CPUMoon의 C = 새로운 CPUMoon을() 널 (null) 메시지를 반환합니다; lbl1.Text = c.message, 조언 ?? – Eyla

+0

가 표시 이름 방법에 디버그 포인트를 넣어 및 참조 무엇이 올 것입니까? –

+0

'DisplayName()'이 호출되지 않았기 때문에'c.Message'가 비어 있습니다. –

1

양식의 컨트롤은 비공개입니다.

Form1 form = new Form1(); 
form.MyMessage = "..."; 
: 그런 다음 기준에 사소한된다

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

을 : 당신이 어떤 외부 클래스에서 하나의 속성을 수정할 수 있도록하려면, 당신은 양식 그렇게 할 공용 속성을 노출해야

필자가 작성한 내용이 스파게티 코드에 어긋난다는 것을 지적해야한다. 그러나 당신이하려는 일의 세부 사항을 알지 못하면 누구나 할 수있는 많은 충고를합니다.

+0

코드가 반환되지만 null이 반환됩니다! 어떤 조언, – Eyla

+0

@Eyla :'null'을 반환하는 이유는 무엇입니까? 속성 가져 오기 도구? 라벨의 텍스트가 무엇이든지 반환합니다. 디버깅을 돕기 위해 수행중인 작업과 문제가 무엇인지 구체적으로 설명해야합니다. – Aaronaught

관련 문제