2014-06-09 52 views
1

我有一個應用程序顯示來自數據庫的結果數據。偶爾如果結果帶有附加數據,我們會追加記錄。在這種情況發生之前,UserControl中的值爲「NA」。我在UserControl類中有一個refreshdisplay()方法,它運行得很漂亮,不幸的是,如果我在使用「new」之後從我的dataHandler類調用它,那麼UserControl不會刷新。我猜這是因爲我用從外部類刷新userControl

UserControlResultDisplay resultDisplay = new UserControlResultDisplay(); 

如何使用的方法,並與現有的用戶控件不實例化一個新的互動?

下面是一些代碼片段:

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

我這樣做了,但關鍵字「新」的使用似乎在我的giddyup中造成困難。這是否打開一個新的UserControl實例,而不是使用打開的實例。調用函數不在表單中,因此該函數在UserControl打開並可見時執行。我有點新手,所以請耐心等待,並詳細說明我是否離開基地。 – willkk

+0

如果您將它作爲參數傳遞,則不需要'new'關鍵字。你可以在這裏發佈代碼嗎? – BradleyDotNET

回答

1

正如你指出的,問題就出在聲明中:

UserControlResultDisplay resultDisplay = new UserControlResultDisplay(); 

此實例化一個新的對象(沒有聯繫到現有的一個),所以在其上運行函數絕對沒有機會影響在GUI上顯示的內容。

在我找到正確的代碼之前,讓我試着清理一下「對象」是什麼。在C#中的每一個類型,無論是顯式的還是隱式的,都可以被認爲是一個「對象」(偶數值類型像int),因此區分在很大程度上是不相關的。你是正確的,但是,他說,有對象的兩種分類:這是通過(不奇怪)的值,並且不需要/允許創建過程中new關鍵字

  1. 值類型。這些都是你intfloat,由參考過去了,確實使用了new關鍵字來創建它們char
  2. 引用類型。這些都是用class(可能還有其他幾個,但這是一個很好的經驗法則)聲明的東西。

這兩個參數對於任何函數都是完全可以接受的參數,它們只是以不同的方式傳遞。對於你想要做的事情,我們實際上利用了這一點。如果你寫:

UserControlResultDisplay resultDisplay; 

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

你得到(和存儲)一參考現有UI對象。現在當你調用它的函數時,它會影響UI(假設當然UI邊的所有內容都是正確設置的)。你會調用此構造這樣的(假設它是從UI類):

MyDataClass data = new MyDataClass(this); 

如果你調用它在其他地方,你顯然需要從其他地方到UI的引用傳遞給MyDataClass

+0

感謝您花時間向我展示這一點。 – willkk