自己用vb制作类似电子表格的可输入控件
应朋友之邀,准备制作一个工程软件,我首选用Visual basic 6.0语言工具来编程,可是在编程的过程中发现需要输入输出大量数据的控件,像MSFlexGrid, MSHFlexGrid, DataGrid等不能像Excel 中电子表格那样直接输入数据,可愁坏了我,于是在网上搜罗一翻,把那些个代码进行了调试,还不能使自己满意,靠别人还不如靠自己,运用别人的灵感加上自己的努力,我终于把MSFlexGrid控件给进行了改造,自己感觉挺满意的,就把自己的改造心德写成文字,分享给那些喜欢编程的童鞋们参考。
基本思路:
1. MSFlexGrid控件不能直接进行数据输入,我用一个文本框代替单元格的输入工作。
2. 当任何一个单元格获得焦点时,文本框完全覆盖获得焦点的单元格,这样就不会像MSFlexGrid控件的第一印象让人感觉生硬不爽。
3. 鼠标点击单元格,上下左右健移动单元格时,文本框还要显示相应单元格的数据,基本上是完全代替了获得焦点的单元格,这样,一个文本框的作用不仅仅是向单元格输入,还会起
到显示数据的作用。
以上思路,其实就是这么简单,不多说,下面就是具体编程过程,代码也很简单。
一, 在窗体From1中添加,一个MSFlexGrid控件,一个文本框text1.
二, 属性:
属性 | ||||||||
控件 | 名称 | height | width | Borderstyle | RowHeightMin | fixedcols | rows | cols |
MSFlexGrid控件 | Grid1 | 300 | 0 | 4 | 8 | |||
Text控件 | Text1 | 280 | 1180 | 0 | ||||
三, 属性设置好了,现在就开始写代码。你也可以全部复制粘贴
Option Explicit
Const Enter_Asc = 13 ‘首先需要声明一些常量
Const Tab_Asc = 9
Private Sub Form_Load()
Dim i As Integer
For i = 0 To Grid1.Cols – 1 ‘设置Grid控件的宽度
Grid1.ColWidth(i) = 1200
Next i
For i = 0 To 7 Step 2
Grid1.TextMatrix(0, i) = "测点编号" '在Grid固定行添加列标题。
Next i
For i = 1 To 7 Step 2
Grid1.TextMatrix(0, i) = "测点厚度(mm)"
Next i
End Sub
Private Sub Grid1_Click()
‘下面这两句很关键,是指在Grid1控件单击事件发生时,Text1控件会在相应单元格上出现
Text1.Left = Grid1.Left + (Grid1.ColWidth(0)) * Grid1.MouseCol
Text1.Top = Grid1.Top + (Grid1.RowHeight(0)) * Grid1.MouseRow
If Text1.Top = Grid1.Top Then ‘判断鼠标是否点击了列标题行,如果是的话,则自动转至下一行显示文本框,文本框就不会覆盖在列标题上。
Text1.Top = Grid1.Top + (Grid1.RowHeight(0)) * 1
End If
End Sub
Private Sub Grid1_KeyPress(KeyAscii As Integer) ‘Grid控件接受键盘输入时激活文本框
Text1.SetFocus
textbox控件边框设置Text1.SelStart = 0
If KeyAscii <> Enter_Asc And KeyAscii <> Tab_Asc Then
SendKeys Chr(KeyAscii)
End If
End Sub
Private Sub Grid1_RowColChange() ‘可以使用上下左右健控制单元格,当单元格的焦点变化时文本框也随之变化。这句很关键
Text1.Text = Grid1.Text
Text1.Left = Grid1.Left + (Grid1.ColWidth(0)) * Grid1.Col
Text1.Top = Grid1.Top + (Grid1.RowHeight(0)) * Grid1.Row
End Sub
Private Sub Text1_LostFocus()
Grid1.Text = Text1.Text
End Sub
Private Sub Text1_Change() ‘文本框的内容变化时,让文本框的内容与Grid控件内容一致
Grid1.Text = Text1.Text
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = Enter_Asc Then
Grid1.SetFocus
KeyAscii = 0
End If
End Sub
Private Sub Text1_LostFocus()
Grid1.Text = Text1.Text
End Sub
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论