2014-06-09 3 views
1

데이터베이스의 결과 데이터를 표시하는 응용 프로그램이 있습니다. 경우에 따라 결과에 추가 데이터가 포함되는 경우 레코드를 추가합니다. UserControl에서이 값은 "NA"가됩니다. 아름답게 작동하는 UserControl 클래스 내에 refreshdisplay() 메서드가 있습니다. 불행히도 "new"를 사용한 후에 내 dataHandler 클래스에서 호출하면 UserControl이 새로 고쳐지지 않습니다. 나는 이것을 사용했기 때문에 이것을 추측하고 있습니다.외부 클래스에서 userControl 새로 고침

UserControlResultDisplay resultDisplay = new UserControlResultDisplay(); 

어떻게 메소드를 사용하고 새로운 인스턴스를 만들지 않고 기존 UserControl과 상호 작용할 수 있습니까? 당신이 지적

UserControlResultDisplay resultDisplay = new UserControlResultDisplay(); 

public void UpdateResultDB(ResultDataJFTOT resultData) 
    { 


      AnalysisListCommon myresult = PContext.GetInstance().DbHandlerLocal.StoredResult(
       resultData.SampleId, 
       resultData.TestDate.ToString("yyyy-MM-ddTHH:mm", CultureInfo.InvariantCulture), 
       resultData.InstrumentSn, 
       StringRepository.constStringSampleName); 



      if (myresult != null) 
      { 
       Result r = new Result(new Guid(myresult.ResultId)); 

       ResultData rd = r.GetResultData("Rating", FindResultDataMode.byVariableIdentifier); 
       string xmlTubeRating = resultData.tRating.ToString().Replace("#LT#", "<"); 
       rd.Text = xmlRating; 
       rd.Store(); 

       rd = r.GetResultData("TestDate", FindResultDataMode.byVariableIdentifier); 
       rd.Text = resultData.Date.ToString(); 
       rd.Store(); 

       resultDisplay.RefreshDisplay(); 

       else 
      { 
       AddTestToQueue(resultData); 
      } 

      } 
+0

생성자를 통해 기존 참조를 전달 하시겠습니까? 그게 정상적으로 어떻게 ... 그걸 막는 무언가가 빠졌습니까? – BradleyDotNET

+0

나는 그것을했다. 그러나 키워드 "new"의 사용은 나의 giddyup에서 장애를 던지는 것처럼 보인다. 열려있는 인스턴스로 작업하는 대신 UserControl의 새 인스턴스를 엽니 다. 호출하는 함수는 폼에 없으므로 UserControl이 열려 있고 볼 수있는 동안 함수가 실행됩니다.나는 어느 정도 신인이다. 그래서 나와 떨어져서 곰을 곰곰히 생각하지 않는다. – willkk

+0

매개 변수로 전달하면'new' 키워드가 필요 없습니다. 이 코드를 어디에 게시 할 수 있습니까? – BradleyDotNET

답변

1

이 문제는 문에있다 :

UserControlResultDisplay resultDisplay = new UserControlResultDisplay(); 

이 새로운 객체 (기존에 관계 없음)를 인스턴스화 그래서 여기

몇 가지 코드 조각입니다 실행중인 기능은 GUI에 표시되는 것에 영향을 줄 수 없습니다.

올바른 코드를 얻기 전에 "개체"가 무엇인지 확인해보십시오.

명시 적이든 묵시적이든간에 C#의 모든 유형은 "개체"(int와 같은 값 형식 일 수도 있음)로 간주 될 수 있으므로 구별은 거의 부적합합니다. 값 (당연한)에 전달하고, 만드는 동안 new 키워드를 허용/필요가 없습니다

  1. 값 유형 : 당신은 객체의 두 가지 분류가 있다고 말하는하지만, 정확합니다. 이들은 당신의 int, float, 참조에 의해 통과를 만들기 위해 new 키워드를 사용 할 수 있습니다 char
  2. 참조 유형. 이것들은 class (아마도 다른 몇 가지이지만 엄지 손가락 규칙)으로 선언 된 것입니다.

두 함수 모두 완벽하게 수용 할 수있는 매개 변수이며, 그냥 다르게 전달됩니다. 당신이하려는 것을 위해, 우리는 실제로 이것을 이용합니다. 당신이 작성하는 경우 : 당신은 기존의 UI 개체에 참조을 받고 (및 저장)하는

UserControlResultDisplay resultDisplay; 

public MyDataClass(UserControlResultDisplay uiDisplay) 
{ 
    resultDisplay = uiDisplay; 
} 

. 이제 함수를 호출하면 UI에 영향을 미칩니다 (UI 측의 모든 것이 올바르게 설정되었다고 가정). 당신은 (는 UI 클래스에서입니다 가정)이 같은이 생성자를 호출하는 것입니다 : 당신이 다른 곳을 호출하면

MyDataClass data = new MyDataClass(this); 

, 당신은 분명히 MyDataClass에 전달할 다른 곳에서 UI에 대한 참조가 필요합니다.

+0

저에게 보여 주셔서 감사합니다. – willkk

관련 문제