有这样一篇文章:
开发者们已经总结了在表格控件(grid control)中改变数据显示方式以及添加新的数据行的各种方法。这些方法包括分割特定的数据输入窗口以及显示文本框(这样输入后的数据可以修改)。在本文中,我们将介绍一种简单的方法,用这种方法我们可以直接在表格控件中输入和修改数据。我们在例子中用到了常见的Microsoft Flex Grid Control。
让我们开始编写代码
首先,按照下面的步骤创建一个简单的VB项目:
1. 进入VB开发环境并开始一个新的项目。
2. 在Project Components中找到Microsoft FlexGrid Control 6.0。
3. 向你的表单(form)中添加一个MS FlexGrid控件,它的名字为grdInfo。现在你的屏幕应该如图A所示。
4. 在Form Load事件中加入如下代码:
CallSetGridProperties
Call FillData
5. 把清单A中的代码加到grdInfo_KeyPress(KeyAscii As Integer) 事件中。
Select Case KeyAscii
Case 65 To 90, 97 To 122, 48 To 57 'valid characters(letters & numbers only)
grdInfo.Text = grdInfo.Text & Chr(KeyAscii)
Case 8 'backspace
If Len(grdInfo.Text) > 0 Then
grdInfo.Text = Left(grdInfo.Text, (Len(grdInfo.Text) - 1))
End If
Case Else 'invalid characters
KeyAscii = 0
Beep
End Select
6. 用清单B中的代码添加Private Sub SetGridProperties()。
With grdInfo
.Cols = 4
.Rows = 1
.FocusRect = flexFocusHeavy
.SelectionMode = flexSelectionFree
.ColWidth(0) = 200
.ColWidth(1) = 1350
.ColWidth(2) = 1400
.ColWidth(3) = 1000
.Row = 0
.Col = 1
.Text = "First Name"
.Col = 2
.Text = "Last Name"
.Col = 3
.Text = "Middle Initial"
End With
7用清单C中的代码田间Private Sub FillData()。
'add data
With grdInfo
.AddItem "1" & vbTab & "Michael" & vbTab & "Foster" & vbTab & "M"
.AddItem "2" & vbTab & "Angela" & vbTab & "Johnson" & vbTab & "K"
.AddItem "3" & vbTab & "Alex" & vbTab & "Smith" & vbTab & "H"
End With
'move to first cell
With grdInfo
.Col = 1
.Row = 1
End With
7. 按[Ctrl][F5]来运行该项目,你看到的屏幕应该如图B所示。
图A
图B
现在,点击表格第一行的第一个单元,按几次退格键来清楚单元中已有的字符,然后任意填写。如你所见,你可以修改单元格中的内容。
它是如何工作的?
在FormLoad事件中,我们调用了两个subs:SetGridProperties以及FillData。SetGridProperties设置表格控件的属性,指定表格的行数和栏(列)数,并设置栏目标题和选择状态。在FillData中,我们向表格添加数据并把选择的焦点置于第一行的第一个数据栏中。
在grdInfo_KeyPress事件中,所有的动作均可发生。当用户开始向表格输入时,该事件被调用。KeyAscii是用户敲入的字符。我们检查用户按下了哪些键,基于键值决定进行哪些动作。我们用一个Select Case来判定需要执行什么动作。
KeyAscii在65到90、97到122、以及48到57的码值分别代表小写字母(a到z)、大写字符(A到Z)以及数字(1到9)。如果用户按下的键是上面三种情况中的某一种,那么就把它加到选定状态的表格单元中。我们利用表格的Text属性来做到这一点,表格的Text属性把适当的字符加到处于选定状态的单元并返回中其中的文本。
KeyAscii码8代表一个退格符。如果用户按下退格键,那么我们应该删掉处于选定状态的单元格的一个字符。这个功能依然是用表格的Text属性来实现的。过程如下:首先,我们把Text属性设定为其初值(单元格包含的文本);然后,我们用Left函数来返回文本中的字符串,删去字符串末尾的那个字符。
你可以在这儿下载完整的代码。
Option Explicit
Private Sub SetGridProperties()
With grdInfo
.Cols = 4
.Rows = 1
.FocusRect = flexFocusHeavy
.SelectionMode = flexSelectionFree
.ColWidth(0) = 200
.ColWidth(1) = 1350
.ColWidth(2) = 1400
.ColWidth(3) = 1000
.Row = 0
.Col = 1
.Text = "First Name"
.Col = 2
.Text = "Last Name"
.Col = 3
.Text = "Middle Initial"
End With
End Sub
Private Sub FillData()
'add data
With grdInfo
.AddItem "1" & vbTab & "Michael" & vbTab & "Foster" & vbTab & "M"
.AddItem "2" & vbTab & "Angela" & vbTab & "Johnson" & vbTab & "K"
.AddItem "3" & vbTab & "Alex" & vbTab & "Smith" & vbTab & "H"
End With
'move to first cell
With grdInfo
.Col = 1
.Row = 1
End With
End Sub
Private Sub Form_Load()
Call SetGridProperties
Call FillData
End Sub
Private Sub grdInfo_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case 65 To 90, 97 To 122, 48 To 57 'valid characters(letters & numbers only)
grdInfo.Text = grdInfo.Text & Chr(KeyAscii)
Case 8 'backspace
If Len(grdInfo.Text) > 0 Then
grdInfo.Text = Left(grdInfo.Text, (Len(grdInfo.Text) - 1))
End If
Case Else 'invalid characters
KeyAscii = 0
Beep
End Select
End Sub可是不能解决回车移动到相邻的列或行,不能输入小数和汉字,不能把其中输入的多行数据写入相应的数据库字段,请帮我解决以上问题!!!
先谢!!!!
开发者们已经总结了在表格控件(grid control)中改变数据显示方式以及添加新的数据行的各种方法。这些方法包括分割特定的数据输入窗口以及显示文本框(这样输入后的数据可以修改)。在本文中,我们将介绍一种简单的方法,用这种方法我们可以直接在表格控件中输入和修改数据。我们在例子中用到了常见的Microsoft Flex Grid Control。
让我们开始编写代码
首先,按照下面的步骤创建一个简单的VB项目:
1. 进入VB开发环境并开始一个新的项目。
2. 在Project Components中找到Microsoft FlexGrid Control 6.0。
3. 向你的表单(form)中添加一个MS FlexGrid控件,它的名字为grdInfo。现在你的屏幕应该如图A所示。
4. 在Form Load事件中加入如下代码:
CallSetGridProperties
Call FillData
5. 把清单A中的代码加到grdInfo_KeyPress(KeyAscii As Integer) 事件中。
Select Case KeyAscii
Case 65 To 90, 97 To 122, 48 To 57 'valid characters(letters & numbers only)
grdInfo.Text = grdInfo.Text & Chr(KeyAscii)
Case 8 'backspace
If Len(grdInfo.Text) > 0 Then
grdInfo.Text = Left(grdInfo.Text, (Len(grdInfo.Text) - 1))
End If
Case Else 'invalid characters
KeyAscii = 0
Beep
End Select
6. 用清单B中的代码添加Private Sub SetGridProperties()。
With grdInfo
.Cols = 4
.Rows = 1
.FocusRect = flexFocusHeavy
.SelectionMode = flexSelectionFree
.ColWidth(0) = 200
.ColWidth(1) = 1350
.ColWidth(2) = 1400
.ColWidth(3) = 1000
.Row = 0
.Col = 1
.Text = "First Name"
.Col = 2
.Text = "Last Name"
.Col = 3
.Text = "Middle Initial"
End With
7用清单C中的代码田间Private Sub FillData()。
'add data
With grdInfo
.AddItem "1" & vbTab & "Michael" & vbTab & "Foster" & vbTab & "M"
.AddItem "2" & vbTab & "Angela" & vbTab & "Johnson" & vbTab & "K"
.AddItem "3" & vbTab & "Alex" & vbTab & "Smith" & vbTab & "H"
End With
'move to first cell
With grdInfo
.Col = 1
.Row = 1
End With
7. 按[Ctrl][F5]来运行该项目,你看到的屏幕应该如图B所示。
图A
图B
现在,点击表格第一行的第一个单元,按几次退格键来清楚单元中已有的字符,然后任意填写。如你所见,你可以修改单元格中的内容。
它是如何工作的?
在FormLoad事件中,我们调用了两个subs:SetGridProperties以及FillData。SetGridProperties设置表格控件的属性,指定表格的行数和栏(列)数,并设置栏目标题和选择状态。在FillData中,我们向表格添加数据并把选择的焦点置于第一行的第一个数据栏中。
在grdInfo_KeyPress事件中,所有的动作均可发生。当用户开始向表格输入时,该事件被调用。KeyAscii是用户敲入的字符。我们检查用户按下了哪些键,基于键值决定进行哪些动作。我们用一个Select Case来判定需要执行什么动作。
KeyAscii在65到90、97到122、以及48到57的码值分别代表小写字母(a到z)、大写字符(A到Z)以及数字(1到9)。如果用户按下的键是上面三种情况中的某一种,那么就把它加到选定状态的表格单元中。我们利用表格的Text属性来做到这一点,表格的Text属性把适当的字符加到处于选定状态的单元并返回中其中的文本。
KeyAscii码8代表一个退格符。如果用户按下退格键,那么我们应该删掉处于选定状态的单元格的一个字符。这个功能依然是用表格的Text属性来实现的。过程如下:首先,我们把Text属性设定为其初值(单元格包含的文本);然后,我们用Left函数来返回文本中的字符串,删去字符串末尾的那个字符。
你可以在这儿下载完整的代码。
Option Explicit
Private Sub SetGridProperties()
With grdInfo
.Cols = 4
.Rows = 1
.FocusRect = flexFocusHeavy
.SelectionMode = flexSelectionFree
.ColWidth(0) = 200
.ColWidth(1) = 1350
.ColWidth(2) = 1400
.ColWidth(3) = 1000
.Row = 0
.Col = 1
.Text = "First Name"
.Col = 2
.Text = "Last Name"
.Col = 3
.Text = "Middle Initial"
End With
End Sub
Private Sub FillData()
'add data
With grdInfo
.AddItem "1" & vbTab & "Michael" & vbTab & "Foster" & vbTab & "M"
.AddItem "2" & vbTab & "Angela" & vbTab & "Johnson" & vbTab & "K"
.AddItem "3" & vbTab & "Alex" & vbTab & "Smith" & vbTab & "H"
End With
'move to first cell
With grdInfo
.Col = 1
.Row = 1
End With
End Sub
Private Sub Form_Load()
Call SetGridProperties
Call FillData
End Sub
Private Sub grdInfo_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case 65 To 90, 97 To 122, 48 To 57 'valid characters(letters & numbers only)
grdInfo.Text = grdInfo.Text & Chr(KeyAscii)
Case 8 'backspace
If Len(grdInfo.Text) > 0 Then
grdInfo.Text = Left(grdInfo.Text, (Len(grdInfo.Text) - 1))
End If
Case Else 'invalid characters
KeyAscii = 0
Beep
End Select
End Sub可是不能解决回车移动到相邻的列或行,不能输入小数和汉字,不能把其中输入的多行数据写入相应的数据库字段,请帮我解决以上问题!!!
先谢!!!!
解决方案 »
- 如何修改listview表头的颜色啊?
- 关于MsflexGrid插入行的问题,是不是有限制?
- 请问怎么建立sql语句
- 如何获取调色板的RGB属性? 谢谢
- VB中,怎样使用不重复随机函数啊
- 请教:如何实现对richtextbox现文本后面追加写入的内容,或者:如何将richtextbox文本文件中的光标定位到文件尾部?
- 100分问两个问题?
- 请问如何修改文件名?
- datagrid中的分隔线
- 一个很难的问题:如何读取WORD和EXCEL文档内容,不用OLE,那只能读出第一页。分数少点,以后会补上。
- 开发一个行业软件后,客房要源码,是有偿还是免费提供?多谢了
- 有没有text[i].text这样的表示方法
Dim adoCnn As New ADODB.Connection
Dim adoCmm As New ADODB.Command
Dim Rs As New ADODB.Recordset
Private Sub Command1_Click()
Set MSHFlexGrid1.DataSource = Nothing
MSHFlexGrid1.Clear
MSHFlexGrid1.ClearStructure
MSHFlexGrid1.Cols = 2
MSHFlexGrid1.Rows = 2
MSHFlexGrid1.Refresh
'Unload MSHFlexGrid1
Call Toolbar1_ButtonClick(Toolbar1.Buttons(1))
End SubPrivate Sub Form_Load()
'Toolbar1.Buttons(1).Image = 1
Text1.Move -10000, -10000, 1, 1
adoCnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Program Files\Microsoft Visual Studio\VB98\NWIND.MDB;Persist Security Info=False"
Rs.CursorLocation = adUseClient
Rs.Open "select * from employees", adoCnn, adOpenDynamic, adLockBatchOptimistic
Set MSHFlexGrid1.DataSource = Rs
End SubPrivate Sub MSHFlexGrid1_EnterCell()
MSHFlexGrid1.CellBackColor = vbBlue
MSHFlexGrid1.CellForeColor = vbWhite
Text1.Text = MSHFlexGrid1.Text
Text1.SelStart = 0
Text1.SelLength = Len(Text1.Text)
End SubPrivate Sub MSHFlexGrid1_LeaveCell()
MSHFlexGrid1.CellBackColor = vbWhite
MSHFlexGrid1.CellForeColor = vbBlue
End SubPrivate Sub MSHFlexGrid1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
Text1.SetFocus
End SubPrivate Sub Text1_Change()
MSHFlexGrid1.Text = Text1.Text
End SubPrivate Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case vbKeyLeft, vbKeyRight, vbKeyUp, vbKeyDown
KeyCode = 0
End Select
End Sub
Dim adoCnn As New ADODB.Connection
Dim adoCmm As New ADODB.Command
Dim Rs As New ADODB.Recordset
Private Sub Form_Load()
'Toolbar1.Buttons(1).Image = 1
Text1.Move -10000, -10000, 1, 1
adoCnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Program Files\Microsoft Visual Studio\VB98\NWIND.MDB;Persist Security Info=False"
Rs.CursorLocation = adUseClient
Rs.Open "select * from employees", adoCnn, adOpenDynamic, adLockBatchOptimistic
Set MSHFlexGrid1.DataSource = Rs
End SubPrivate Sub MSHFlexGrid1_EnterCell()
MSHFlexGrid1.CellBackColor = vbBlue
MSHFlexGrid1.CellForeColor = vbWhite
Text1.Text = MSHFlexGrid1.Text
Text1.SelStart = 0
Text1.SelLength = Len(Text1.Text)
End SubPrivate Sub MSHFlexGrid1_LeaveCell()
MSHFlexGrid1.CellBackColor = vbWhite
MSHFlexGrid1.CellForeColor = vbBlue
End SubPrivate Sub MSHFlexGrid1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
Text1.SetFocus
End SubPrivate Sub Text1_Change()
MSHFlexGrid1.Text = Text1.Text
End SubPrivate Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case vbKeyLeft, vbKeyRight, vbKeyUp, vbKeyDown
KeyCode = 0
End Select
End Sub