msFlexGrid 实现 直接修改单元格内容
2009-08-06 12:10
316 查看
今天在做维护学生基本信息模块时,我想直接在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事件,即我们有去点击其他事件的转变过程中时,它的Row和Col指的是刚才处于要修改的单元格
3、 而click事件则是现在选中的单元格的Row和Col
在了解这些属性和调试不和情理的地方时我们可以使用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
首先当msflexGrid控件发生keypress事件时,我得使text处于显示编辑状态,并能将此控件覆盖在选中的单元格上(所以,在这里我们还要设置一下text的位置及大小,涉及到msflexGrid控件的CellWidth,RowHeight,left,top,CellLeft,CellTop等属性)。
然后,当msflexGrid控件发生leaveCell事件时,我们就要将所输入的内容付给要修改的单元格了。
最后我们将所修改的内容写入数据库就好了。
但我们在操作时,会发现我们点击一个单元格而不去更改,就去选取其他单元格时,会出现刚才的单元格内容为空,或发生其他改变(根据代码不同显示结果不同,我做时由于发生leaveCell事件时,会将刚才的单元格内容等于text的值,所以出现内容为空)。并且,我们的第一行应该是字段名字而不是字段值,所以应该将第一行固定才好。
想解决这些问题就要弄懂msflexGrid控件的一下属性或方法,而且要将他们联系起来思考。
1、 msflexGrid.text指的是当前单元格内容
2、 发生msflexgrid_leaveCell事件,即我们有去点击其他事件的转变过程中时,它的Row和Col指的是刚才处于要修改的单元格
3、 而click事件则是现在选中的单元格的Row和Col
在了解这些属性和调试不和情理的地方时我们可以使用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
相关文章推荐
- 通过js实现单击或双击直接修改内容
- [转载]sed实现直接修改文件内容
- 通过js实现单击或双击直接修改内容
- sed实现直接修改文件内容
- sed实现直接修改文件内容
- 通过js实现单击或双击直接修改内容
- sed实现直接修改文件内容
- sed实现直接修改文件内容
- PHP实现直接修改表内容DataGrid功能
- sed实现直接修改文件内容
- PHP直接修改表内容DataGrid功能实现代码
- PHP直接修改表内容DataGrid功能实现代码
- sed实现直接修改文件内容
- 通过js实现单击或双击直接修改内容
- Linux之CentOS--修改主机名与IP地址,实现可直接ping主机名
- MySQL中的CONCAT、CONCAT_WS、GROUP_CONCAT函数,实现多行和多列的内容放在一个单元格内
- javascript实现修改微信分享的标题内容等
- DataGridView 取得或者修改当前单元格的内容
- 实现第一条Toast还没显示完直接显示第二条内容,改变Toast内容
- 【使用JSOUP实现网络爬虫】修改数据-设置元素的文本内容