2013-04-16 17 views
0

這似乎是一個很重要的問題,但我不能讓它的工作,並已花了近30分鐘轉圈圈:-(更改文本框的內容從一類

我有一個帶有文本框的表單和一個位於獨立類中的對象處理程序,我想用對象處理程序的輸出更新文本框的內容

I' m試圖訪問它:

formName.textBoxName.Text = value 

但沒有任何反應,但我可以,但是,閱讀狀態按鈕在相同的形式,所以我很困惑。看起來,我可以從我的課程訪問一些表單控件,但只能讀取?

我知道我從我的課得到輸出,因爲我可以在調試窗口中查看它。

我試着改變文本框的修飾符屬性沒有區別 - 我敢肯定,這是一個愚蠢的錯誤,我已經做了,但我只是不能看到它。

如何從另一個類更改我的文本框的值?

這裏是我的代碼:

類:Summarizer.vb

If frm_Settings.btn_NextSection.Enabled = True Then 
    Console.WriteLine("Boo!") 
    frm_Settings.txt_NextSection.Text = "Boo!" 
End If 

形式:frm_Settings包括(其中包括)文本框txt_NextSection和一個按鈕btn_NextSection。正在正確讀取按鈕的值,但無法設置文本框內容。

在此先感謝

+0

您確定'formName' i nstance是指你期望改變的形式?或者你只是使用類名? – Steve

+0

這絕對是表單名稱。我使用相同的名稱來讀取同一表單上的按鈕狀態,並且工作正常。 – user1647208

+0

我沒有解釋清楚。當你的'對象處理器'試圖更新文本框時,它需要包含文本框的表單實例,而不僅僅是它的名字。當你創建了表單的時候,某處出現了'Dim f As MyForm = new MyForm()'。您需要使用引用MyForm的實例的變量f。不是簡單的MyForm.TextBox.Text – Steve

回答

1

我會盡量給出答案,但很多事情仍然不清楚。
當執行代碼frm_Settings時,可能是,聲明並初始化類Summarizer的實例。
此時傳球,給類的構造函數,來的frm_Settings

.... 
Dim sz = new Summarizer(Me) 
sz.ExecuteSomeMethod() 
..... 

當前實例的引用現在,以這種方式添加一個構造函數的類Summarizer

Public Class Summarizer 

    ' This is the local reference to the frm_Setting instance passed in the constructor' 
    Dim callerInstance As frm_Settings 

    ' This constructor receives the instance of the frm_Settings class 
    'that has created the instance of Summarizer' 
    Public Sub New(ByVal caller As frm_Settings) 
     ' Set the local reference to the instance passed in' 
     callerInstance = caller 
    End Sub 

    ..... 

End Class 

現在,在您需要更新文本框的處理程序中,代碼可以更改爲

' Use the instance of the frm_Settings that has created the instance of this class' 
If callerInstance.btn_NextSection.Enabled = True Then 
    Console.WriteLine("Boo!") 
    callerInstance.txt_NextSection.Text = "Boo!" 
End If 
+0

感謝你的史蒂夫,它幾乎工作。我忽略了(這可能是我原來的代碼不起作用)是因爲我在一個線程中運行Summarizer類,而在另一個線程中運行Summarizer類。 VB顯示了一個錯誤,並給出瞭如何解決這個問題的指導,我現在正在努力。我會稍後更新... – user1647208

+0

史蒂夫,你的代碼,在這裏結合這個(http://msdn.microsoft.com/en-us/library/ms171728.aspx)來解決線程問題的工作。非常感謝你 ! – user1647208