在編寫VB.Net windows應用程序的時候我們經常會遇到這種問題,怎么樣在兩個窗體間傳遞數據呢?例如,用VB.Net做一個文本編輯器,里面有一個搜索功能(即搜索我打開的文本里面的文字),點搜索則彈出搜索對話框,輸入要搜索的內容,然后確定,就可以搜索到我打開的文本里面的文字了,這里就用到了兩個窗體間的相互通信。我查看了相關的資料想了想,得出一些想法和方法。
成都創新互聯公司專注于郫都網站建設服務及定制,我們擁有豐富的企業做網站經驗。 熱誠為您提供郫都營銷型網站建設,郫都網站制作、郫都網頁設計、郫都網站官網定制、微信小程序定制開發服務,打造郫都網絡公司原創品牌,更為您提供郫都網站排名全網營銷落地服務。
也許有的人會覺得這個很簡單呀。假如主框架為Form1,打開的搜索對話框是Form2.直接在Form2類中申明一個Form1實例:dim f1 as new Form1然后就可以通過f1來調用Form1中的域和函數了。其實不是這樣的,你申明的新的Form1實例不是原來的那個Form1對象了,這樣操作的是新的Form1中的域和函數,和最先打開的Form1是沒有關系的。
那應該如何來完成兩個窗體的通訊呢?我們要做的是把當前的Form1實例傳遞給Form2,如果是這樣的話,問題就很好解決了。
方法1:首先,我們在Form2中定義:
Private mF_Form As Form1
我們更改Form2的構造函數為有參數的
Public Sub New(ByVal form As Form1)
MyBase.New()
'該調用是 Windows 窗體設計器所必需的。
InitializeComponent()
Me.mF_Form = form
'在 InitializeComponent() 調用之后添加任何初始化
End Sub
在Form1中,我在 要用到Form2的地方申明如下:
Dim f1 As New Form2(Me)
這里的me指的就是Form1當前的實例,也就是把當前Form1的實例通過Form2的構造函數傳遞給Form2類(其實在網上看到過比較蠢的方式,就是在構造函數里面傳遞要傳遞的信息如:字符串或是數字等,這樣做很有局限性,不能傳遞其他的,所有我們可以直接傳遞實例,來完成傳遞更多的信息。)
這樣在Form2中使用myForm 就可以對原來的Form1窗口進行操作了。但是你要把要操作的Form1中的域和函數定義成public形式的(這樣可能不安全),此時的myForm就是真正的最開始打開的Form1了,你可以用這個實例來進行兩個窗體的通訊了。
方法2:其實VB.Net中提供了窗體間進行通訊的現成的屬性,呵呵,我們能想到的,微軟也想到了,他們創造的語言其實確實可以說是人性化了。
在Form1類中申明Form2時用如下代碼:
Dim f2As New Form2 '類Form2中的構造函數不改,還是無參的
f2.owner=me
也可以使用函數的方法,給當前實例添加一個附屬窗口 代碼:Me.AddOwnedForm(f2)
在Form2類的定義中寫如下代碼:
dim f1 as Form1=me.owner
這樣f1對應的就是原來的Form1的實例了,也就可以用這個進行通訊了。但是還是要把不同類之間訪問的域和函數定義成public,哎,安全確實是一個問題!!
你需要在form1的程序里實例化form2 再使用form2實例化名稱調用對應的組件屬性 例:
form1_load(){
...
form frmForm2 = new form2();
me.title = frmForm2.textbox1.text;
...
}
新窗體中寫構造函數,然后調用。
比如你要調用的新窗體是From1.cs這個窗體,
public Form1(要傳入的參數)
{
//把傳入的參數傳入窗體中
//執行窗體標準內容
}
然后在需要調用的地方調用
Form1 f = new Form1(傳出的參數);
'--------Form1--------
Dim f2 As Form2
Private Sub Command1_Click()
Set f2 = New Form2
f2.Show vbModal
End Sub
'--------Form1 End--------
'--------Form2--------
Dim WithEvents f3 As Form3
Private Sub Command1_Click()
Set f3 = New Form3
f3.Show
End Sub
Public Sub f3_f2W()
Me.Command1.Caption = "f2W"
End Sub
'--------Form2 End--------
'--------Form3--------
Public Event f2W()
Private Sub Command1_Click()
RaiseEvent f2W
End Sub
'--------Form3 End--------
f.Show();
如此就能實現調用了。
方法很多,vb.net很簡單的比如: Form2窗體的Textbox2屬性設置為public,在Form1點擊button1.
Dim frm As New Form2
frm.TextBox2.Text = "123"
frm.ShowDialog() 可以取到form1里面窗體傳的值
還有一種方法:From1 :
Dim frm As New Form2
frm.Owner = Me
frm.ShowDialog()
from2 : Private frmParent As Form1
frmParent = Me.Owner
Me.TextBox2.Text = frmParent.TextBox1.Text
本文題目:vb.net傳值實例的簡單介紹
網站鏈接:http://vcdvsql.cn/article28/doicscp.html
成都網站建設公司_創新互聯,為您提供用戶體驗、企業網站制作、微信小程序、動態網站、企業建站、App設計
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯