自己用vb制作类似电子表格的可输入控件
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
自己用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 Grid1 300 0 4 8 MSFlexGri
d控件
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
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