msFlexGrid 实现 直接修改单元格内容

来源:互联网 发布:淘宝卖家采集软件用法 编辑:程序博客网 时间:2024/05/22 15:43

今天在做维护学生基本信息模块时,我想直接在msflexGrid控件中显示,并修改想改变的基本信息。msflexGrid控件不能直接编辑,所以我们首先要实现能在msflexGrid控件中直接编辑的功能。实现此功能,我使用text控件来辅助我完成。

首先当msflexGrid控件发生keypress事件时,我得使text处于显示编辑状态,并能将此控件覆盖在选中的单元格上(所以,在这里我们还要设置一下text的位置及大小,涉及到msflexGrid控件的CellWidth,RowHeight,left,top,CellLeft,CellTop等属性)。

然后,当msflexGrid控件发生leaveCell事件时,我们就要将所输入的内容付给要修改的单元格了。

最后我们将所修改的内容写入数据库就好了。

但我们在操作时,会发现我们点击一个单元格而不去更改,就去选取其他单元格时,会出现刚才的单元格内容为空,或发生其他改变(根据代码不同显示结果不同,我做时由于发生leaveCell事件时,会将刚才的单元格内容等于text的值,所以出现内容为空)。并且,我们的第一行应该是字段名字而不是字段值,所以应该将第一行固定才好。

想解决这些问题就要弄懂msflexGrid控件的一下属性或方法,而且要将他们联系起来思考。

1、      msflexGrid.text指的是当前单元格内容

2、      发生msflexgrid_leaveCell事件,即我们有去点击其他事件的转变过程中时,它的RowCol指的是刚才处于要修改的单元格

3、      click事件则是现在选中的单元格的RowCol

在了解这些属性和调试不和情理的地方时我们可以使用msgbox来协助,最重要的是在了解了这些属性后,要能够分析出他们同我们要解决的问题之间的关系。把关系整明白,才有可能在这些属性方法的基础上解决好问题。

一下是部分代码,有兴趣可以看看

通用

Option Explicit

Dim strCellValue As String

Dim booChange As Boolean

——————————————

 

Private Sub MSFlexGrid1_Click()

    Dim intRow As Integer

    Dim intCol As Integer

    intRow = MSFlexGrid1.Row

    intCol = MSFlexGrid1.Col

   

    strCellValue = MSFlexGrid1.TextMatrix(intRow, intCol)

   

End Sub

 

'使text2得到msflexgri控件里的内容

Private Sub MSFlexGrid1_KeyPress(KeyAscii As Integer)

  

    If KeyAscii = 13 Then

        Text2.Text = Trim(MSFlexGrid1.Text) + Text2.Text

        Text2.SelStart = Len(Text2.Text)

        booChange = True

    Else

        Text2.Text = Chr(KeyAscii) + Text2.Text

        Text2.SelStart = 1

        booChange = True

       

    End If

    Call ShowText

    KeyAscii = 0

   

End Sub

 

'定位text2 的位置,与选中的单元格位置大小重合

Private Sub ShowText()

    Text2.Visible = False

    Text2.Width = MSFlexGrid1.ColWidth(MSFlexGrid1.Col)

    Text2.Height = MSFlexGrid1.RowHeight(MSFlexGrid1.Row)

    Text2.Left = MSFlexGrid1.CellLeft + MSFlexGrid1.Left

    Text2.Top = MSFlexGrid1.CellTop + MSFlexGrid1.Top

    Text2.Visible = True

    Text2.SetFocus

End Sub

 

'修改了内容才改变单元格内容,没有进行修改,则依旧赋值原先的值

Private Sub MSFlexGrid1_LeaveCell()

    If booChange = True Then

        MSFlexGrid1.Text = Text2.Text

        Text2.Visible = False

        Text2.Text = ""

    Else

        MSFlexGrid1.Text = strCellValue

    End If

End Sub