两个窗体间数据交换的问题

you2222you 2004-04-15 03:22:57
怎么将一个窗体中的值赋给另一个窗体的控件?
比如按一个窗体的按钮打开第二个窗体,操作第二个窗体得到一些数据想要把得到的数据在关闭窗体后,赋给第一个窗体的一个textbox控件怎么做?
我怎么实现不了,求救!
...全文
212 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
you2222you 2004-04-17
  • 打赏
  • 举报
回复
我做成了,感谢上面的这位仁兄。关键的地方我也找到了就是赋值的时候要在paint方法中。
  另外一个问题,我在删除XML文件时,用removeall方法,删除后总会留下一个空的节点,能不能帮解决一下呀。
  我的QQ:23961966,望能赐教,不用感激。
azyue 2004-04-17
  • 打赏
  • 举报
回复
真苯,另外一个窗体定义有元变量,或公共变量,。然后定义次窗体,给值就好了呀。
sqjlxj 2004-04-17
  • 打赏
  • 举报
回复
在按钮事件中写下如下类似的代码
Dim recordForm As New modiForm()
recordForm.Label1.Text = "标题"
recordForm.Label2.Text = "内容"
If recordForm.ShowDialog() = DialogResult.OK Then
Try
me.label1.text = recordForm.TextBox1.Text
me.textBox1.text = recordForm.TextBox2.Text
Catch err As System.Exception
MessageBox.Show(err.ToString())
End Try

End If
recordForm.Close()
follyfour 2004-04-16
  • 打赏
  • 举报
回复
第二个窗口的代码,你直接覆盖掉你的第二个窗口的代码就成。第一个也是覆盖。
Public Class Form2
Inherits System.Windows.Forms.Form

#Region " Windows 窗体设计器生成的代码 "

Public Sub New()
MyBase.New()

'该调用是 Windows 窗体设计器所必需的。
InitializeComponent()

'在 InitializeComponent() 调用之后添加任何初始化

End Sub

'窗体重写 dispose 以清理组件列表。
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub

'Windows 窗体设计器所必需的
Private components As System.ComponentModel.IContainer

'注意: 以下过程是 Windows 窗体设计器所必需的
'可以使用 Windows 窗体设计器修改此过程。
'不要使用代码编辑器修改它。
Friend WithEvents Button1 As System.Windows.Forms.Button
Friend WithEvents TextBox1 As System.Windows.Forms.TextBox
Friend WithEvents Label1 As System.Windows.Forms.Label
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Me.Button1 = New System.Windows.Forms.Button
Me.TextBox1 = New System.Windows.Forms.TextBox
Me.Label1 = New System.Windows.Forms.Label
Me.SuspendLayout()
'
'Button1
'
Me.Button1.Location = New System.Drawing.Point(104, 168)
Me.Button1.Name = "Button1"
Me.Button1.TabIndex = 0
Me.Button1.Text = "关闭"
'
'TextBox1
'
Me.TextBox1.Location = New System.Drawing.Point(144, 72)
Me.TextBox1.Name = "TextBox1"
Me.TextBox1.TabIndex = 1
Me.TextBox1.Text = "TextBox1"
'
'Label1
'
Me.Label1.Location = New System.Drawing.Point(24, 72)
Me.Label1.Name = "Label1"
Me.Label1.Size = New System.Drawing.Size(112, 23)
Me.Label1.TabIndex = 2
Me.Label1.Text = "把后面的值返回去"
'
'Form2
'
Me.AutoScaleBaseSize = New System.Drawing.Size(6, 14)
Me.ClientSize = New System.Drawing.Size(292, 273)
Me.Controls.Add(Me.Label1)
Me.Controls.Add(Me.TextBox1)
Me.Controls.Add(Me.Button1)
Me.Name = "Form2"
Me.Text = "Form2"
Me.ResumeLayout(False)

End Sub

#End Region

Public Shared returnval As String

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Me.returnval = TextBox1.Text
Me.Close()
End Sub

End Class
follyfour 2004-04-16
  • 打赏
  • 举报
回复
我的办法很笨,你试试,我测试成功。
Public Class Form1
Inherits System.Windows.Forms.Form

#Region " Windows 窗体设计器生成的代码 "

Public Sub New()
MyBase.New()

'该调用是 Windows 窗体设计器所必需的。
InitializeComponent()

'在 InitializeComponent() 调用之后添加任何初始化

End Sub

'窗体重写 dispose 以清理组件列表。
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub

'Windows 窗体设计器所必需的
Private components As System.ComponentModel.IContainer

'注意: 以下过程是 Windows 窗体设计器所必需的
'可以使用 Windows 窗体设计器修改此过程。
'不要使用代码编辑器修改它。
Friend WithEvents Button1 As System.Windows.Forms.Button
Friend WithEvents TextBox1 As System.Windows.Forms.TextBox
Friend WithEvents Label1 As System.Windows.Forms.Label
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Me.Button1 = New System.Windows.Forms.Button
Me.TextBox1 = New System.Windows.Forms.TextBox
Me.Label1 = New System.Windows.Forms.Label
Me.SuspendLayout()
'
'Button1
'
Me.Button1.Location = New System.Drawing.Point(88, 136)
Me.Button1.Name = "Button1"
Me.Button1.TabIndex = 1
Me.Button1.Text = "打开第二个窗口"
'
'TextBox1
'
Me.TextBox1.Location = New System.Drawing.Point(136, 64)
Me.TextBox1.Name = "TextBox1"
Me.TextBox1.Size = New System.Drawing.Size(120, 21)
Me.TextBox1.TabIndex = 2
Me.TextBox1.Text = ""
'
'Label1
'
Me.Label1.Location = New System.Drawing.Point(8, 64)
Me.Label1.Name = "Label1"
Me.Label1.Size = New System.Drawing.Size(120, 24)
Me.Label1.TabIndex = 3
Me.Label1.Text = "第二个窗口的返回值"
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(6, 14)
Me.ClientSize = New System.Drawing.Size(292, 273)
Me.Controls.Add(Me.Label1)
Me.Controls.Add(Me.TextBox1)
Me.Controls.Add(Me.Button1)
Me.Name = "Form1"
Me.Text = "Form1"
Me.ResumeLayout(False)

End Sub

#End Region

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim lsfrm As New Form2
lsfrm.Show()
End Sub

Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
Dim lsfrm As New Form2
TextBox1.Text = lsfrm.returnval
End Sub
End Class
liuyi3000 2004-04-16
  • 打赏
  • 举报
回复
http://www.csdn.net/develop/author/netauthor/Latitude/
Henry有讲到这个
去看看吧
dyss 2004-04-16
  • 打赏
  • 举报
回复
上面这们老兄说的没错但没有明白我的意思,我的意思是要在FORM2中,调用用FORM1中的TEXTBOX控件的
------------------------------------------------------------------------------
在form1中 :
public shared tbox as texbox
tbox= texbox1
这样就可以调用form1的textbox控件了
you2222you 2004-04-16
  • 打赏
  • 举报
回复
我试了上面的,每一种方法都没实现有实现,是不是我太笨呀,请那一位大哥详细指点一下。
  关键的一点是,第一个窗体已经加载的时候加载第二个窗体,然后第二窗体关闭后,对第一个窗体的文本框自动赋值了
jeffersyan 2004-04-15
  • 打赏
  • 举报
回复
Module Module1
Friend newform As New Form1
Friend frmHphmSelect As New Form2
Sub main()
newform.ShowDialog()
End Sub
End Module
然后在FORM1中调用frmHphmSelect
在Private Sub FrmHphmSelect_Closed(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Closed
newform.TxtHphm.Text = "我要的值"
End Sub

you2222you 2004-04-15
  • 打赏
  • 举报
回复
上面这们老兄说的没错但没有明白我的意思,我的意思是要在FORM2中,调用用FORM1中的TEXTBOX控件的
Rices2008 2004-04-15
  • 打赏
  • 举报
回复
一种方法是定义一个全局的变量或是类,用来接受需要传递的值,这样做,相对的扩展性好一点.

另一种方法就是为主窗口先定义一个实体,
dim mForm1 as Form1
mForm1.show

然后,在mForm1窗口中再打开二级窗口
此时,打开的二级窗口就可以直接访问mForm1并对它所包含的控制或变量进行赋值.

注:mForm1必须是全局的.
且二级窗口要访问的mForm1内的变量也必须是Friend 或是 Public
you2222you 2004-04-15
  • 打赏
  • 举报
回复
急救,在线等待!!!!
you2222you 2004-04-15
  • 打赏
  • 举报
回复
那位高手在线,能否在线请教一下,我的QQ:23961966
you2222you 2004-04-15
  • 打赏
  • 举报
回复
感谢这么多人的热心帮助,可是我试了一下还是不行,把代码写出来请大家分析一下

Private Sub FrmHphmSelect_Closed(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Closed
Dim newform As New FrmClxxInput
newform.TxtHphm.Text = "我要的值"
End Sub

说明:FrmHphmSelect为打开的第二个窗体
FrmClxxInput为需要接收值的窗体,关键是要关闭第二个窗体时,要把值自动传给第一个窗体,所以用公用变量显然不行的

flowerqueen 2004-04-15
  • 打赏
  • 举报
回复
同意dyss的方法
dyss 2004-04-15
  • 打赏
  • 举报
回复
只是在两个窗口传递参数。不用在模板那里定义巴
a窗口调用b窗口,
(1)那么a可以调用所有的b窗口里面的控件,但是变量就不行了,要在b窗口 friend xx as string ,才可以 调用b里面的xx变量
(2)也可以public shared xx as integer
njhyh 2004-04-15
  • 打赏
  • 举报
回复
设一个全局变量,在模板里设;
例如:public aa as string
然后将你所要得到的值付给该变量。在关闭窗体后,在将该变量付给第一个窗体中的textbox即可
jeffersyan 2004-04-15
  • 打赏
  • 举报
回复
楼上的方法可以啊!:)FORM1中的BUTTON_CLICK里启动FORM2、Form2_Closed里把处理内容传给FORM1
LoveEgg 2004-04-15
  • 打赏
  • 举报
回复
怎么不行啊,老兄?难道我这不像vb.net的代码????
打开菜单“项目\....属性”,然后将启动对象设置为“Sub Main”。
you2222you 2004-04-15
  • 打赏
  • 举报
回复
不行呀,我用的是vb.net
加载更多回复(1)

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧