




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
MSHflexGrid表格控件使用方法(1)2009-07-18 14:36下面我给大家讲一下MSHFLEXGRID常用的属性,方法事件,还有一些不能不知道的技巧.1) MSHFLEXGRID的重要属性.MSHFLEXGRID的属性非常多,其实绝大部分的属性和网格的显示的外观有关.在MSDN里,这些属性足以将人搞得眼花缭乱的了(我相信你没有耐性一个一个地翻查).下面列出常用的属性,方法事件及其简要说明.以便查阅.属性 类型 说明AllowBigSelector Boolean 返回/设置一个值,定义当在行或列的头部单击时,是否该行或列将整个被选中AllowUseResizing Enum 设置/返回一个值,定义用户是否可以调整网格行,列的尺寸BackColor Ole_Color 设置/返回一网格中非固定单元的背景色BackColorBand Array/Ole_Color 设置/返回网格中每个独立BAND的背景色BachColorBkg Ole_Color 设置/返回网格的背景色(单元头部除外)BackColorFixed Ole_Color 设置/返回网格中固定单元的背景色BackColorHeader Array/Ole_Color 设置/返回网格头部单元的背景色BackColorIndent Array/Ole_Color 设置/返回网格中凹痕部分的背景色BackColorSel Ole_Color 设置/返回网格选中单元的背景色BackColorUnpopulated Ole_Color 设置/返回网格非用户操作区的背景色BandData Array/Long 为独BAND设置/返回任意的值,以合在代码中通过这些值确定BANDBandDisplay Enum 定义在网格中BAND是水平还是垂直显示BandExpandable ARRAY/BOOLEN 设置/返回值指明独立的BAND能否被折叠或展开BandIndent Array/Long 定义BAND划分的字段数量BandLevel Long 返回当前的单元包含的BAND总数量Bands Long 返回网格中BAND总数量CellAlignment Integer 设置/返回一个值以定义当前单元的水平和垂直对齐方式CellBackColor Ole_Color 定义当前单元的字体是否为粗体CellFontBold Boolean 定义当前单元的字体是否为粗体CellFontItalic Boolean 定义当前单元的字体是否为斜体CellFontName String 定义当前单元的字体名CellFontSize String 定义当前单元的字体大小CellFontStrikeThough Boolean 定义当前单元的字体是否为突显示CellFontUnderline Boolean 定义当前单元的字体是有下划线CellFontWidth Single 定义当前单元的字体宽(用点表示)CellFontColor Ole_Color 设置/返回当前单元格的前景色CellHeight Long 设置/返回当前单元格的高度CellLeft Long 返回当前单元格的左边距CellPicture StdPicture 设置/返回当前单元格的图片CellPictureAlignment Integer 设置/返回当前单元格或某范围的单元格的图像对齐方式CelltextStyle Enum 设置/返回当前单元或选中范围单元文本的3D风格CellTop Long 返回当前单元格的垂直位置CellType Enum 设置/返回当前单元格的类型(标准.固定)CellWidth Long 返回/设置当前的单元的宽度Clip String 设置/返回网格选定范围单元的内容Col Array/Integer 设置/返回当前单元的水平坐标ColAlignment Array/Integer 设置/返回当前列的对齐方式ColalignmentBand Array/Integer 设置/返回BAND数据列的对齐方式ColAlignmentFixed Array/Integer 设置/返回固定单元数据的对齐方式ColAlignmentHeader Array/Integer 设置/返回固定头部单元数据的对齐方式ColData Ayyay/Long 为独立列设置/返回任意的值,以合在代码中通过这些值确定列ColHeader Array/Enum 定义每个BAND头部是否显示ColHeaderCaption Array/Single 定义每个BAND的列头部显示的文本ColIsVisible ARRAY/BOOLEN 返回/设置某个列是否可见ColPos Array/Long 返回某个给定列的左上角和网格左上角的距离Colposition Array/Long 设置网格列的位置Cols Long 返回/设置网格的列数量ColSel Array/Long 设置/返回某个范围单元的起始列ColWidth Array/Long 设置/返回某个列的宽度ColWordWrapOption Array/Integer 设置/返回网格的非固定单元是否允许WRAPColWordWrapOptionBand Array/Integer 定义网格的BAND是否允许WRAPColWordWrapOptionFixed Array/Integer 定义列的固定单元是否允许WRAPColWordWrapOptionHeader Array/Integer 定义各头部是否允许WRAPDataField Array/Single 一个独立列绑定的数据库字段FillStyle Enum 定义改变文本或单元的其他属性是影响所有的选中单元还是只影响活动单元FixedCols Long 设置/返回固定列的列数FixedRows Long 设置/返回固定行的行数FocusRect Enum 定义控件对当前单元的焦点表示Font StdFont 返回/设置默认字体或各单元使用的字体FontBand Array/StdFont 设置/返回各BAND使用文本的字体FontFixed Single 设置/返回固定单元使用的字体FontHeader Array/StdFont 设置/返回各头部使用的字体FontWidth Single 设置/返回默认字体宽度FontWidthBand Array/Single 设置/返回BAND使用的字宽FontWidthFixed Single 设置/返回固定单元使用的字宽FontWidthHeader Array/Single 设置/返回每个头部使用的字宽ForeColr Ole_Color 设置/返回网格非固定单元使用的前景色ForeColorBand Array/Ole_Color 设置/返回网格各BAND的前景色ForeColorFixed Ole_Color 设置/返回网格固定单元的前景色.ForeColorHeader Array/Ole_Color 设置/返回网格头部单元的前景色ForeColorSel Ole_Color 设置/返回设置单元的前景色FormatString String 定义一个格式串用来设置网格列的宽度,对齐方式,固定行文本固定列文本GridColor Ole_Color 设置/返回网格单元间的线的颜色GridColorBand Array/Ole_Color 设置/返回网格BAND的线的颜色GridColorFixed Ole_Color 设置返回网格固定单元间的线的颜色GridColorHeader Array/Ole_Color 设置/返回网格头部间的线的颜色GridColorIndent Ole_Color 设置/返回网格INDENT单元间的线的颜色GridColorUnpopulated Ole_Color 设置/返回网格UNPOPULATED区域间的颜色GrigLine Enum 定义网格单元间的线的类型GrigLinesBand Array/Enum 定义网格各BAND间的线的类型GrigLinesFixed Enum 定义网格固定单元的线的类型GrigLinesHeader Array/Enum 定义网格各头部间的线的类型GrigLinesIndent Array/Enum 定义网格INDENT单元间的线的类型GrigLinesUnpopulated Enum 定义网格UNPOPULATED区域间的线的类型GrigLinesWidth Integer 设置/返回网格单元间的线的宽度GrigLinesWidthBand Array/Integer 设置/返回网格各BAND间的线的宽度GrigLinesWidthFixed Integer 设置/返回网格固定单元间的线的宽度GrigLinesWidthHeader Array/Integer 设置/返回网格各头间的线的宽度GrigLinesWidthIndent Array/Integer 设置/返回网格INDENT单元间的线的宽度GrigLinesWidthUnpopulated Integer 设置/返回网格UNPOPULATED区域间的宽度Hieght Enum 定义如何以及何时高亮度显示网格的选中单元LeftCol Long 网格最械的可见列MergeCells Enum 设置/返回一个值表明如何及何时将有相同内容的记录进行合并MergeCol ARRAY/BOOLEN 设置/返回一个值表明哪些列可以将内容合并MergeRow ARRAY/BOOLEN 设置/返回一个值表明哪些行可以将内容合并MouseCol Long 返回鼠标光标的列坐标位置MouseRow Long 返回鼠标光标的行坐标位置Picture StdPicture 返回MSHFLEXGRID的控件快照PictureType Enum 设置/返回PICTURE类型Redraw Boolean 设置/返回一个值,表明MSHFLEXGRIDR控件是否在每个改变后重画Row Long 设置/返回当前单元的垂直坐标RowData Array/Long 为各行设置/返回任意的值,以合在代码中通过这些值确定行RowExpandable Boolean 定义当前行是否可以展开RowExpanded Boolean 返回一个值表明当前行是否展开RowHeight Array/Long 设置/返回各行的高度RowHeightMin Long 设置/返回网格中行的最小高度RowIsVisible ARRAY/BOOLEN 设置/返回一个值,表明某个特定列是否可见RowPos Array/Long 返回给定行左上角和MSHFLEXGRID控件左上角的距离RowPosition Array/Long 设置某个网格行的位置Rows Long 返回网格的行的总数或者或BAND的行的总数RowSel Long 设置/返回一个范围的单元的起始行RowSizingMode Enum 设置/返回一个值表明对一行的设置是影响网格的所有行还是只影响被调整的行ScrollBars Enum 设置/返回一个值表明MSHFLEXGRID控件的滚动条类型ScrollTrack Boolean 设置/返回一个值表明网格内容是在用户移动滚动条时随着改变还是滚动结束后改变SelectionMode Enum 设置/返回一个值表明MFHFLEXGRID控件允许的选择类型.Sort Enum 根据某些村准备设置排序的值Text String 设置/返回一个单元或一个范围内单元的文本内容TextArray array/string 不改变ROW,COL属性,设置/返回任意单元的文本内容TextMatrix array/string 设置/返回某个选定行,列的单元的文本内容TextStyle Enum 设置/返回网格通常单元的3D文本风格TextStyleBand Array/Enum 设置/返回网格BAND的3D文本风格TextStyleFixed Enum 设置/返回网格各固定行的3D文本风格TextStyleHeader Array/Enum 设置/返回网格各头部的3D文本风格TopRow Long 设置/返回网格最上面的可见行Version Integer 返回正在使用MSHFLEXGRID控件的版本WordWrap Boolean 定义当到达单元的边界时,网格的单元的内容是否WRAP2) MSHFLEXGRID控件的重要方法方法 说明AddItem 向网格中加入一新行Clear 清除网格中的内容ClearStructure 清除网格的结构(映射信息)CollapseAll 折叠网格的某个特定的所有行ExpandAll 展开网格的某个特定的所有行RemoveItem 从网格中清除一行方法AddItem和RemoveItem可以用来向网格中加入或删除行(BANDS).如果折叠或展开某个BAND的所有行,则可以使用COLLAPSEALL和EXPAANDALL方法.方法CLEAR可以清除网格中的内容,但不影响网格的行,列数,如果要清除网格的结构,包括顺序及网格各列的名称,应当使用ClearStructure方法.3) MSHFELXGRID的控件的主要事件Collapse 用户折叠了网格的一行Compare 当SORT属性被设置为CUSTOMERSORT,允许用户定义排序过程EnterCell 当一个新的单元成为当前活动单元时Expand 用户展开了网格的一行LeaveCell 当一个新单元成为当前活动单元前RowColChange 当一个新单元成为当前活动单元时Scroll 用户用键盘,滚动条滚动网格的内容或网格的内容由程序滚动时SelChangeEvent 一个新范围内的单元被选中EnterCell, LeaveCell, RowColChange事件相互联系,因为字们都在当一个新单元成为当前活动单元时被激发,实际上这些事件的顺序是:LeaveCell, EnterCell然后是RowColChange.Collapse和Expand事件在用户折叠或者展开网格的一行(BAND)时被激发.属性ROW和COL可以用来确定用户折叠或者展开的单元.当SORT属性设置为9时,对网格的每两行发生一次COMPARE事件,用户排序方法使你可以选择按照午任意列或单元对行排序.注意,使用这种排序方式的速度会慢于BUILD-IN排序.不论采用何种方式,只要对网格进行滚动时,SCROLL事件就会被激发.当SCROLLTRACK属性设置为TRUE时,如果用户用鼠标拖动或滚动时,该事件也被激发,如果SCROLLTRACK属性被设置为FALSE时,SCROLL事件只在拖动结束后激发一次.当选择单元格变化时, SelChangeEvent事件会被激发,对选择的单元范围的改变,可以通过用户操作或程序代码来实现.1) MSHFLEXGRID的编辑.关于MSHFLEXGRID的编辑,很多书都有介绍.一般都是用一个TEXTBOX作为的输入框,通过移动TEXTBOX来达到类似于EXCEL的编辑功能.很多书介绍的方法是在MOUSEDOWN或CLICK事件中移动TEXTBOX,然后,再在LeaveCell事件中写入.本文的方法与其有类似之处,但亦有小许不同,主要在写入网格时,在TEXTBOX的Change事件中写入.2)网格内容的保存与加载对于网格的保存,一般人喜欢使用.Clip属性,将整个网格一次性地写入一个文件中,当然,在文件不大时,这当然是一个好办法.但是,当网格达到几千行几万行时,这个方法好象不是很好.(各位如果有兴趣的话,可以试试下面的程序)将网格设置成5000*12,然后用随机数填充网格.然后,调用下面程序Private Sub Command4_Click() Dim msgStr As String Dim FileID As Long Dim T1 As Date Dim T2 As Date T1 = Timer() With MSHFlexGrid1 .Row = 0 .Col = 0 .RowSel = .Rows - 1 .ColSel = .Cols - 1 FileID = FreeFile msgStr = .Clip Open C:LX.TXT For Output As #FileID Print #FileID, msgStr Close #FileID End With T2 = Timer() MsgBox T2 - T1End Sub反正我的感觉是:好象死机一般,要过一分多钟后计算机才能反应过来(实测是82.5秒左右,我的计算机是:AMD2500+,512M内存).为什么一次性的写入会如此的慢呢?这大概是有的人想不到的地方.其实,这跟VB处理字符串的机制有关,如果处理5K的字符串要一秒的话,那么,处理30K的字符串绝不是处理5K的6倍,而是长得多.这种关系几乎是呈某种几何级数的关系.明白了VB原来处理大字符串的效率原来是这么底.那么,解决的办法自然就有了.就是一个字:拆,将大拆小将会大大地加快处理字符串的速度.所以,下面的网格的保存函数的主要思想就将网格中的数据分步保存,每一次保存一小部分.直到整个网格保存完成.当然,其中还有一些细小的技巧,例如:保存时将先将网格中的行,列,固定行,固定列的总数保存,然后,保存各列的宽度,再然后正式保存数据.这都是为了加载的方便与快捷作了一定的处理.(参考下面的程序)Option ExplicitDim m_Row As LongDim m_Col As LongPrivate Sub Command3_Click() 填充网格 Dim R As Long Dim C As Long For R = 0 To MSHFlexGrid1.Rows - 1 For C = 0 To MSHFlexGrid1.Cols - 1 MSHFlexGrid1.TextMatrix(R, C) = R & C Next NextEnd SubPrivate Sub Form_Load() With MSHFlexGrid1 Text1.Visible = False .RowHeight(-1) = 285 设定网格是5000行.12列. .Rows = 5000: .Cols = 12 End WithEnd Sub保存文件Private Sub Command1_Click() Call SaveFile(MSHFlexGrid1, c:kk.grd)End Sub加载文件Private Sub Command2_Click() Call LoadFile(MSHFlexGrid1, c:kk.grd)End SubPrivate Sub MSHFlexGrid1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) Text1.Visible = False With MSHFlexGrid1 m_Row = .MouseRow m_Col = .MouseCol If m_Row .FixedRows Then m_Row = .FixedRows If m_Col .FixedCols Then m_Col = .FixedCols .Row = m_Row: .Col = m_Col Text1.Move .Left + .CellLeft, .Top + .CellTop, .CellWidth, .CellHeight Text1.Text = .Text Text1.Visible = True Text1.SetFocus End WithEnd SubPrivate Sub Text1_Change() With MSHFlexGrid1 .TextMatrix(m_Row, m_Col) = Text1 End WithEnd Sub/*以下是相应的功能函数加载一个文件到表格.函数:LoadFileToGrid参数:MsgObj Mshfelxgrid控件名,FileName 加载的文件名返回值:=True 成功.=True 失败.Public Function LoadFile(MsgObj As Control, FileName As String) As Long Dim InputID As Long, FileID As Long Dim EndRow As Long, DltAdd As Long Dim AddFlag As Boolean Dim KeyTab As String, KeyEnter As String Dim FixedRows As Long, FixedCols As Long Dim GridInput As String, AddSum As String, RowColMax() As String Dim GridColMax As Long, GridRowMax As Long Dim OleRow As Long, OleCol As Long Dim SumFmtStr As String Dim DltCol As Long On Error Resume Next With MsgObj .Redraw = False Err.Clear: SetAttr FileName, 0 If Err.Number 0 Then 如果文件不存在 Err.Clear Call SaveFile(MsgObj, FileName) .Redraw = True Exit Function End If KeyTab = Chr$(vbKeyTab): KeyEnter = Chr$(13) InputID = 0: AddSum = AddFlag = False: DltAdd = 25: DltCol = 1 .Redraw = False: .FixedRows = 0: .FixedCols = 0 FileID = FreeFile Open FileName For Input As #FileID Do While Not EOF(FileID) 循环至文件尾。 Line Input #FileID, GridInput If InputID = 1 Then 取出总行数和总列数,以及各列的宽度. If InputID = 0 Then RowColMax = Split(GridInput, |) GridRowMax = CLng(0 & RowColMax(0): GridColMax = CLng(0 & RowColMax(1) If CLng(0 & RowColMax(0) 2 Then GridRowMax = 1 If CLng(0 & RowColMax(1) 1 Then .Row = EndRow: .Col = 0 .RowSel = GridRowMax - 1 .ColSel = GridColMax - 1 .Clip = AddSum AddSum = End If Close #FileID Call FormatGrid(MsgObj, SumFmtStr) .FixedRows = CLng(0 & RowColMax(2): .FixedCols = CLng(0 & RowColMax(3) .Redraw = True .Row = .FixedRows .Col = .FixedCols .RowSel = .FixedRows .ColSel = .FixedCols End WithEnd Function保存表格数据函数:SaveFile参数:MsgObj Mshfelxgrid控件名,FileName 加载的文件名返回值:=True 成功.=True 失败.Public Function SaveFile(MsgObj As Control, FileName As String) As Boolean/保存文件 Dim FileID As Long, ConTents As String Dim A As Long, B As Long Dim RowMax As Long, ColMax As Long Dim FixRows As Long, FixCols As Long Dim OleRow As Long, OleCol As Long Dim SFmtStr As String Dim strColWidth As String On Error Resume Next With MsgObj .Redraw = False FixRows = .FixedRows: FixCols = .FixedCols RowMax = .Rows - 1: ColMax = .Cols - 1 .FixedRows = 0: .FixedCols = 0 FileID = FreeFile Open FileName For Output As #FileID ConTents = RowMax + 1 & | & ColMax + 1 & | & FixRows & | & FixCols & | Print #FileID, ConTents 保存总的行数和列数. For A = 0 To .ColMax strColWidth = strColWidth & .ColWidth(A) & | Next Print #FileID, Left$(strColWidth, Len(strColWidth) - 1) 保存各列的宽度. For A = 0 To RowMax .Row = A: .Col = 0 .RowSel = A: .ColSel = ColMax ConTents = .Clip Print #FileID, ConTents Next A Close #FileID .FixedRows = FixRows: .FixedCols = FixCols .Redraw = True End With SaveFile = (Err.Number = 0) Err.ClearEnd Function格式网格:在这里是设置网格宽度.Function FormatGrid(MsgObj As Control, FmtStr As String) Dim I As Long Dim WithArr() As String WithArr = Split(FmtStr, |) For I = 0 To UBound(WithArr) If IsNumeric(WithArr(I) Then If Val(WithArr(I) 0 Then MsgObj.ColWidth(I) = CLng(0 & WithArr(I) End If NextEnd Function要按照内容自动调整列宽。只要适当地修改一下Text1_Change函数即可,如下:Private Sub Text1_Change() Dim OleWidth As Long Dim NewWidth As Long With MSHFlexGrid1 .TextMatrix(m_Row, m_Col) = Text1 .Text = Text1 根据输入自动调列宽 NewWidth = Me.TextWidth(.Text)新列宽 OleWidth = .CellWidth 旧列宽 If NewWidth OleWidth Then 如果新列大于旧列,则将列宽设置为一个新值。 .ColWidth(.Col) = NewWidth Text1.Width = NewWidth DoEvents End If End WithEnd Sub编写一个类,首先在确定其功能。对某个控件功能的扩充,无非是增加一些原控件没有的属性和方法而已。只要你曾经设计过类或设计过控件,这些相对而言并不是很难。本文假定用户曾有个设计过一个简单类的经历。功能的提出:网格编辑,文件保存,文件加载,键盘的移动(用箭头,PAGEUP,PAGEDOWN实现向左,向下,翻页等),网格插入一行,网格插入一列,删除一行,删除一列,范围内删除内容,范围内删除列,范围内删除行。实现要点:对于网格的编辑,保存和加载。此不再叙述。对于键盘的移动,这里有一个难点。因为,我们并不能通过MSHFLEXGRID的滚动来移动当前表格,这里用到一个技巧,就是:移动编辑框到相应的网格即可实现滚动功能。对于插入行列等,其实思路非常简单,实质上就是内容的“搬运”。例如,要在当前行下插入一行,则将网格扩展一行,然后,将所有内容向下移动一行,再清空当前行。实现插入列也一样。仅上面将行变成列而已。关于范围内删除内容则更简单,清空即可。删除行可直接将选择的行删除(MSHFLEXGRID提供了相应的方法),删除列则麻烦一点。先将列内容前移,然后,重新设置网格的列数即可。由于程序比较长,所以,我也不能细述每部分的功能,而且,也可能存在BUG。当然,我既然有胆将这片药膏贴出来,致到运行上基本能通过了。下面的该类提供的属性和方法:*属性*BindGrid 绑定表格,如:SET BindGrid=Mshflexgrid1.(该属性是最重要的属性.必须首先设置)BindText 绑定文本框,如:SET BindText=ev_text.(该属性是最重要的属性.必须首先设置)BindPicture 绑定图片框,如:SET BindPicture=PictureBox1.(该属性是最
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 社区组织考试题库及答案
- 森林防火安全知识培训
- 梭状芽胞杆菌课件
- 焊工(技师)理论考试试题及答案
- 2025年文化旅游讲解员高级题库大全
- 2025年高频考点机关安保招聘面试中的法律法规知识应用
- 2025年电商公司运营中心主管面试备考要点及预测题
- 2025年旅游景点导游资格考试备考宝典
- 2025年电子商务运营师能力评估模拟题
- 2025年篮球裁判员比赛水平测试试题及答案
- 公共基础知识试题(附答案)
- 2025年湖北省中考语文真题(含答案)
- 2025年四川三支一扶考试公共基础知识试卷
- 战术基础动作低姿匍匐
- 2025年公文核改竞赛试题及答案
- 2025年秋季学期开学第一次中层班子会上校长精彩讲话:向小处看往实里干朝远处谋
- 下肢开放性损伤课件
- 有机硅行业面试攻略:高级岗位面试题库
- 专利分级管理办法
- TCCEAS001-2022建设项目工程总承包计价规范
- 漆黑的魅影-精灵分布图鉴
评论
0/150
提交评论