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

本文介绍了如何在VB中实现msFlexGrid控件直接编辑单元格内容的功能,通过配合text控件,监听keypress和leaveCell事件,实现在msflexGrid上直接修改数据。在leaveCell事件中更新数据库,同时处理了选中其他单元格时可能出现的问题,如内容丢失和第一行固定显示字段名。

今天在做维护学生基本信息模块时,我想直接在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

评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值