📄 doctorreloadform.frm
字号:
TabIndex = 7
Top = 840
Width = 1200
End
Begin VB.Label LabelInLoad
AutoSize = -1 'True
BackStyle = 0 'Transparent
Caption = "用户密码:"
BeginProperty Font
Name = "宋体"
Size = 12
Charset = 0
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 240
Index = 1
Left = 1320
TabIndex = 6
Top = 1440
Width = 1200
End
End
Attribute VB_Name = "DoctorReLoadForm"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
'用户登陆界面,具体做法:
' 1. 当窗体打开时,设置滚动文本框1,2的初始位置,然后打开计时器1,使滚动文本框1开始在滚动容器中平滑滚动.在本模块中,用到两
' 个滚动文本框,两个计时器.想法是当第一个文本框移出容器时,第二个开始滚动.在第二个移出容器时,第一个开始滚动.从而达到
' 交替滚动的效果.使得用户产生一条文本连续平滑滚动的错觉.
' 2. 用户名下拉列表对应数据库中的系统用户表的医生姓名字段,为了避免初始化费时,采取折中方案,将该部分转移至下拉列表的下拉
' 事件中.从而减轻软件初始化的负担.为了避免每次点击下拉列表都需要访问数据库,设置布尔型变量DataAccess记录是否访问过.
' 3. 用户登陆部分:在用户输入完成用户名和用户密码之后,点击确定.先判断用户名是否和下拉列表中的数据相符,也就是判断输入的
' 用户名是否和数据库中的数据相符.若用户名不符合,提示重新输入.若相符,再检查密码是否相同.全部相同后登陆成功.
' 4. 登陆成功后将记录医生用户名保存与公共变量,然后显示主界面,卸载登陆界面.点击退出按钮和窗体右上角的关闭按钮时,将卸载
' 登陆界面和主界面.因此,卸载过程分为两种.为此,专门设置变量UnloadType来区别.
Option Explicit
Private UnloadType As Boolean '布尔型变量,管理退出类型,分为两种.1:完全退出,卸载登陆界面,初始化界面和主界面.2:单纯退出,
'即当输入的用户名和密码正确了,显示主界面,卸载登陆界面和初始化界面.
Private DataAccess As Boolean '记录是否访问过数据库
Private Sub Form_Load()
UnloadType = False 'False表示第一种退出,True表示第二种退出
DataAccess = False '值为True时表示已经访问过,初始时没有访问过数据库,故设置为False
TextInLoad(1).Left = PicBoxInLoad.Width '滚动文本框1放置于滚动容器PicBoxInLoad的最右端
TextInLoad(2).Left = PicBoxInLoad.Width '滚动文本框2放置于滚动容器PicBoxInLoad的最右端
TimerInLoad1.Enabled = True '打开计时器1,TimerInLoad1
End Sub
Private Sub TimerInLoad1_Timer() '计时器1打开时,滚动文本框1开始在滚动容器PicBoxInLoad中从右往左移动.计时器每5毫秒运行
'一次,这样使得滚动文本框滚动时流畅,不会出现停顿感.当滚动文本框1移动到容器左边时,滚动
'文本框2开始滚动,从而使用户感觉是一条文本在连续滚动
If TextInLoad(1).Left > -(TextInLoad(1).Width) Then '判断滚动文本框1在容器中的位置,如果还没有到容器左边
If TextInLoad(1).Left = 0 Then TimerInLoad2.Enabled = True '就让滚动文本框1左移5个单位,到容器左边时,打开计时器
TextInLoad(1).Left = TextInLoad(1).Left - 5 '2,当滚动文本框完全移出容器的左边时,关闭计时器1,等待
Else '打开指令.同时将滚动文本框移动到容器右边.
TextInLoad(1).Left = PicBoxInLoad.Width
TimerInLoad1.Enabled = False
End If
End Sub
Private Sub TimerInLoad2_Timer() '方法同计时器1的设置,计时器1与计时器2是相互激活的.
If TextInLoad(2).Left > -(TextInLoad(2).Width) Then
If TextInLoad(2).Left = 0 Then TimerInLoad1.Enabled = True
TextInLoad(2).Left = TextInLoad(2).Left - 5
Else
TextInLoad(2).Left = PicBoxInLoad.Width
TimerInLoad2.Enabled = False
End If
End Sub
Private Sub ComboBoxInLoad_DropDown() '用户名下拉列表被点击时,当下拉列表出现时发生.通过访问数据库,加载用户名
If Not DataAccess Then '若没有访问数据库,则进行访问,否则跳过此部分
Dim RecSystemUser As ADODB.Recordset '对应数据库中的系统用户表的记录集
Dim strSQL As String '存储SQL语句字符串
Dim DataRecNum As Integer '存储系统用户表中提取记录的个数
Dim I As Integer
ComboBoxInLoad.Clear
Set RecSystemUser = New ADODB.Recordset '连接系统用户表,提取医生姓名字段
strSQL = "SELECT 系统用户表.医生姓名 FROM 系统用户表 ORDER BY 医生标识"
RecSystemUser.CursorLocation = adUseClient
RecSystemUser.Open strSQL, PACSDataConn, adOpenDynamic, adLockOptimistic, adCmdText
DataRecNum = RecSystemUser.RecordCount - 1 '记录集的处理,提取医生姓名字段,添加到用户名ComboBox中,从而提供选择
RecSystemUser.MoveFirst
For I = 0 To DataRecNum
ComboBoxInLoad.AddItem (RecSystemUser.Fields(0).Value)
RecSystemUser.MoveNext
Next I
RecSystemUser.Close '使用完之后关闭数据集
DataAccess = True '当访问完数据库之后,将此变量设置为True
End If
End Sub
Private Sub ComboBoxInLoad_Click() '当在用户名下拉列表ComboboxInLoad中选中一个用户名之后,将焦点转移至用户密码输入文本框
TextInLoad(0).SetFocus
End Sub
Private Sub CmdInLoad_Click(Index As Integer) '此处为按钮数组,Index=0表示登陆按钮,Index=1表示取消按钮
If Index = 0 Then '点击登陆按钮,想法是先判断用户名是否输入,若输入了,就判断输入的用户名是否是正确的,若不正确弹出提
'示框,从新输入.然后再判断输入的密码和系统用户表中的是否相同,若不同,弹出提示框.相同就进入主窗体.
Dim ComboNumber As Integer '存储用户名ComboBox中下拉列表选项的个数
Dim I As Integer, Flag As Boolean
Dim RecSystemUser As ADODB.Recordset '对应数据库中的系统用户表的记录集
Dim strSQL As String '存储SQL语句字符串
If ComboBoxInLoad.Text = "" Then
MsgBox "请先输入用户名!", vbOKOnly, "图文工作站"
ComboBoxInLoad.SetFocus
Else
Flag = False '判断变量,布尔型,目的:如果值为False,表示输入的用户名与数据库中的不相符
ComboNumber = ComboBoxInLoad.ListCount - 1
For I = 0 To ComboNumber '根据ComboBox中的文本判断输入的用户名是否和系统用户表中的用户名相同,相同就将布尔
'型变量Flag设置为True
If Trim(ComboBoxInLoad.Text) = Trim(ComboBoxInLoad.List(I)) Then Flag = True
Next I
If Not Flag Then '如果Flag为False,输入的用户名和系统用户表中的不相符,将弹出提示框,用户名输入框ComboBoxInLoad
'清空,用户密码输入框TextInLoad(0)清空,并且使之重新获得焦点.
MsgBox "该用户名不存在,请输入或选择正确的用户名!", vbOKOnly, "图文工作站"
ComboBoxInLoad.Text = ""
TextInLoad(0).Text = ""
ComboBoxInLoad.SetFocus
Else
Set RecSystemUser = New ADODB.Recordset '连接系统用户表,提取和输入用户名相同记录的密码字段
strSQL = "SELECT 医生口令 FROM 系统用户表 WHERE 医生姓名 = '" & Trim(ComboBoxInLoad.Text) & "' "
RecSystemUser.CursorLocation = adUseClient
RecSystemUser.Open strSQL, PACSDataConn, adOpenDynamic, adLockOptimistic, adCmdText
If TextInLoad(0).Text <> RecSystemUser.Fields(0).Value Then '若密码输入不符,弹出对话框
MsgBox "输入密码错误,请重新输入!", vbOKOnly, "图文工作站"
TextInLoad(0).Text = ""
TextInLoad(0).SetFocus
Else
RegisterDoctor = ComboBoxInLoad.Text '用户登陆成功,记录下来记录医生的用户名
MainForm.Visible = True '密码正确,显示主界面
UnloadType = True '密码正确,第二种退出
Unload Me
End If
End If
End If
Else
Unload Me '第一种退出
End If
End Sub
Private Sub Form_Unload(Cancel As Integer) '在退出窗体时,根据UnloadType的值选择性退出
If (Not UnloadType) And (Not DocReloadAfterIn8) Then '如果密码不正确或者是没有在MainForm中点击了其它并选中重新登陆的情况
Unload MainForm
End If
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -