添加行标头和列标头 将下列代码添加到窗体的 Form_Load 过程中以修改 MSFlexGrid 控件,使它在外观上与工作表相象: Sub Form_Load () Dim i As Integer '使第一列较窄。 Fg2.ColWidth(0) = Fg2.ColWidth(0) / 2 Fg2.ColAlignment(0) = 1 '放置在正中。 '标记行和列。 For i = Fg2.FixedRows To Fg2.Rows - 1 Fg2.TextArray(fgi(i, 0)) = i Next For i = Fg2.FixedCols To Fg2.Cols - 1 Fg2.TextArray(fgi(0, i)) = i Next '初始化编辑框(于是,现在可加载它)。 txtEdit = "" End Sub
然后创建计算 TextArray 属性索引值的函数: Function Fgi (r As Integer, c As Integer) As Integer Fgi = c + Fg2.Cols * r End Function
添加单元内部编辑功能 示例应用程序 (Flex.vbp) 演示了为移动和选择一组单元所需的功能。为添加单元内部编辑功能,须将下列代码添加到 MSFlexGrid 控件的 KeyPress 和 DblClick 事件中: Sub Fg2_KeyPress (KeyAscii As Integer) MSFlexGridEdit Fg2, txtEdit, KeyAscii End SubSub Fg2_DblClick () MSFlexGridEdit Fg2, txtEdit, 32 '模拟一个空格。 End Sub为初始化文本框并将焦点从 MSFlexGrid 控件转移到 TextBox,可添加下列例程: Sub MSFlexGridEdit (MSFlexGrid As Control, _ Edt As Control, KeyAscii As Integer) '使用已输入的字符。 Select Case keyascii '空格表示编辑当前的文本。 Case 0 To 32 Edt = MSFlexGrid Edt.SelStart = 1000 '其它所有字符表示取代当前的文本。 Case Else Edt = Chr(keyascii) Edt.SelStart = 1 End Select '在合适的位置显示 Edt。 Edt.Move MSFlexGrid.CellLeft, MSFlexGrid.CellTop, _ MSFlexGrid.CellWidth, MSFlexGrid.CellHeight Edt.Visible = True '启动工作。 Edt.SetFocus End Sub为更新数据向 TextBox 添加新的功能 将下列例程添加到 TextBox 的 KeyPress 和 DblClick 事件中,以实现数据更新: Sub txtEdit_KeyPress (KeyAscii As Integer) '删除回车符,以消除嘟嘟声。 If KeyAscii = vbCr Then KeyAscii = 0 End SubSub txtEdit_KeyDown (KeyCode As Integer, _ Shift As Integer) EditKeyCode Fg2, txtEdit, KeyCode, Shift End SubSub EditKeyCode (MSFlexGrid As Control, Edt As _ Control, KeyCode As Integer, Shift As Integer) '标准编辑控件处理。 Select Case KeyCode Case 27 'ESC:隐藏焦点并将其返回 MSFlexGrid。 Edt.Visible = False MSFlexGrid.SetFocus Case 13 'ENTER 将焦点返回 MSFlexGrid。 MSFlexGrid.SetFocus Case 38 '向上。 MSFlexGrid.SetFocus DoEvents If MSFlexGrid.Row > MSFlexGrid.FixedRows Then MSFlexGrid.Row = MSFlexGrid.Row - 1 End If Case 40 '向下。 MSFlexGrid.SetFocus DoEvents If MSFlexGrid.Row < MSFlexGrid.Rows - 1 Then MSFlexGrid.Row = MSFlexGrid.Row + 1 End If End Select End Sub
将 TextBox 的数据复制到 MSFlexGrid 最后,当把数据输入到 TextBox 中时,先告诉 MSFlexGrid 控件应该对数据做什么。当用户输入数据并按 ENTER 键,或用鼠标单击 MSFlexGrid 控件中的另一个单元时,焦点将返回此控件。这时 TextBox 中的文本被复制到活动单元中。将下列代码添加到 GotFocus 和 LeaveCell 事件过程中: Sub Fg2_GotFocus () If txtEdit.Visible = False Then Exit Sub Fg2 = txtEdit txtEdit.Visible = False End SubSub Fg2_LeaveCell () If txtEdit.Visible = False Then Exit Sub Fg2 = txtEdit txtEdit.Visible = False End Sub
你主要想解决什么难题?说说,我给你看看。
其实在MSDN上也有它的例子的啊,你可以查一下子。
它的定位是通过. row 属性来设定的。
1. 创建控件。
2. 设置属性。
3. 添加行标头和列标头。
4. 添加单元内部编辑功能。
5. 向文本框(“编辑”框)添加更新数据的功能。
6. 将数据从文本框中复制到 MSFlexGrid。
安装
方案中使用下述控件:
■ MSFlexGrid 控件
■ TextBox 控件
创建控件
本例中添加一个 MSFlexGrid 控件并在其内部添加一个 TextBox 控件,由此创建父子关系。如下所示:
设置属性
为 MSFlexGrid 控件和 TextBox 控件设置下述属性:
对象 属性 设置值MSFlexGrid 控件 Name Fg2
Cols 6
Rows 20
FillStyle 1 - Repeat
FocusRect 2 - Heavy
FontName Arial
FontSize 9
TextBox Name txtEdit
FontName Arial
FontSize 9
BorderStyle 0 - None
Visible False
添加行标头和列标头
将下列代码添加到窗体的 Form_Load 过程中以修改 MSFlexGrid 控件,使它在外观上与工作表相象:
Sub Form_Load ()
Dim i As Integer '使第一列较窄。
Fg2.ColWidth(0) = Fg2.ColWidth(0) / 2
Fg2.ColAlignment(0) = 1 '放置在正中。 '标记行和列。
For i = Fg2.FixedRows To Fg2.Rows - 1
Fg2.TextArray(fgi(i, 0)) = i
Next
For i = Fg2.FixedCols To Fg2.Cols - 1
Fg2.TextArray(fgi(0, i)) = i
Next '初始化编辑框(于是,现在可加载它)。
txtEdit = ""
End Sub
然后创建计算 TextArray 属性索引值的函数:
Function Fgi (r As Integer, c As Integer) As Integer
Fgi = c + Fg2.Cols * r
End Function
添加单元内部编辑功能
示例应用程序 (Flex.vbp) 演示了为移动和选择一组单元所需的功能。为添加单元内部编辑功能,须将下列代码添加到 MSFlexGrid 控件的 KeyPress 和 DblClick 事件中:
Sub Fg2_KeyPress (KeyAscii As Integer)
MSFlexGridEdit Fg2, txtEdit, KeyAscii
End SubSub Fg2_DblClick ()
MSFlexGridEdit Fg2, txtEdit, 32 '模拟一个空格。
End Sub为初始化文本框并将焦点从 MSFlexGrid 控件转移到 TextBox,可添加下列例程:
Sub MSFlexGridEdit (MSFlexGrid As Control, _
Edt As Control, KeyAscii As Integer) '使用已输入的字符。
Select Case keyascii '空格表示编辑当前的文本。
Case 0 To 32
Edt = MSFlexGrid
Edt.SelStart = 1000 '其它所有字符表示取代当前的文本。
Case Else
Edt = Chr(keyascii)
Edt.SelStart = 1
End Select '在合适的位置显示 Edt。
Edt.Move MSFlexGrid.CellLeft, MSFlexGrid.CellTop, _
MSFlexGrid.CellWidth, MSFlexGrid.CellHeight
Edt.Visible = True '启动工作。
Edt.SetFocus
End Sub为更新数据向 TextBox 添加新的功能
将下列例程添加到 TextBox 的 KeyPress 和 DblClick 事件中,以实现数据更新:
Sub txtEdit_KeyPress (KeyAscii As Integer)
'删除回车符,以消除嘟嘟声。
If KeyAscii = vbCr Then KeyAscii = 0
End SubSub txtEdit_KeyDown (KeyCode As Integer, _
Shift As Integer)
EditKeyCode Fg2, txtEdit, KeyCode, Shift
End SubSub EditKeyCode (MSFlexGrid As Control, Edt As _
Control, KeyCode As Integer, Shift As Integer) '标准编辑控件处理。
Select Case KeyCode Case 27 'ESC:隐藏焦点并将其返回 MSFlexGrid。
Edt.Visible = False
MSFlexGrid.SetFocus Case 13 'ENTER 将焦点返回 MSFlexGrid。
MSFlexGrid.SetFocus Case 38 '向上。
MSFlexGrid.SetFocus
DoEvents
If MSFlexGrid.Row > MSFlexGrid.FixedRows Then
MSFlexGrid.Row = MSFlexGrid.Row - 1
End If Case 40 '向下。
MSFlexGrid.SetFocus
DoEvents
If MSFlexGrid.Row < MSFlexGrid.Rows - 1 Then
MSFlexGrid.Row = MSFlexGrid.Row + 1
End If
End Select
End Sub
将 TextBox 的数据复制到 MSFlexGrid
最后,当把数据输入到 TextBox 中时,先告诉 MSFlexGrid 控件应该对数据做什么。当用户输入数据并按 ENTER 键,或用鼠标单击 MSFlexGrid 控件中的另一个单元时,焦点将返回此控件。这时 TextBox 中的文本被复制到活动单元中。将下列代码添加到 GotFocus 和 LeaveCell 事件过程中:
Sub Fg2_GotFocus ()
If txtEdit.Visible = False Then Exit Sub
Fg2 = txtEdit
txtEdit.Visible = False
End SubSub Fg2_LeaveCell ()
If txtEdit.Visible = False Then Exit Sub
Fg2 = txtEdit
txtEdit.Visible = False
End Sub
运行时,就象在本例中那样可在单个单元中输入数据:
不过用ADODC和DATAGRID很方便,写代码不用这么复杂,可以直接在DATAGRID内修改
它自动完成对数据库的提交(UpDate).