VB.Net 两个窗体之间的传值及修改

在做机房收费系统,遇到这样一个问题:在上下机窗体(FrmloadOnff)中,存在一个文本框(txtCountOnline)显示当前上机的学生数。在查询学生上机状态的窗体中,存在全部学生下机菜单(menuAllLoadoff)、和选中学生下机菜单(menuSelectLoadoff)。界面分别如下:

上下机窗体(FrmloadOnff):



查询学生上机状态:




如果在学生状态窗体中,实现学生下机的功能,要更新上下机窗体中的文本框内上机学生的人数。

第一次做的时候,没想太多。思路是:多条上机的学生记录,在一个循环中一条记录一条记录的删除,每删一条记录,更新一次上下机窗体中文本框内正在上机的学生数。所以,代码如下:

            '学生状态查询窗体,更新上下机窗体学生数目减1
            Dim intPreCount As Integer '更新前学生数
            Dim intCurrentCount As Integer '更新后的学生数
            intPreCount = CInt(FrmloadOnOff.txtCountOnLine.Text)
            intCurrentCount = intPreCount - 1
            FrmloadOnOff.txtCountOnLine.Text = intCurrentCount.ToString  '将更新后的学生数更新到上下机窗体中


提示这样的信息:



经过查网上的资料,实践两个窗体之间的传值的方法很多种,主要有四种。我这里分析错误原因是:在VB.net中,窗体都是类,需要实例化成对象之后才能在其他窗体调用。我的代码没有经过实例化,直接使用了类,所以上下机窗体中的上机学生数并没有更新到查询学生状态的窗体中。

所以,一种方法是,在调用其他窗体前,先将窗体类实例化,再进行操作。

第二种方法是:定义全局变量。现在我采用是这种方法

Module ChargeSystemMoudel
    '在模块中定义的全局变量,表示学生的数目
    Public intCountOnline As Integer
  Private Sub menuAllLoadoff_Click(sender 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
            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(sender As Object,e As EventArgs) Handles MyBase.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


目前,我只学到了这两种方法。通过这次,发现了学习上的很大的弊端。

PS:崔师哥说,很简单不难,我用了N久,青峰帮忙分析了学习上的问题,还是收获颇丰的。

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As Dat...