【VB与数据库】——机房收费系统小问题归总

    机房收费系统到现在接近完成,第一个没有源码的程序,说起来还是很激动的。在做这个系统的过程中,不仅要理清整体的思路,其中的一些小知识点和控件的使用更能引起我们的注意,毕竟在伟大的程序也是由小慢慢叠加而成!所以及时对知识的总结还是非常重要的,那么颗粒归仓吧 。

   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>

接上面的遗留问题,没有最大化按钮自动最小化之后,就是这样的

             【VB与数据库】——机房收费系统小问题归总_第1张图片

再也没方法使其再次出现,只能点击关闭按钮后,重新打开,很麻烦!

关于这个东西其实依旧可以把窗体的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>

                 【VB与数据库】——机房收费系统小问题归总_第2张图片

关于窗体显示的问题到现在终于告一段落。。开始下一个问题吧。

    4、获取计算机名称

    这一个其实有很多种方式,我使用的是利用VB本身自带的控件Winsock,添加的方式如下:

在工程——部件——控件,然后选择下图中方框中的内容

                  【VB与数据库】——机房收费系统小问题归总_第3张图片

 

<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>

【总结】

     机房收费系统进行很长时间了,类似于上面的小知识点有很多,需要我们不断地学习、探究,每一个问题都是一次成长的计划,不必害怕什么,只要脚踏实地的去做就好!不管怎样的困难,解决的过程中,不仅收获的新的技能,更是解决问题的勇气!


  

 

你可能感兴趣的:(【VB与数据库】——机房收费系统小问题归总)