VB.Net两个窗体之间的传值及修改
在做机房收费系统,遇到这样⼀个问题:在上下机窗体(FrmLoadOnff)中,存在⼀个⽂本框(txtCountOnline)显⽰当前上机的学⽣数。在查询学⽣上机状态的窗体中,存在全部学⽣下机菜单(menuAllLoadoff)、和选中学⽣下机菜单(menuSelectLoadoff)。界⾯分别如下:
上下机窗体(FrmLoadOnff):
查询学⽣上机状态:
如果在学⽣状态窗体中,实现学⽣下机的功能,要更新上下机窗体中的⽂本框内上机学⽣的⼈数。
第⼀次做的时候,没想太多。思路是:多条上机的学⽣记录,在⼀个循环中⼀条记录⼀条记录的删除,每删⼀条记录,更新⼀次上下机窗体中⽂本框内正在上机的学⽣数。所以,代码如下:
'学⽣状态查询窗体,更新上下机窗体学⽣数⽬减1
Dim intPreCount As Integer '更新前学⽣数
Dim intCurrentCount As Integer '更新后的学⽣数
intPreCount = CountOnLine.Text)
intCurrentCount = intPreCount - 1
会提⽰这样的信息:
经过查⽹上的资料,实践两个窗体之间的传值的⽅法很多种,主要有四种。我这⾥分析错误原因是:在VB中,窗体都是类,需要实例化成对象之后才能在其他窗体调⽤。我的代码没有经过实例化,直接使⽤了类,所以上下机窗体中的上机学⽣数并没有更新到查询学⽣状态的窗体中。
所以,⼀种⽅法是,在调⽤其他窗体前,先将窗体类实例化,再进⾏操作。
第⼆种⽅法是:定义全局变量。现在我采⽤是这种⽅法。
Module ChargeSystemMoudel
'在模块中定义的全局变量,表⽰学⽣的数⽬
Public intCountOnline As Integer
Private Sub menuAllLoadoff_Click(nder As Object, e As EventArgs) Handles menuAllLoadoff.Click
正能量励志文案'得到正在上机的学⽣数⽬
Dim stuCount As Integer
stuCount = DGVStuOnline.Rows.Count
'从最后⼀条记录,开始下机
For i = stuCount - 1 To 0 Step -1
Dim stuCardNo As String
'取得DataGridView控件中。学⽣上机记录的卡号字段值
stuCardNo = Trim(DGVStuOnline.Rows(stuCount - 1).Cells("卡号").Value.ToString)
Dim updateStuLoad As New ManageStuLoadBLL
'定义学⽣实体,按学⽣卡号更新上机记录
Dim enStuOnOff As New StuOnOffEnity
enStuOnOff.CardNO = stuCardNo
Try
'对当前学⽣,在数据库表中进⾏记录更新
updateStuLoad.UpdateLoadRecordStu(enStuOnOff)
Catch ex As Exception
Throw ex
cad插入End Try
手绘古风
'将记录从DataGridVied中删除。
DGVStuOnline.Rows.RemoveAt(DGVStuOnline.Rows(stuCount - 1).Index)
stuCount = Me.DGVStuOnline.Rows.Count
'上下机窗体,学⽣数⽬减1
intCountOnline = intCountOnline - 1
Next
'显⽰上下机窗体
FrmLoadOnOff.Show()
MsgBox("全部下机完成")
End Sub
其实,⽆论第⼀种、第⼆种,到此为⽌,只是完成了传值,但是并没有更新。经过多次的尝试与请教,
如果上下机窗体中显⽰当前的学⽣数,就要将上下机窗体加载,所以,我添加了显⽰的⽅法。在上下机窗体加载的时候,更新学⽣的数⽬。
上下机窗体加载的代码:烈火炎炎
Private Sub FrmLoadOnOff_Load(nder As Object, e As EventArgs) Handles MyBa.Load
挖地雷游戏' Enter响应上机事件()
Me.AcceptButton = Me.btnLoadOn
Dim getmytime As New GetDateTimeBll
Dim CurrentTime As String
'获得服务器当前的时间
CurrentTime = getmytime.GetTime()
txtCurrentTime.Text = CurrentTime
'查询数据库,获得正在上机的学⽣数⽬
Dim intCount As Integer
Dim dtOnlineStu As DataTable
Dim CurrentStu As New ManageStuLoadBLL
dtOnlineStu = CurrentStu.QueryOnlineStu()
intCount = dtOnlineStu.Rows.Count
txtCountOnLine.Text = intCount.ToString()
'txtCountOnLine.Text = intCountOnline.ToString()
End Sub拿铁因子
天灵灵⽬前,我只学到了这两种⽅法。通过这次,发现了学习上的很⼤的弊端。
汽车LED灯PS:崔师哥说,很简单不难,我⽤了N久,青峰帮忙分析了学习上的问题,还是收获颇丰的。