自己用vb制作类似电子表格的可输入控件

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档