当前位置:编程学习 > C#/ASP.NET >>

求助:如何在两个窗体间传输数据

是这样子的,我现在想做一个主窗体F1,一个辅助窗体F2和对话框F3的练习
 我在主窗体的设置了一个TEXTBOX,两个BUTTON,名为F2和F3
辅助窗体我设置了两个按钮B1,B2,一个是为了直接从F1.TEXTBOX1.TEXT中读取数据。
 另一个是把自己设置的数据反应到主窗体的TEXTBOX1中。我根据书里面设置了一个事件,用来传递两个窗体之间的数据。代码如下:
在F2窗体中输入代码:  Event StrpropertyChanged()
然后在B2按钮中输入代码:
B2_CLICK
dim str as string
 str = inputbox("enter a new variable value )
F1.strproperty = str (strproperty 被声明为 Public shared strprperty as string = " VB.NET")
raiseevent strpropertychanged
接着书里说要把 DIM FRM AS NEW F2 变成 DIM WithEvents FRM as new F2 我改了之后运行不了就把后面这一只加在F1的Public class 里面
然后就是Private FRM_strpropertychanged()Handles FRM.strpropertychanged
     Textbox1.text = strproperty
beep()
这样子运行不通。
  另外我弄不明白DialogResult的用处。麻烦了 --------------------编程问答-------------------- 描述太乱了,没看懂在干什么。
DialogResult
获取或设置对话框结果值,此值是从 ShowDialog 方法返回的值。

可以在显示对话框的代码中使用 DialogResult 来确定用户是接受 (true) 还是取消 (false) 该对话框。如果对话框被接受,这表示打开该对话框的代码需要检索用户收集的数据并处理该数据。但是,如果对话框被取消,这表示调用代码应该停止任何进一步的处理。

默认情况下,当用户执行下列操作之一时,将会取消对话框:

按 Alt+F4。

单击“关闭”按钮。

从系统菜单中选择“关闭”。

在上述所有情况下,DialogResult 均默认为 false。

对话框通常提供一个用于取消对话框的特殊按钮,这是其 IsCancel 属性设置为 true 的按钮。以这种方式配置的按钮会在它被按下或 Esc 键被按下时自动关闭窗口。在上述任一种情况下,DialogResult 均保持为 false。

对话框通常还提供一个接受按钮,这是其 IsDefault 属性设置为 true 的按钮。以这种方式配置的按钮将在自身或 Enter 键被按下时引发其 Click 事件。但是,它不会自动关闭对话框,也不会将 DialogResult 设置为 true。您需要手动编写相关代码,通常可以在默认按钮的 Click 事件处理程序中编写。

在对话框关闭后,可以从 ShowDialog 方法返回的值中获取对话框结果,也可以通过检查 DialogResult 属性获取对话框结果。

只有在通过调用其 ShowDialog 方法打开 Window 时,才能设置 DialogResult。

--------------------编程问答-------------------- 你这样不是很好
最好是用事件本身传递参数
创建一个事件一般有3步 
首先创建一个事件参数类(没的话就用eventargs,不用创建的) 
比如 
public class  strPropertyChangedEventArgs
inherits eventargs
dim str as string
sub new(byval s as string)
str=s
end sub
public readonly property MyString as string
get
return str
end get
end class
然后委托,声明事件,写在声明部分: 
Delegate sub strPropertyChangedEventHandler(byval sender as object, byval e as strPropertyChangedEventArgs) 
Public event strPropertyChangedEvent as strPropertyChangedEventHandler
然后你的主窗体
Private sub FRM_strpropertychanged(byval sender as object, byval e as strPropertyChangedEventArgs)Handles FRM.strPropertyChangedEvent
     Textbox1.text = e.mystring
end sub

还有dialogresult是用来返回对话框结果的
比如
dim dlg as new XXdialog
dlg.showdialog
'这个时候对话框弹出等待用户处理
dim rs = dlg.dialogresult 获得用户处理的结果
--------------------编程问答-------------------- 看不明白啊= =!!! 我也觉得很乱,可是写多了又怕别人没耐心看完。
头晕中。。看不懂。乱死了。。要我说明白问题我也讲不清楚。。哎= =!!!
--------------------编程问答-------------------- dig.dialogresult = dialogresult.ok 是什么意思? 
dialogresult 的意思是不是这次输入的数被保存下来.然后下一次我打开对话框的时候对话框显示的是我输入的数据? 比如我这一次输入10 然后关掉对话框,下一次再打开对话框的时候,对话框里出现10这个数据? --------------------编程问答-------------------- 如果只是想窗体间传递数据,那么最简单的就是用全局变量就行了

如果想窗体间互相操作,那么打开新窗体时最好不要新实例化窗体

Dim FRM AS NEW Form2
FRM.Show()

Form2.Show()
这两个是不一样的
用第一种打开窗体后,再用Form2.TextBox1.Text是不能用的,因为不是一个窗体,需要FRM.TextBox1.Text这样才行
--------------------编程问答-------------------- FRM定义完后还是指代F2辅助窗体吧? 我是要把辅助窗体的内容传到主窗体F1的TEXTBOX1.TEX里面.这样子用FRM.TEXTBOX1.TEXT不是传到F2自己本身上了吗 --------------------编程问答-------------------- Form1.TEXTBOX1.TEXT = "字符串"
在FRM里这么写有问题? --------------------编程问答-------------------- 可能用构造涵数好点 --------------------编程问答-------------------- 可怜的孩子
dialogresult是用来判断用户对对话框进行了什么操作
dig.dialogresult = dialogresult.ok表示用户点了确定按钮
dig.dialogresult = dialogresult.cancel表示用户点了
你也可以这么用
dig.showdialog
if dig.dialogresult=dialogresult.ok
text1.text= str '就用一个全局变量吧 省得麻烦
end if --------------------编程问答-------------------- form1 传向form2窗体:
form2:
public ID as string
Private Sub Form2_Load(....)
'接值
textbox1.text=ID
endsub

form1:
dim frm2 as new form2
form2.ID="XXX"
frm2.show


''这样传值好点吧....去试撒... --------------------编程问答-------------------- 直接代码贴出来!
看得头有点晕
呵呵,要实现窗体之间的数据传递,方法很多!
--------------------编程问答-------------------- form_1:
dim form_2 as new form_2
form_2.pParanet =me

form_2:
dim pParanet as form_1
补充:.NET技术 ,  VB.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,