📄 mdlctrl.vb
字号:
Module mdlCtrl
#Region "枚举定义"
'消息类型,分为收到的消息和已发送的消息
Enum MessageType
MsgTypeReceive
MsgTypeSend
End Enum
'视图类型,分为显示搜索结果和普通的按部门显示
Enum ViewType
vtSearch
vtList
End Enum
'部门树中结点的类型,存于Tag信息中,
'因为TypeId都>0,所以枚举类型的取值必须<=0
Enum TreeItemType
Root = 0
Inbox = -1
Outbox = -2
End Enum
'搜索面板的动作方向,显示或隐藏
Enum SearchAction
Show
Hide
End Enum
#End Region
#Region "TreeView控件的相关操作"
'// -----------------------------------------------------------------------------
'// <summary>
'// 初始化部门树,加入根结点和收件箱与发件箱
'// </summary>
'// <param name="trv">TreeView对象</param>
'// <remarks>
'// </remarks>
'// <history>
'// [Tom] 2006-1-11 Created
'// </history>
'// -----------------------------------------------------------------------------
Public Sub InitDeptTreeView(ByRef trv As TreeView)
Dim i As Integer
Dim Outbox, Sys, Inbox As TreeNode
Dim RoleObj As New InfoProSysBusiness.Role
trv.Nodes.Clear()
'添加根节点
Sys = New TreeNode("企业办公联系系统")
Sys.Tag = TreeItemType.Root '通过Tag记录识别信息
Sys.ImageIndex = 0
trv.Nodes.Add(Sys)
'添加根接点的一级子节点
Inbox = New TreeNode("收件箱")
Inbox.Tag = TreeItemType.Inbox
Inbox.ImageIndex = 1
Outbox = New TreeNode("发件箱")
Outbox.Tag = TreeItemType.Outbox
Outbox.ImageIndex = 2
Sys.Nodes.Add(Inbox)
Sys.Nodes.Add(Outbox)
'获取所有的部门
Dim node As TreeNode
Dim dmRole As InfoProSysBusiness.RoleDataModel
Dim RoleAry As New System.Collections.ArrayList
RoleObj.GetAllRoles(RoleAry)
For i = 0 To RoleAry.Count - 1
dmRole = RoleAry(i)
If dmRole.m_iRoleId <> LoginedUserInfo.m_iRoleID Then
'添加Inbox的子节点
node = New TreeNode(dmRole.m_szRoleName)
node.Tag = dmRole.m_iRoleId '部门的Tag信息根据具体的RoleId而定
node.ImageIndex = 5
Inbox.Nodes.Add(node)
'添加Outbox的子节点
node = New TreeNode(dmRole.m_szRoleName)
node.Tag = dmRole.m_iRoleId
node.ImageIndex = 6
Outbox.Nodes.Add(node)
End If
Next
'展开根节点
Sys.Expand()
'展开Inbox节点
Inbox.Expand()
Outbox.Expand()
trv.SelectedNode = Inbox
End Sub
#End Region
#Region "ListView控件相关操作"
'// -----------------------------------------------------------------------------
'// <summary>
'// 初始化信息列表的表头,根据msgType和Stat来订制其样式
'// </summary>
'// <param name="lsvInfo">TreeListView对象</param>
'// <param name="msgType">消息类型,分为收到的消息还是已发送的消息</param>
'// <param name="Stat">显示类型,正常列表显示或显示搜索结果</param>
'// <remarks>
'// </remarks>
'// <history>
'// [Tom] 2006-1-11 Created
'// </history>
'// -----------------------------------------------------------------------------
Public Sub InitMsgListView(ByRef lsvInfo As TreeListView, _
ByVal msgType As MessageType, _
ByRef Stat As ViewType)
With lsvInfo
'清空ListView项和标题头
.Items.Clear()
.Columns.Clear()
'记录当前listview所显示的是inbox 还是outbox
.Tag = msgType
'添加标题头
.Columns.Add("信息号", -2, HorizontalAlignment.Left)
If msgType = MessageType.MsgTypeSend Then
.Columns.Add("收件部门", -2, HorizontalAlignment.Left)
ElseIf msgType = MessageType.MsgTypeReceive Then
.Columns.Add("发件部门", -2, HorizontalAlignment.Left)
End If
.Columns.Add("发件人", -2, HorizontalAlignment.Left)
.Columns.Add("发件人电话", -2, HorizontalAlignment.Left)
.Columns.Add("处理时限", -2, HorizontalAlignment.Left)
.Columns.Add("发件时间", -2, HorizontalAlignment.Left)
If Stat = ViewType.vtSearch Then
.Columns.Add("回复部门", -2, HorizontalAlignment.Left)
.Columns.Add("回复人", -2, HorizontalAlignment.Left)
.Columns.Add("回复人电话", -2, HorizontalAlignment.Left)
.Columns.Add("回复时间", -2, HorizontalAlignment.Left)
End If
.Refresh()
'设置列的宽度
If .View = View.Details Then
.Columns(0).Width = .Width / 8
.Columns(1).Width = .Width / 5.5
.Columns(2).Width = .Width / 8.5
.Columns(3).Width = .Width / 6
.Columns(4).Width = .Width / 8
.Columns(5).Width = .Width / 4
End If
End With
End Sub
Public Sub UpdateMsgListView(ByRef lsvInfo As TreeListView, _
ByVal msgType As MessageType, _
ByVal iDeptSend As Integer, _
ByVal iDeptReceive As Integer, _
Optional ByVal IsShowReply As Boolean = True)
Dim MsgObj As New InfoProSysBusiness.Message
'获取信息
Dim Ary As New System.Collections.ArrayList
MsgObj.GetConciseMsgList(Ary, iDeptSend, iDeptReceive, False)
mdlCtrl.UpdateMsgListView(lsvInfo, msgType, Ary, IsShowReply)
End Sub
'// -----------------------------------------------------------------------------
'// <summary>
'// 将Ary中的信息数据添加到TreeListView中,并可设置是否显示回复信息
'// </summary>
'// <param name="lsvInfo">TreeListView对象</param>
'// <param name="msgType">消息类型,指收到的消息还是已发送的消息</param>
'// <param name="Ary">MessageDataModel对象数组</param>
'// <param name="IsShowReply">是否显示回复的信息</param>
'// <remarks>
'// </remarks>
'// <history>
'// [Tom] 2006-1-11 Created
'// </history>
'// -----------------------------------------------------------------------------
Public Sub UpdateMsgListView(ByRef lsvInfo As TreeListView, _
ByVal msgType As MessageType, _
ByVal Ary As ArrayList, _
Optional ByVal IsShowReply As Boolean = True)
Dim MsgObj As New InfoProSysBusiness.Message
Dim i As Integer
Dim bShowPlusMinus As Boolean = False
Dim lsvItem As TreeListViewItem
Dim dmMsg As InfoProSysBusiness.MessageDataModel
Dim szDeptName As String = ""
lsvInfo.Items.Clear()
For i = 0 To Ary.Count - 1
dmMsg = Ary(i)
'1) 添加一个TreeListViewItem到lsvInfo中
lsvItem = New TreeListViewItem
' a) 根据msgType显示不同的部门和图标
If msgType = MessageType.MsgTypeReceive Then
szDeptName = dmMsg.m_szDeptSendName
lsvItem.ImageIndex = 0
ElseIf msgType = MessageType.MsgTypeSend Then
szDeptName = dmMsg.m_szDeptReceiveName
lsvItem.ImageIndex = 1
End If
' b) 设置TreeListViewItem数据
With lsvItem
.Tag = dmMsg.m_iInfoID
.SubItems(0).Text = i + 1
.SubItems.Add(szDeptName)
.SubItems.Add(dmMsg.m_szAddresserTrueName)
.SubItems.Add(dmMsg.m_szAddresserTel)
.SubItems.Add(dmMsg.m_dtProcTimeLimit.Date)
.SubItems.Add(dmMsg.m_dtSendTime)
End With
' c) 添加
lsvInfo.Items.Add(lsvItem)
'2) 根据IsShowReply决定是否显示回复信息
If IsShowReply Then
Dim j As Integer
Dim dmReMsg As InfoProSysBusiness.MessageDataModel
Dim ReAry As New System.Collections.ArrayList
Dim iReSendDeptId As Integer
'根据msgType来决定回复此信息的发送部门
'如果当前显示的是收到的信息,那么回复此信息的只能是当前登录部门
'如果当前显示的是已发送的信息,那么回复此信息的可以是任意部门
If msgType = MessageType.MsgTypeReceive Then
iReSendDeptId = LoginedUserInfo.m_iRoleID
ElseIf msgType = MessageType.MsgTypeSend Then
iReSendDeptId = 0
End If
MsgObj.GetConciseReplyMsgList(ReAry, iReSendDeptId, dmMsg.m_iDeptSendId, dmMsg.m_iInfoID)
For j = 0 To ReAry.Count - 1
dmReMsg = ReAry(j)
'添加一个TreeListViewItem到lsvInfo中
Dim sublsvItem As New TreeListViewItem
' a) 根据msgType显示不同的部门
If msgType = MessageType.MsgTypeReceive Then
szDeptName = dmReMsg.m_szDeptSendName
ElseIf msgType = MessageType.MsgTypeSend Then
szDeptName = dmReMsg.m_szDeptReceiveName
End If
sublsvItem.ImageIndex = 3
' b) 设置TreeListViewItem数据
sublsvItem.Tag = dmReMsg.m_iInfoID
sublsvItem.SubItems(0).Text = j + 1
sublsvItem.SubItems.Add(szDeptName)
sublsvItem.SubItems.Add(dmReMsg.m_szDeptSendName & " - " & dmReMsg.m_szAddresserTrueName)
sublsvItem.SubItems.Add(dmReMsg.m_szAddresserTel)
sublsvItem.SubItems.Add(dmReMsg.m_dtProcTimeLimit.Date)
sublsvItem.SubItems.Add(dmReMsg.m_dtSendTime)
' c) 添加
lsvItem.Items.Add(sublsvItem)
bShowPlusMinus = True
Next j
'如果已经被回复过,则改为已回复的图标
If ReAry.Count > 0 Then
lsvItem.ImageIndex = 2
End If
End If
Next i
lsvInfo.ShowPlusMinus = bShowPlusMinus
End Sub
'// -----------------------------------------------------------------------------
'// <summary>
'// 将部门名称加入列表框中,同时可以设置一个选种的元素
'// </summary>
'// <param name="lsv">ListView对象</param>
'// <param name="iCheckedDeptId">选种的部门ID</param>
'// <param name="bShowCheckBox">是否显示复选框</param>
'// <returns>成功返回空字符串,失败返回错误信息</returns>
'// <remarks>
'// </remarks>
'// <history>
'// [Tom] 2006-1-11 Created
'// </history>
'// -----------------------------------------------------------------------------
Public Function AddDeptsToListView(ByRef lsv As ListView, _
ByVal iCheckedDeptId As Int16, _
Optional ByVal bShowCheckBox As Boolean = True) As String
Dim i As Integer
Dim ErrMsg As String = ""
'1) 读取部门信息
Dim ary As New System.Collections.ArrayList
Dim deptObj As New InfoProSysBusiness.Role
Dim lstItem As ListViewItem
Dim dmRole As InfoProSysBusiness.RoleDataModel
ErrMsg = deptObj.GetAllRoles(ary)
If ErrMsg <> "" Then
Return ErrMsg
End If
'2) 根据bShowCheckBox设置ListView是否显示复选框
lsv.CheckBoxes = bShowCheckBox
'3) 将所有的部门信息添加到ListView中,并选种iCheckedDeptId
lsv.Items.Clear()
For i = 0 To ary.Count - 1
dmRole = ary(i)
If dmRole.m_iRoleId <> LoginedUserInfo.m_iRoleID Then
lstItem = New ListViewItem(dmRole.m_szRoleName)
lstItem.Tag = dmRole.m_iRoleId
lstItem.Checked = IIf(dmRole.m_iRoleId = iCheckedDeptId, True, False)
lsv.Items.Add(lstItem)
End If
Next i
Return ErrMsg
End Function
#End Region
#Region "Combox/控件相关操作"
'// -----------------------------------------------------------------------------
'// <summary>
'// 将部门名称加入下拉列表框中,同时可以设置一个选种的元素
'// </summary>
'// <param name="cbo">Combox对象</param>
'// <param name="bIncludeLoginedDept">是否包括当前登录的部门</param>
'// <param name="bShowAllDeptItem">是否显示“全部部门”项</param>
'// <param name="iSelectedDeptId">选中的部门ID</param>
'// <returns>成功返回空字符串,失败返回错误信息</returns>
'// <remarks>
'// </remarks>
'// <history>
'// [Tom] 2006-1-11 Created
'// </history>
'// -----------------------------------------------------------------------------
Public Function AddDeptsToCombo(ByRef cbo As ComboBox, _
Optional ByVal bIncludeLoginedDept As Boolean = False, _
Optional ByVal bShowAllDeptItem As Boolean = False, _
Optional ByVal iSelectedDeptId As Integer = -1) As String
Dim i As Integer
Dim ErrMsg As String = ""
'1) 读取部门信息
Dim deptObj As New InfoProSysBusiness.Role
Dim dmDept As InfoProSysBusiness.RoleDataModel
Dim Ary As New ArrayList
ErrMsg = deptObj.GetAllRoles(Ary)
If Ary.Count < 1 Then
Return ErrMsg
End If
'2) 如果bIncludeLoginedDept为假,删除登录用户所在的部门
If bIncludeLoginedDept = False Then
For i = 0 To Ary.Count - 1
dmDept = Ary(i)
If dmDept.RoleId = LoginedUserInfo.m_iRoleID Then
Ary.RemoveAt(i)
Exit For
End If
Next
End If
'3) 如果bShowAllDeptItem为真,插入一个“所有部门”项
If bShowAllDeptItem Then
dmDept = New InfoProSysBusiness.RoleDataModel
dmDept.m_iRoleId = 0
dmDept.m_szRoleName = "所有部门"
Ary.Insert(0, dmDept)
End If
'4) 绑定Ary 到 cbo
cbo.DataSource = Ary
cbo.DisplayMember = "RoleName"
cbo.ValueMember = "RoleId"
'5) 设置选中项
cbo.SelectedValue = iSelectedDeptId
Return ErrMsg
End Function
#End Region
End Module
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -