1、如何令MSHFlexGrid隔行或隔列以不同颜色显示(内容和背景)
2、怎样令MSHFlexGrid可编辑
3、怎样把MSHFlexGrid的当前行删除
4、怎样把MSHFlexGrid的修改保存到相应的数据库中
增加 MsFlexGrid 的编辑功能
概述
MsFlexGrid 控件没有提供文本编辑的功能,下面的例子演示了如何利用一个TextBox 实现编辑当前网格的功能。
在按下一个键后, 就把TextBox 移动到当前的位置, 并激活。 在键入回车或移动到其他网格时, 就把TextBox 中的内容放到网格中。
实现步骤
1 打开 VB5, 开启一个新的工程。
2 在菜单“工程” 中选择 “部件”, 在列表中选中 “Microsoft FlexGrid Control ..”
3 放一个 MsFlexGrid 控件和一个TextBox 控件(Text1)到 Form1。 修改MsFlexGrid 控件的名称为 Grid1, 设置Grid1 的行,列 为 4, 固定行,列为 0。 设置 Text1 的 Visiable 为 False, BorderStyle 为 None(0)。
4 在Form1 的代码中增加声明:
Const ASC_ENTER = 13 回车
Dim gRow As Integer
Dim gCol As Integer
5 增加代码到 Grid_KeyPress 过程:
Private Sub Grid1_KeyPress(KeyAscii As Integer)
Move the text box to the current grid cell:
Text1. = Grid1.Cell + Grid1.
Text1.Left = Grid1.CellLeft + Grid1.Left
Save the position of the grids Row and Col for later:
gRow = Grid1.Row
gCol = Grid1.Col
Make text box same size as current grid cell:
Text1.Width = Grid1.CellWidth - 2 * Screen.TwipsPerPixelX
Text1.Height = Grid1.CellHeight - 2 * Screen.TwipsPerPixelY
Transfer the grid cell text:
Text1.Text = Grid1.Text
Show the text box:
Text1.Visible = True
Text1.ZOrder 0 把 Text1 放到最前面!
Text1.SetFocus
Redirect this KeyPress event to the text box:
If KeyAscii <> ASC_ENTER Then
SendKeys Chr$(KeyAscii)
End If
End Sub
6 增加代码到 Text1_KeyPress 过程:
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = ASC_ENTER Then
Grid1.SetFocus Set focus back to grid, see Text_LostFocus.
KeyAscii = 0 Ignore this KeyPress.
End If
End Sub
7 增加代码到 Text1_LostFocus 过程:
Private Sub Text1_LostFocus()
Dim tmpRow As Integer
Dim tmpCol As Integer
Save current settings of Grid Row and col. This is needed only if
the focus is set somewhere else in the Grid.
tmpRow = Grid1.Row
tmpCol = Grid1.Col
Set Row and Col back to what they were before Text1_LostFocus:
Grid1.Row = gRow
Grid1.Col = gCol
Grid1.Text = Text1.Text Transfer text back to grid.
Text1.SelStart = 0 Return caret to beginning.
Text1.Visible = False Disable text box.
Return row and Col contents:
Grid1.Row = tmpRow
Grid1.Col = tmpCol
End Sub
8 好了。 按 F5 开始测试。 您可以自由地在 Grid 中移动, 按回车可以开始或结束编辑。
lihonggen0(李洪根,用.NET,标准答案来了)
你如何控制ColResize事件?
MSHFlexGrid不支持捕获队列的鼠标移动事件
这将导致textbox无法及时更新宽度
另外,滚动条的改变也将导致textbox位置不正确
这些问题你是如何解决的?
我曾经打算用钩子,可是失败了
我觉得还是直接捕获键盘事件,直接写到grid里面,不需要经过textbox
但是这样也有缺点!