问题一:关于子窗体在MDI窗体中位置的问题
对于学生有一个细节的问题大家可能都会有疑问,同样小编在今天之前也有很大的疑问,那就是我们的大多数窗体为什么都要设置为MDI的子窗体? 感觉好像也没什么区别。
今天我在通过百度了解之后和大家分享,我们为什么设置主窗体和子窗体:
如果你仔细观察就会发现:如果我们不设置子窗体,那么当你关闭程序的主窗体的时候,那个子窗体还任然显示。如果用一个生活中的例子来说就是:当你把一个软件关闭后,它其中的一些功能任然可以运行,这是不是很离谱?
但是今天关于窗体优化的时候遇到一个问题:
子窗体的位置不可以通过属性:startupposition 来设置
现在问题出来了,我的所有窗体几乎都是在左上角,既然是优化,就要保证程序的美观,肯定需要将他放在正中间,后来我用代码实现了这个功能
代码:
Private Sub form_resize()
Me.Left = (FrmMain.Width - Me.Width) / 2
Me.Top = (FrmMain.Height - Me.Height) / 2
Me.Width = 10000
Me.Heigt = 7000
endsub
但是这个时候又出现一个
小编通过百度了解到:
这个问题的意思就是加载的过程中MDI窗体加载之后没有删除就又加载了一次,然而在一个工程中是不可以同时加载俩个MDI窗体的
我们可以找到“公共模块”将下面这个语句块中的一个代码语句改成注释,也就是删除之后,那么就不会出现这个问题。
Sub main()
Dim fLogin As New frmLogin
'显示登陆窗口
fLogin.Show vbModal
'判断是否授权用户
If Not fLogin.OK Then
'OK为fMainForm类的成员
'Login Failed so exit app
End
End If
Unload fLogin
'判断是将进入系统
'Set fMainForm = New FrmMain
FrmMain.Show
End Sub
最后
题解决
问题二:添加班级信息窗体—-bug
当数据库中没有任何关于班级信息的数据时,点击“添加班级信息窗体”会出错
在优化的时候我把数据库中表中的数据全部删除了,重新开始梳理,但当我运行”添加班级信息窗体” 的时候发现报错:
当时提示错误的代码:
这个时候我猜测 一定是mrc 的问题: 于是我将鼠标放在 MsgText 之后显示0条记录
所以这说明mrc中是没有数据的,那么整个过程中所有关于mrc的操作的无效的,所以才会出现错误的提示!
解决办法的思路:
如果mrc数据集中没有数据,那么我们就让程序跳过这个关于mrc的操作!
即用一个if 判断语句就可以实现:
具体代码:
具体代码:
Private Sub Command1_Click()
Dim mrc As ADODB.Recordset
Dim MsgText As String
Dim txtSQL As String
'判断内容是否为空
If Not Testtxt(txtClassno.Text) Then
MsgBox "请输入班号!", vbOKOnly + vbExclamation, "警告"
txtClassno.SetFocus
Exit Sub
End If
If Not Testtxt(txtDirector.Text) Then
MsgBox "请输入班主任!", vbOKOnly + vbExclamation, "警告"
txtDirector.SetFocus
Exit Sub
End If
If Not Testtxt(txtClassroom.Text) Then
MsgBox "请输入教室!", vbOKOnly + vbExclamation, "警告"
txtClassroom.SetFocus
Exit Sub
End If
If Not Testtxt(combograde.Text) Then
MsgBox "请输入年级!", vbOKOnly + vcexclamation, "警告"
combograde.SetFocus
Exit Sub
End If
'返回数据库中所有记录
txtSQL = "select*from class_info"
'执行查询语言
Set mrc = ExecuteSQL(txtSQL, MsgText)
If mrc.EOF = True Then
mrc.AddNew
mrc.Fields(0) = Trim(txtClassno.Text)
mrc.Fields(1) = Trim(combograde.Text)
mrc.Fields(2) = Trim(txtDirector.Text)
mrc.Fields(3) = Trim(txtClassroom.Text)
'更新数据库
mrc.Update
'关闭数据库对象
mrc.Close
MsgBox "添加班级信息成功!", vbOKOnly + vbExclamation, "添加班级信息”"
Else
'移动到第一条语句
mrc.MoveFirst
'开始循环结构的条件是:判断是否到数据集最后
'-----------------------------------------------------------
While (mrc.EOF = False)
'判断班号是否重复
If (Trim(mrc.Fields(0)) = Trim(txtClassno.Text)) Then
MsgBox "班号已经存在,请重新输入班号!", vbOKOnly + vbExclamation, "警告"
Exit Sub
txtClassno.Text = ""
txtClassno.SetFocus
Else
'移动到下一条记录
mrc.MoveNext
End If
Wend
'_______________________________________________________________
'把当前的内容添加到数据库中
mrc.AddNew
mrc.Fields(0) = Trim(txtClassno.Text)
mrc.Fields(1) = Trim(combograde.Text)
mrc.Fields(2) = Trim(txtDirector.Text)
mrc.Fields(3) = Trim(txtClassroom.Text)
'更新数据库
mrc.Update
'关闭数据库对象
mrc.Closf
MsgBox "添加班级信息成功!", vbOKOnly + vbExclamation, "添加班级信息”"
End If
所以这个时候即使mrc数据集为空,也不怕程序出现错误提示了
通过if 判断语句执行:
mrc.AddNew
mrc.Fields(0) = Trim(txtClassno.Text)
mrc.Fields(1) = Trim(combograde.Text)
mrc.Fields(2) = Trim(txtDirector.Text)
mrc.Fields(3) = Trim(txtClassroom.Text)
'更新数据库
mrc.Update
'关闭数据库对象
mrc.Close
MsgBox "添加班级信息成功!", vbOKOnly + vbExclamation, "添加班级信息”"
这块小代码运行的前提只是当数据集mrc为空,防止程序运行关于空的mrc的操作!避免出现错误提示!! 如果mrc不为空,那么就可以正常运行之前的代码。
问题三:修改班级信息—
这个bug和上一个窗体的bug有点相似:
当class中的数据为空的时候你点击修改班级信息,就会弹出错误提示
经过调试发现任然是由于数据库中没有数据,然后导致mrc为空,里面有很多关于mrc的操作语句
这个就可以用一个完美的提示来盖住这个错误,其实是用一个 if 的判断语句来 避开关于mrc的操作语句,这样就不会有错误提示了~
总是听别人说良好的用户体验至关重要!
当你用到一个软件突然报错了,你会不会有点慌?
但是如果这个时候用一个完美的提示来代替这个错误提示,会不会更好?
Private Sub Form_Load()
Dim txtSQL As String
Dim MsgText As String
'sql语句
txtSQL = "select * from class_info"
'执行查询语言
Set mrc = ExecuteSQL(txtSQL, MsgText)
If mrc.EOF = True Then
MsgBox "您的数据中没有添加班级信息,所以无法修改信息,请先添加班级信息再来修改信息!", vbOKOnly + vbExclamation, "警告"
Mrc.close
Else
'移动到第一条记录
mrc.MoveFirst
'显示数据
Call viewdata
'记录当前记录的位置
mcbookmark = mrc.Bookmark
'给标志赋初值
mcclean = True
'把数据库中的数据添加到列表框中
For i = 1 To mrc.RecordCount
combograde.AddItem mrc.Fields(3)
mrc.MoveNext
Next i
End If
End Sub
我向窗体的load 事件中添加了一个if 判断语句,判断mrc数据集是否为空,如果是空,那么就提示用户无数据信息,并且关闭数据集。这个就不会提示错误的信息,导致降低程序的用户体验。
其实最开始的时候我用的不是
Mrc.close
而是 unload me , 我想直接退出来,
但是发现错误