机房收费系统到现在接近完成,第一个没有源码的程序,说起来还是很激动的。在做这个系统的过程中,不仅要理清整体的思路,其中的一些小知识点和控件的使用更能引起我们的注意,毕竟在伟大的程序也是由小慢慢叠加而成!所以及时对知识的总结还是非常重要的,那么颗粒归仓吧 。
1、子窗体消失不见
原因:主窗体需要用MDIForm,这样的话窗体上是无法添加command、label、textbox等控件,所以就在窗体上放置了一个picturebox,然后把需要的控件放置在picturebox里。可是,问题也就随之而来了。此时,picturebox和其他子窗体属于同级,会把其他子窗体覆盖住。
可以使用API函数setparent解决该问题,在模块中添加以下内容
<span style="font-family:KaiTi_GB2312;font-size:18px;">Public Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long </span>然后再MDIForm中点击需要显示窗体的按钮,添加如下
<span style="font-family:KaiTi_GB2312;font-size:18px;">Private Sub Backcard_Click() SetParent frmBackcard.hWnd, Picture1.hWnd frmBackcard.Show End Sub</span>
2、窗体显示大小问题
添加完成上述内容,显示窗体就变成了如图内容:
这什么原因造成的呢?具体的我也没找到但是找到了解决方案把窗体的BorderStyle设置为1(这一项的含义固定窗体的大小),就可以解决了,虽然显示的解决但是窗体上的最大化和最小化键没了,这个有什么问题呢?下面依旧出现。。。
3、打开一个子窗体,先前打开的窗体自动最小化
通过判断窗体的属性,来进行自动最小化
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;">Private Subform_activate() Dim a As Form For Each a In Forms If a.Name <> Me.Name And a.Name<> frmMain.Name Then a.WindowState = 1 End If Next End Sub</span></span>
接上面的遗留问题,没有最大化按钮自动最小化之后,就是这样的
再也没方法使其再次出现,只能点击关闭按钮后,重新打开,很麻烦!
关于这个东西其实依旧可以把窗体的BorderStyle设置为2,只需要在显示窗体的load事件,固定一下窗体的大小就OK。
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;">Private Sub Form_Load() Me.Width = 16000 Me.Height = 10000 End Sub</span></span>
关于窗体显示的问题到现在终于告一段落。。开始下一个问题吧。
4、获取计算机名称
这一个其实有很多种方式,我使用的是利用VB本身自带的控件Winsock,添加的方式如下:
在工程——部件——控件,然后选择下图中方框中的内容
<span style="font-family:KaiTi_GB2312;">Cumptername=Trim(Winsock1.LocalHostName)</span>
5、关于MSHFlexGrid控件中所有内容自动居中
这一部分写在模块中便于每个窗体中该控件都可以调用,减少代码的重复量
<span style="font-family:KaiTi_GB2312;font-size:18px;">Public SubAdjustColWidth(frmCur As Form, gridCur As Object, Optional bNullRow As Boolean= True, Optional dblIncWidth As Double = 0) '-------------------------------------------------------------------- '功能: ' 自动调整Grid各列列宽为最合适的宽度 '参数: ' [frmCur].........................................当前工作窗体 ' [gridCur]........................................当前要调整的Grid '-------------------------------------------------------------------- Dim i, j As Integer Dim dblWidth AsDouble With gridCur For i = 0 To .Cols - 1 dblWidth = 0 If .ColWidth(i) <> 0 Then For j = 0 To .Rows - 1 IffrmCur.TextWidth(.TextMatrix(j, i)) > dblWidth Then dblWidth =frmCur.TextWidth(.TextMatrix(j, i)) End If Next .ColWidth(i) = dblWidth +dblIncWidth + 400 End If Next End With End Sub</span>
需要的使用该内容的窗体则可以直接写
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family: Arial, Helvetica, sans-serif;">CallAdjustColWidth(frmWork, MSHFlexGrid1) 'frmwork为需要部内容窗体的名称,MSHFlexGrid1控件的名称</span></span>
【总结】
机房收费系统进行很长时间了,类似于上面的小知识点有很多,需要我们不断地学习、探究,每一个问题都是一次成长的计划,不必害怕什么,只要脚踏实地的去做就好!不管怎样的困难,解决的过程中,不仅收获的新的技能,更是解决问题的勇气!