none
VB2005 表單跟表單之間的傳值 RRS feed

  • 問題

  • 我使用VB2005
    我在FORM1新增了一個TEXTBOX1
    然後加入form2 新增了button1
    我在form2寫入下列程式碼:
    Public Class Form2

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Form1.TextBox1.Text = "123132"

            Dim f1 As New Form1
            f1.Show()
            Me.Hide()

        End Sub
    End Class

    照理來說 form1的textbox1的text不是會變成123132嗎?
    但是為什麼沒有?
    2006年12月9日 上午 10:29

解答

  • 你把類別跟變數搞混了。

    基本觀念是在編譯形成類別物件後,起始狀態是不能變更的。所以你應該先宣告 f1 變數,在針對 f1 變數的屬性進行改變。

    所以對於 Form1 這個類別物件來說,你不能變更起始狀態,然後再宣告成為一個新物件。

    比較特別的是,VB2005 加回 VB6 內建的預設功能,針對 Form 型態的物件,會隱含宣告一個同名變數,亦即在 VB2005 內有一個變數名為 Form1 跟一個類別名為 Form1 的東西存在,你所變更的是變數名為 Form1 的變數物件,你可以把 Form1 變數顯示出來看看。

    2006年12月9日 下午 12:29
    版主

所有回覆

  • 你把類別跟變數搞混了。

    基本觀念是在編譯形成類別物件後,起始狀態是不能變更的。所以你應該先宣告 f1 變數,在針對 f1 變數的屬性進行改變。

    所以對於 Form1 這個類別物件來說,你不能變更起始狀態,然後再宣告成為一個新物件。

    比較特別的是,VB2005 加回 VB6 內建的預設功能,針對 Form 型態的物件,會隱含宣告一個同名變數,亦即在 VB2005 內有一個變數名為 Form1 跟一個類別名為 Form1 的東西存在,你所變更的是變數名為 Form1 的變數物件,你可以把 Form1 變數顯示出來看看。

    2006年12月9日 下午 12:29
    版主
  • 感謝感謝
    結果最後的結論是我買的書教錯了
    不用宣告 只需要直接打上 form1.show就好了
    2006年12月9日 下午 01:51
  • VB2002/2003 不提供隱含宣告的功能,仍然要 Dim f1 As New Form1 ,事實上 VB2005 也不建議使用 form1 當變數名,但是為了迎合 VB6 的升級使用者,仍然提供這個功能。
    2006年12月9日 下午 02:38
    版主