方法很多,vb.net很簡單的比如: Form2窗體的Textbox2屬性設(shè)置為public,在Form1點(diǎn)擊button1.
創(chuàng)新互聯(lián)是一家從事企業(yè)網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、成都做網(wǎng)站、行業(yè)門戶網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)制作的專業(yè)網(wǎng)站建設(shè)公司,擁有經(jīng)驗(yàn)豐富的網(wǎng)站建設(shè)工程師和網(wǎng)頁設(shè)計(jì)人員,具備各種規(guī)模與類型網(wǎng)站建設(shè)的實(shí)力,在網(wǎng)站建設(shè)領(lǐng)域樹立了自己獨(dú)特的設(shè)計(jì)風(fēng)格。自公司成立以來曾獨(dú)立設(shè)計(jì)制作的站點(diǎn)近千家。
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
在form2中寫
private string formtext1;
public string Formtext1
{
get { return formtext1; }
set { formtext1= value; }
}
在form1中
form2.Formtext1=text1.Text();
form2.show();
在form2中頁面加載是給text2 賦值 text2.Text=formtext;
我沒有看你寫的代碼 , 只好根據(jù)你的問題來回答了:.net窗體傳值問題 ,
其實(shí),定義一個(gè)靜態(tài)的全局變量就行了 , 如果是同一個(gè)項(xiàng)目內(nèi)呢,訪問修飾符不需要寫public,只需要internal就可以了,
定義:
internal static str=null;
然后,取得需要傳遞的文本框或者是其他控件里的值,賦值給str,
如: str=textBox1.text;
然后,在另一個(gè)類里面,取得str的值 , 如果說定義的時(shí)候是在Form1類里面定義的,
那么就在另一個(gè)窗體的類文件里寫:string s=Form1.str;
這樣,該值就從第一個(gè)窗體傳遞到第2個(gè)窗體了,
定義值的時(shí)候,可以取任意類型的....
或者直接就寫object的也行...
新窗體中寫
構(gòu)造函數(shù)
,然后調(diào)用。
比如你要調(diào)用的新窗體是From1.cs這個(gè)窗體,
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 windows應(yīng)用程序的時(shí)候我們經(jīng)常會(huì)遇到這種問題,怎么樣在兩個(gè)窗體間傳遞數(shù)據(jù)呢?例如,用VB.Net做一個(gè)文本編輯器,里面有一個(gè)搜索功能(即搜索我打開的文本里面的文字),點(diǎn)搜索則彈出搜索對(duì)話框,輸入要搜索的內(nèi)容,然后確定,就可以搜索到我打開的文本里面的文字了,這里就用到了兩個(gè)窗體間的相互通信。我查看了相關(guān)的資料想了想,得出一些想法和方法。
也許有的人會(huì)覺得這個(gè)很簡單呀。假如主框架為Form1,打開的搜索對(duì)話框是Form2.直接在Form2類中申明一個(gè)Form1實(shí)例:dim f1 as new Form1然后就可以通過f1來調(diào)用Form1中的域和函數(shù)了。其實(shí)不是這樣的,你申明的新的Form1實(shí)例不是原來的那個(gè)Form1對(duì)象了,這樣操作的是新的Form1中的域和函數(shù),和最先打開的Form1是沒有關(guān)系的。
那應(yīng)該如何來完成兩個(gè)窗體的通訊呢?我們要做的是把當(dāng)前的Form1實(shí)例傳遞給Form2,如果是這樣的話,問題就很好解決了。
方法1:首先,我們?cè)贔orm2中定義:
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 就可以對(duì)原來的Form1窗口進(jìn)行操作了。但是你要把要操作的Form1中的域和函數(shù)定義成public形式的(這樣可能不安全),此時(shí)的myForm就是真正的最開始打開的Form1了,你可以用這個(gè)實(shí)例來進(jìn)行兩個(gè)窗體的通訊了。
方法2:其實(shí)VB.Net中提供了窗體間進(jìn)行通訊的現(xiàn)成的屬性,呵呵,我們能想到的,微軟也想到了,他們創(chuàng)造的語言其實(shí)確實(shí)可以說是人性化了。
在Form1類中申明Form2時(shí)用如下代碼:
Dim f2As New Form2 '類Form2中的構(gòu)造函數(shù)不改,還是無參的
f2.owner=me
也可以使用函數(shù)的方法,給當(dāng)前實(shí)例添加一個(gè)附屬窗口 代碼:Me.AddOwnedForm(f2)
在Form2類的定義中寫如下代碼:
dim f1 as Form1=me.owner
這樣f1對(duì)應(yīng)的就是原來的Form1的實(shí)例了,也就可以用這個(gè)進(jìn)行通訊了。但是還是要把不同類之間訪問的域和函數(shù)定義成public,哎,安全確實(shí)是一個(gè)問題??!