自己用VB制作类似电子表格的可输入控件
应朋友之邀,准备制作一个工程软件,我首选用Visualbasic6.0语言工具来编程,可是在编程的过程中发现需要输入输出大量数据的控件,像MSFlexGrid,MSHFlexGrid,DataGrid等不能像Excel中电子表格那样直接输入数据,可愁坏了我,于是在网上搜罗一翻,把那些个代码进行了调试,还不能使自己满意,靠别人还不如靠自己,运用别人的灵感加上自己的努力,我终于把MSFlexGrid控件给进行了改造,自己感觉挺满意的,就把自己的改造心德写成文字,分享给那些喜欢编程的童鞋们参考。基本思路:1.MSFlexGrid控件不能直接进行数据输入,我用一个文本框代替单元格的输入工作。2.当任何一个单元格获得焦点时,文本框完全覆盖获得焦点的单元格,这样就不会像MSFlexGrid控件的第一印象让人感觉生硬不爽。3.鼠标点击单元格,上下左右健移动单元格时,文本框还要显示相应单元格的数据,基本上是完全代替了获得焦点的单元格,这样,一个文本框的作用不仅仅是向单元格输入,还会起到显示数据的作用。以上思路,其实就是这么简单,不多说,下面就是具体编程过程,代码也很简单。一,在窗体From1中添加,一个MSFlexGrid控件,一个文本框text1.二,属性:属性控件MSFlexGrid控件Text控件名称Grid1Text128011800heightwidthBorderstyleRowHeightMin300fixedcols0rows4cols8三,属性设置好了,现在就开始写代码。你也可以全部复制粘贴OptionExplicitConstEnter_Asc=13‘首先需要声明一些常量ConstTab_Asc=9PrivateSubForm_Load()DimiAsIntegerFori=0ToGrid1.Cols–1‘设置Grid控件的宽度Grid1.ColWidth(i)=1200NextiFori=0To7Step2Grid1.TextMatrix(0,i)=\"测点编号\"'在Grid固定行添加列标题。NextiFori=1To7Step2Grid1.TextMatrix(0,i)=\"测点厚度(mm)\"NextiEndSubPrivateSubGrid1_Click()‘下面这两句很关键,是指在Grid1控件单击事件发生时,Text1控件会在相应单元格上出现Text1.Left=Grid1.Left+(Grid1.ColWidth(0))*Grid1.MouseColText1.Top=Grid1.Top+(Grid1.RowHeight(0))*Grid1.MouseRowIfText1.Top=Grid1.TopThen‘判断鼠标是否点击了列标题行,如果是的话,则自动转至下一行显示文本框,文本框就不会覆盖在列标题上。Text1.Top=Grid1.Top+(Grid1.RowHeight(0))*1EndIfEndSubPrivateSubGrid1_KeyPress(KeyAsciiAsInteger)‘Grid控件接受键盘输入时激活文本框Text1.SetFocusText1.SelStart=0IfKeyAscii<>Enter_AscAndKeyAscii<>Tab_AscThenSendKeysChr(KeyAscii)EndIfEndSubPrivateSubGrid1_RowColChange()‘可以使用上下左右健控制单元格,当单元格的焦点变化时文本框也随之变化。这句很关键Text1.Text=Grid1.TextText1.Left=Grid1.Left+(Grid1.ColWidth(0))*Grid1.ColText1.Top=Grid1.Top+(Grid1.RowHeight(0))*Grid1.RowEndSubPrivateSubText1_LostFocus()Grid1.Text=Text1.TextEndSubPrivateSubText1_Change()Grid1.Text=Text1.TextEndSub‘文本框的内容变化时,让文本框的内容与Grid控件内容一致PrivateSubText1_KeyPress(KeyAsciiAsInteger)IfKeyAscii=Enter_AscThenGrid1.SetFocusKeyAscii=0EndIfEndSubPrivateSubText1_LostFocus()Grid1.Text=Text1.TextEndSub
因篇幅问题不能全部显示,请点此查看更多更全内容