vb點(diǎn)虐 窗體間傳值 vb 窗體

VB.NET窗體間的數(shù)據(jù)傳遞

在編寫VB.Net windows應(yīng)用程序的時候我們經(jīng)常會遇到這種問題,怎么樣在兩個窗體間傳遞數(shù)據(jù)呢?例如,用VB.Net做一個文本編輯器,里面有一個搜索功能(即搜索我打開的文本里面的文字),點(diǎn)搜索則彈出搜索對話框,輸入要搜索的內(nèi)容,然后確定,就可以搜索到我打開的文本里面的文字了,這里就用到了兩個窗體間的相互通信。我查看了相關(guān)的資料想了想,得出一些想法和方法。

站在用戶的角度思考問題,與客戶深入溝通,找到開原網(wǎng)站設(shè)計(jì)與開原網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊、虛擬空間、企業(yè)郵箱。業(yè)務(wù)覆蓋開原地區(qū)。

也許有的人會覺得這個很簡單呀。假如主框架為Form1,打開的搜索對話框是Form2.直接在Form2類中申明一個Form1實(shí)例:dim f1 as new Form1然后就可以通過f1來調(diào)用Form1中的域和函數(shù)了。其實(shí)不是這樣的,你申明的新的Form1實(shí)例不是原來的那個Form1對象了,這樣操作的是新的Form1中的域和函數(shù),和最先打開的Form1是沒有關(guān)系的。

那應(yīng)該如何來完成兩個窗體的通訊呢?我們要做的是把當(dāng)前的Form1實(shí)例傳遞給Form2,如果是這樣的話,問題就很好解決了。

方法1:首先,我們在Form2中定義:

Private mF_Form As Form1

我們更改Form2的構(gòu)造函數(shù)為有參數(shù)的

Public Sub New(ByVal form As Form1)

MyBase.New()

'該調(diào)用是 Windows 窗體設(shè)計(jì)器所必需的。

InitializeComponent()

Me.mF_Form = form

'在 InitializeComponent() 調(diào)用之后添加任何初始化

End Sub

在Form1中,我在 要用到Form2的地方申明如下:

Dim f1 As New Form2(Me)

這里的me指的就是Form1當(dāng)前的實(shí)例,也就是把當(dāng)前Form1的實(shí)例通過Form2的構(gòu)造函數(shù)傳遞給Form2類(其實(shí)在網(wǎng)上看到過比較蠢的方式,就是在構(gòu)造函數(shù)里面?zhèn)鬟f要傳遞的信息如:字符串或是數(shù)字等,這樣做很有局限性,不能傳遞其他的,所有我們可以直接傳遞實(shí)例,來完成傳遞更多的信息。)

這樣在Form2中使用myForm 就可以對原來的Form1窗口進(jìn)行操作了。但是你要把要操作的Form1中的域和函數(shù)定義成public形式的(這樣可能不安全),此時的myForm就是真正的最開始打開的Form1了,你可以用這個實(shí)例來進(jìn)行兩個窗體的通訊了。

方法2:其實(shí)VB.Net中提供了窗體間進(jìn)行通訊的現(xiàn)成的屬性,呵呵,我們能想到的,微軟也想到了,他們創(chuàng)造的語言其實(shí)確實(shí)可以說是人性化了。

在Form1類中申明Form2時用如下代碼:

Dim f2As New Form2 '類Form2中的構(gòu)造函數(shù)不改,還是無參的

f2.owner=me

也可以使用函數(shù)的方法,給當(dāng)前實(shí)例添加一個附屬窗口 代碼:Me.AddOwnedForm(f2)

在Form2類的定義中寫如下代碼:

dim f1 as Form1=me.owner

這樣f1對應(yīng)的就是原來的Form1的實(shí)例了,也就可以用這個進(jìn)行通訊了。但是還是要把不同類之間訪問的域和函數(shù)定義成public,哎,安全確實(shí)是一個問題??!

VB點(diǎn)虐 兩個窗體之間傳遞參數(shù)

新窗體中寫

構(gòu)造函數(shù)

,然后調(diào)用。

比如你要調(diào)用的新窗體是From1.cs這個窗體,

public

Form1(要傳入的參數(shù))

{

//把傳入的參數(shù)傳入窗體中

//執(zhí)行窗體標(biāo)準(zhǔn)內(nèi)容

}

然后在需要調(diào)用的地方調(diào)用

Form1

f

=

new

Form1(傳出的參數(shù));

'--------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();

如此就能實(shí)現(xiàn)調(diào)用了。

VB.NET Public Sub 窗體 互相傳值

Public Sub checkInjectionWithNoKeyword()

Dim injection_Type As String = My.Forms.SqlInjection.ComboBox_Type.Text.Trim()

Dim my_checkUrl As String = My.Forms.SqlInjection.ComboBox_Url.Text.Trim()

end sub

這個改成放在窗體內(nèi)就行了,我也有遇到同樣的問題,最后只好放窗體里才能實(shí)現(xiàn)。

網(wǎng)上找的什么委托都是不行的。

請教一個vb點(diǎn)虐 的窗口之間傳遞變量值的問題

用form的ShowDialog這個功能,這個是可以進(jìn)行窗體間的傳值的。

比如在父窗體上需要傳的值是textbox1的內(nèi)容,子窗體是childform.

那么在父窗體上的點(diǎn)擊事件中可以這樣寫

dim frm as childform = New childform

'要在子窗體上的textbox1里顯示父窗體中的textbox1中的內(nèi)容,這樣寫

frm.textbox1.text = me.textbox1.text

'最后

frm.showdialog()

這樣就可以了。

如果說你三個窗體完全一樣,那你也不用寫三個一樣的窗體只要寫一個就行了,在不同的按鈕事件中做不同的賦值即可。

不過這樣打開的子窗體是模態(tài)窗體,也就是說在子窗體顯示之后,要對父窗體進(jìn)行操作必需關(guān)閉子窗體才行。

文章名稱:vb點(diǎn)虐 窗體間傳值 vb 窗體
標(biāo)題路徑:http://muchs.cn/article32/ddipcsc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、網(wǎng)站建設(shè)、域名注冊、網(wǎng)站設(shè)計(jì)公司、外貿(mào)網(wǎng)站建設(shè)、品牌網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)