VB程序员博客
我做了一个小ERP系统,当我点击 MDIform窗体的菜单中的一个窗体时,可以正常显示,但是如果再打开其他的窗体或者这个窗体就没了,除非把所有的窗体都最小话,才能看见,而且如果这个窗体有对话框弹出的话,这个窗体就会消失,关闭对话框这个窗体就又弹出来了,不知道是什么原因,请各位大哥大姐多多帮忙啊!!!
以下是这个窗体的代码:
其中:Rsxxshow 是mshflexgrid控件,c1是combobox控件,其他的基本上都是按钮控件。
Option Explicit
Public conn As ADODB.Connection
Dim lCurrentPage As Long
Dim adoprimaryrs As ADODB.Recordset
Dim lPageCount As Long
Dim nPageSize As Integer
Dim lCount As Long
Dim sql As String
Public str As String
Public delid As Integer
Public gengx
Dim rst As ADODB.Recordset
Dim myarray()
Public lpages As Long
Dim gengxnum
Public Sub dbrefresh(ByRef lpagel As Long)
Rsxxshow.ColWidth(0) = 350
Rsxxshow.RowHeight(0) = 330
Rsxxshow.AllowUserResizing = 1
gengx = 0
Dim i As Integer
Dim m As Integer
lCurrentPage = 1
nPageSize = 5
Set adoprimaryrs = New ADODB.Recordset
sql = "select 员工编号,姓名,性别,出生日期,民族,婚姻状况,政治面貌,学历,进入公司时间,转正时间,部门,岗位,籍贯,出生地,身份证号,所学专业,毕业学校,技术证书,家庭地址,电话,健康状况,照片,登记时间 from users order by 部门 asc"
adoprimaryrs.Open sql, Conngongsi, 1, 1
adoprimaryrs.PageSize = nPageSize
'页数
lPageCount = adoprimaryrs.PageCount
If lCurrentPage > lPageCount Then
lCurrentPage = lPageCount
End If
C1.Clear
C1.Text = "页次"
For i = 1 To lPageCount
C1.AddItem i
Next
For i = 0 To adoprimaryrs.Fields.Count - 1
ReDim Preserve myarray(i)
myarray(i) = adoprimaryrs.Fields(i).Name
Next
Call Loadcontrol(lpagel)
End Sub
Private Sub del_Click()
Dim s As String
If gengx <> 0 Then
s = MsgBox("你正在删除的纪录编号为:" & gengx, vbYesNo, "提示")
If s = vbYes Then
Conngongsi.Execute "Delete From users Where 员工编号 ='" & gengx & "'"
gengx = 0
lpages = 1
End If
End If
Call dbrefresh(lpages)
End Sub
Public Sub CloseConn()
If Not conn Is Nothing Then
conn.Close
Set conn = Nothing
End If
End Sub
Private Sub add_Click()
rsgl.Show
End Sub
Private Sub altertable_Click()
'zdgl.Show
End Sub
Private Sub b1_Click()
If Trim(C2.Text) <> "查询内容" And Trim(T1) <> "" Then
sql = "select 员工编号,姓名,性别,出生日期,民族,婚姻状况,政治面貌,学历,进入公司时间,转正时间,部门,岗位,籍贯,出生地,身份证号,所学专业,毕业学校,技术证书,家庭地址,电话,健康状况,照片,登记时间 from users where " & C2.Text & " = '" & T1 & " ' order by 员工编号 asc"
Set rst = New ADODB.Recordset
rst.Open sql, Conngongsi, 1, 1
If Not (rst.EOF And rst.BOF) Then
Set Rsxxshow.DataSource = rst
Else
MsgBox "没有符合条件的查询", , "提示"
Exit Sub
End If
Else
MsgBox "请先填写查询内容并选择类型!", , "提示"
Exit Sub
End If
End Sub
Private Sub C1_Click()
lCurrentPage = C1.Text
Call Loadcontrol(lCurrentPage)
If lCurrentPage = adoprimaryrs.PageCount Then
cmdPrevious.Enabled = True
first.Enabled = True
End If
End Sub
Private Sub cmdNext_Click()
If lCurrentPage < adoprimaryrs.PageCount Then
lCurrentPage = lCurrentPage + 1
Call Loadcontrol(lCurrentPage)
End If
End Sub
Private Sub cmdPrevious_Click()
If lCurrentPage > 1 Then
lCurrentPage = lCurrentPage - 1
Call Loadcontrol(lCurrentPage)
End If
End Sub
Private Sub Command1_Click()
'back.Show
End Sub
Private Sub Command2_Click()
'restore.Show
End Sub
Private Sub Command3_Click()
lpages = 1
dbrefresh (lpages)
End Sub
Private Sub Command4_Click()
'gzshow.Show
End Sub
Private Sub out_Click()
Unload Me
End Sub
Private Sub Rsxxshow_Click()
With Rsxxshow
If .MouseRow > 0 Then
If Trim(.TextMatrix(.RowSel, 0)) = "" Then
.TextMatrix(.RowSel, 0) = "√"
gengxnum = gengxnum + 1
Label2 = gengxnum
Else
.TextMatrix(.RowSel, 0) = ""
.ColSel = Rsxxshow.Cols - UBound(myarray) - 1
If gengxnum < 0 Then
gengxnum = 0
Else
gengxnum = gengxnum - 1
End If
Label2 = gengxnum
End If
End If
End With
End Sub
Private Sub Rsxxshow_MouseDown(Button As Integer, Shift As Integer, x As Single, Y As Single)
If Button = 2 Then
Rsxxshow.Row = Rsxxshow.MouseRow
Rsxxshow.ColSel = Rsxxshow.Cols - 1
gengx = Rsxxshow.TextMatrix(Rsxxshow.MouseRow, 1)
RSshow.PopupMenu popm
End If
End Sub
Private Sub delall_Click()
Dim i As Long
Dim s
If gengxnum > 0 Then
s = MsgBox("你确定要删除这" & gengxnum & "条纪录吗?", vbYesNo, "提示")
If s = vbYes Then
With Rsxxshow
For i = 1 To .Rows - 1 '循环删除选种的行
If .TextMatrix(i, 0) = "√" Then
Conngongsi.Execute "Delete From users Where 员工编号 ='" & .TextMatrix(i, 1) & "'"
End If
Next
End With
MsgBox "删除成功!", vbOKOnly + vbExclamation, "提示"
gengxnum = 0
lpages = 1
Call dbrefresh(lpages)
End If
End If
End Sub
Private Sub delmenu_Click()
Call del_Click
End Sub
Private Sub first_Click()
lCurrentPage = 1
Call Loadcontrol(lCurrentPage)
End Sub
Private Sub Form_Load()
Rsxxshow.ColWidth(0) = 350
Rsxxshow.RowHeight(0) = 330
Rsxxshow.AllowUserResizing = 1
gengx = 0
Dim i As Integer
Dim m As Integer
lCurrentPage = 1
nPageSize = 5
Set adoprimaryrs = New ADODB.Recordset
sql = "select 员工编号,姓名,部门,岗位,性别,出生日期,民族,婚姻状况,政治面貌,学历,进入公司时间,转正时间,籍贯,出生地,身份证号,所学专业,毕业学校,技术证书,家庭地址,电话,健康状况,照片,登记时间 from users order by 部门 asc"
adoprimaryrs.Open sql, Conngongsi, 1, 1
adoprimaryrs.PageSize = nPageSize
'页数
lPageCount = adoprimaryrs.PageCount
If lCurrentPage > lPageCount Then
lCurrentPage = lPageCount
End If
C1.Text = "页次"
For i = 1 To lPageCount
C1.AddItem i
Next
For i = 0 To adoprimaryrs.Fields.Count - 1
ReDim Preserve myarray(i)
myarray(i) = adoprimaryrs.Fields(i).Name
Next
Call Loadcontrol(lCurrentPage)
End Sub
Private Sub Loadcontrol(lpage As Long)
Dim x As Long
If lpage = 1 Then
last.Enabled = True
cmdNext.Enabled = True
first.Enabled = False
cmdPrevious.Enabled = False
ElseIf lpage = lPageCount Then
last.Enabled = False
cmdNext.Enabled = False
first.Enabled = True
cmdPrevious.Enabled = True
Else
last.Enabled = True
cmdNext.Enabled = True
first.Enabled = True
cmdPrevious.Enabled = True
End If
adoprimaryrs.AbsolutePage = lpage
'定义另一个记录集
Dim objrs As New ADODB.Recordset
'添加需要显示的字段名称
For x = 0 To UBound(myarray)
objrs.Fields.Append myarray(x), adVarChar, 50
Next
objrs.Open
'将指定记录数循环添加到objrs中,并且实现分页
For lCount = 1 To nPageSize
If adoprimaryrs.EOF Or adoprimaryrs.BOF Then
Exit For
Else
objrs.AddNew
For x = 0 To UBound(myarray)
objrs.Fields(myarray(x)) = adoprimaryrs.Fields(myarray(x)) & ""
Next
adoprimaryrs.MoveNext
End If
Next
'绑定
Set Rsxxshow.DataSource = objrs
'内容居中显示
Dim i As Integer
With Rsxxshow
.ColAlignmentFixed = 4
For i = .FixedCols - 1 To .Cols - 1
.ColAlignment(i) = 4
Next
End With
'在文本框显示页数
lpages = lpage
txtPage = lpage & "/" & adoprimaryrs.PageCount
End Sub
Private Sub Form_Unload(Cancel As Integer)
If Not conn Is Nothing Then
conn.Close
End If
Set conn = Nothing
End Sub
Private Sub gengxin_Click()
gengx = Rsxxshow.TextMatrix(Rsxxshow.RowSel, 1)
usershow.Show
End Sub
Private Sub gmenu_Click()
usershow.Show
End Sub
Private Sub info_Click()
'infos.Show
End Sub
Private Sub last_Click()
lCurrentPage = adoprimaryrs.PageCount
Call Loadcontrol(lCurrentPage)
End Sub
Private Sub List1_Click()
cmdPrevious.Enabled = True
first.Enabled = True
Call Loadcontrol(lCurrentPage)
End Sub
Private Sub Rsxxshow_MouseMove(Button As Integer, Shift As Integer, x As Single, Y As Single)
With Rsxxshow
.ToolTipText = .TextMatrix(.MouseRow, .MouseCol)
End With
End Sub
支持楼上的做法
为什么是show方法的问题,只有这一个窗体是这样的,同时打开几个窗体也没有问题啊
我按照你的方法试过了不起作用,关键在与打开子窗体的时候,没有像打开其他窗体那样在任务栏中生成新的任务窗口,如果能够生成的话,应该这个问题应该就能解决了
修改下属性,应该可以解决.
你所说的属性是指什么属性
在任务栏中生成新的任务窗口那就不是子窗体了.确定窗体模式是否正确.
直接 窗体名.show就行了.