VB中MsFlexGrid控件的使用细则(收集)

 
>> 将文本赋值给 MsFlexGrid 的单元格
MsFlexGrid.TextMatrix(3,1)=”Hello”
>>
MsFlexGrid 控件单元格中插入背景图形
Set MsFlexGrid.CellPicture=LoadPicture(“C:/temp/1.bmp”)
>>
选中某个单元
MsFlexGrid.Row=1
MsFlexGrid.Col=1
>>
用粗体格式化当前选中单元
MsFlexGrid.CellFontBold=True
>>
添加新的一行
使用 AddItem 方法 , Tab 字符分开不同单元格的内容
dim row as string
row=”AAA”&vbtab&”bbb”
MsFlexFrid1.addItem row
>>
怎样来实现 MSFlexGrid 控件单数行背景为白色,双数的行背景为蓝色 ?
Dim i As Integer
With MSFlexGrid1
.AllowBigSelection = True ’
设置网格样式
.FillStyle = flexFillRepeat
For i = 0 To .Rows - 1
.Row = i: .Col = .FixedCols
.ColSel = .Cols() - .FixedCols - 1
If i Mod 2 = 0 Then
.CellBackColor = &HC0C0C0 ’
浅灰
Else
.CellBackColor = vbBlue ’
兰色
End If
Next i
End With
>> MSFlexGrid
控件如何移到最后一行
MSFlexGrid1.TopRow = MSFlexGrid1.Rows – 1
>>
如何判断 msflexgrid 有无滚动条
Declare Function GetScrollRange Lib "user32" (ByVal hWnd As Long, ByVal nBar As Long, lpMinPos As
Long, lpMaxPos As Long) As Long
Public Const SB_HORZ = &H0
Public Const SB_VERT = &H1
Public Function VsScroll(MshGrid As MSHFlexGrid) As Boolean ’
判断水平滚动条的可见
Dim i As Long
VsScroll = False
i = GetScrollRange(MshGrid.hWnd, SB_HORZ, lpMinPos, lpMaxPos)
If lpMaxPos <> lpMinPos Then VsScroll = True
End Function
Public Function HeScroll(MshGrid As MSHFlexGrid) As Boolean ’
判断垂直滚动条的可见
Dim i As Long
HeScroll = False
i = GetScrollRange(MshGrid.hWnd, SB_VERT, lpMinPos, lpMaxPos)
If lpMaxPos <> lpMinPos Then HeScroll = True
End Function
>>
程序运行时,想动态增加 MSFlexgrid 的列数
在第 2 列后插入一列:
Private Sub Form_Load()
Me.MSHFlexGrid1.Cols = 5
MSHFlexGrid1.Rows = 2
For i = 0 To Me.MSHFlexGrid1.Cols - 1
Me.MSHFlexGrid1.TextMatrix(0, i) = i
Me.MSHFlexGrid1.TextMatrix(1, i) = i
Next
End Sub
Private Sub Command1_Click()
Me.MSHFlexGrid1.Cols = Me.MSHFlexGrid1.Cols + 1
Me.MSHFlexGrid1.ColPosition(5) = 3
End Sub
>>
请教 MSFlexGrid 中的对齐功能的使用
设置 MSFlexGrid1.ColAlignment(index)=n
>>
得到 MSFlexGrid 控件中当前选中的一行
msflexgrid1.rowsel
就是当前选中行
>>
如何通过代码调节列宽度
msflexgrid1.colwidth(i)=4000
MsFlexGrid 控件的内容输出到文本
2004-03-19 14:25:18
'OutDataToText
'
MsFlexGrid 控件中显示的内容输出到文本文件
Public Sub OutDataToText(Flex As MSFlexGrid)
Dim s As String
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim strTemp As String
On Error GoTo Ert
Me.MousePointer = 11
On Error Resume Next
DoEvents
Dim FileNum As Integer
FileNum = FreeFile
Open "d:aa.txt" For Output As #FileNum
With Flex
k = .Rows
For i = 0 To k - 1
strTemp = ""
For j = 0 To .Cols - 1
DoEvents
strTemp = strTemp & .TextMatrix(i, j) & ","
Next j
Print #FileNum, Left(strTemp, Len(strTemp) - 1)
Next i
End With
Close #FileNum
Me.MousePointer = 0
MsgBox "
导出成功 "
Ert:
MsgBox Err.Description
Me.MousePointer = 0
End Sub
增加 MsFlexGrid 的编辑功能
概述
MsFlexGrid
控件没有提供文本编辑的功能,下面的例子演示了如何利用一个 TextBox 实现编辑当前网格的功能。在按下一个键后, 就把 TextBox 移动到当前的位置, 并激活。 在键入回车或移动到其他网格时,就把 TextBox 中的内容放到网格中。
实现步骤
1
打开 VB5 开启一个新的工程。
2
在菜单 工程 中选择 部件 在列表中选中 “Microsoft FlexGrid Control ..”
3
放一个 MsFlexGrid 控件和一个 TextBox 控件 (Text1) Form1 修改 MsFlexGrid 控件的名称为 Grid1
设置 Grid1 的行,列 4 固定行,列为 0 设置 Text1 Visiable False BorderStyle
None(0)

4
Form1 的代码中增加声明:
Const ASC_ENTER = 13 '
回车
Dim gRow As Integer
Dim gCol As Integer
5
增加代码到 Grid_KeyPress 过程:
Private Sub Grid1_KeyPress(KeyAscii As Integer)
' Move the text box to the current grid cell:
Text1.Top = Grid1.CellTop + Grid1.Top
Text1.Left = Grid1.CellLeft + Grid1.Left
' Save the position of the grids Row and Col for later:
gRow = Grid1.Row
gCol = Grid1.Col
' Make text box same size as current grid cell:
Text1.Width = Grid1.CellWidth - 2 * Screen.TwipsPerPixelX
Text1.Height = Grid1.CellHeight - 2 * Screen.TwipsPerPixelY
' Transfer the grid cell text:
Text1.Text = Grid1.Text
' Show the text box:
Text1.Visible = True
Text1.ZOrder 0 '
Text1 放到最前面!
Text1.SetFocus
' Redirect this KeyPress event to the text box:
If KeyAscii <> ASC_ENTER Then
SendKeys Chr$(KeyAscii)
End If
End Sub
6
增加代码到 Text1_KeyPress 过程:
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = ASC_ENTER Then
Grid1.SetFocus ' Set focus back to grid, see Text_LostFocus.
KeyAscii = 0 ' Ignore this KeyPress.
End If
End Sub
7
增加代码到 Text1_LostFocus 过程:
Private Sub Text1_LostFocus()
Dim tmpRow As Integer
Dim tmpCol As Integer
' Save current settings of Grid Row and col. This is needed only if
' the focus is set somewhere else in the Grid.
tmpRow = Grid1.Row
tmpCol = Grid1.Col
' Set Row and Col back to what they were before Text1_LostFocus:
Grid1.Row = gRow
Grid1.Col = gCol
Grid1.Text = Text1.Text ' Transfer text back to grid.
Text1.SelStart = 0 ' Return caret to beginning.
Text1.Visible = False ' Disable text box.
' Return row and Col contents:
Grid1.Row = tmpRow
Grid1.Col = tmpCol
End Sub
8
好了。 F5 开始测试。 您可以自由地在 Grid 中移动, 按回车可以开始或结束编辑。
使用 MsFlexGrid 控件的几个函数

VB 处理数据显示的时候 , 使用表格是一种好的方法 , 虽然 DataGrid 可以与数据源绑定 , 但是总有美中不足 , 就是外观不好看 , 所以有时应用 MsFlexGrid 显示数据还是一种比较好的方法 , 以下几个函数是用来控制 MsFlexGrid 的程序
''MsFlexGrid
操作函数 '' 合并列
Public Function MergeCol(GridObj As Object, ByVal StartCol As Long, ByVal EndCol As Long, ByVal
ColValue As String, ByVal CurrentRow As Long) As Boolean
If StartCol > EndCol Or StartCol > GridObj.Cols Or CurrentRow > GridObj.Rows Then
MsgBox "
对不起,行列设置错误! ", vbOKOnly, App.Title
MergeCol = False
Exit Function
End If
For I = StartCol To EndCol
GridObj.MergeCol(I) = True
GridObj.TextArray(faIndex(GridObj, CurrentRow, I)) = ColValue
GridObj.ColAlignment(I) = flexAlignCenterCenter
Next I
GridObj.MergeRow(CurrentRow) = True
MergeCol = True
End Function
''
合并行
Public Function MergeRow(GridObj As Object, ByVal StartRow As Long, ByVal EndRow As Long, ByVal
RowValue As String, ByVal CurrentCol As Long) As Boolean
If StartRow > EndRow Or StartRow > GridObj.Rows Or CurrentCol > GridObj.Cols Then
MsgBox "
对不起,行列设置错误! ", vbOKOnly, App.Title
MergeRow = False
Exit Function
End If
For I = StartRow To EndRow
GridObj.MergeRow(I) = True
GridObj.TextArray(faIndex(GridObj, I, CurrentCol)) = RowValue
GridObj.ColAlignment(CurrentCol) = flexAlignCenterCenter
Next I
GridObj.MergeCol(CurrentCol) = True
MergeRow = True
End Function
''
转换索引
Public Function faIndex(GridObj As Object, ByVal row As Integer, ByVal col As Integer) As Long
If row > GridObj.Rows Or row < 0 Or col > GridObj.Cols Or col < 0 Then
MsgBox "
对不起,行列设置错误! ", vbOKOnly, App.Title
faIndex = -1
Exit Function
End If

faIndex = row * GridObj.Cols + col
End Function
''
插入行
Public Function SetItem(GridObj As Object, ByVal row As Integer, ByVal col As Integer, ByVal
SetValue As String) As Boolean
If row > GridObj.Rows Or row < 0 Or col > GridObj.Cols Or col < 0 Then
MsgBox "
对不起,行列设置错误! ", vbOKOnly, App.Title
SetItem = False
Exit Function
End If
GridObj.TextArray(faIndex(GridObj, row, col)) = SetValue
etItem = True
End Function
''
得到单元格值
Public Function GetItem(GridObj As Object, ByVal row As Integer, ByVal col As Integer) As String
If row > GridObj.Rows Or row < 0 Or col > GridObj.Cols Or col < 0 Then
MsgBox "
对不起,行列设置错误! ", vbOKOnly, App.Title
GetItem = ""
Exit Function
End If
GetItem = GridObj.TextArray(faIndex(GridObj, row, col))
End Function
msflexgrid 控件中每一个 cell 格的内容是不可以由用户直接编辑的但是我们可以通过一些小技巧来方便的实现这编辑功能来扩展 msflexgrid 的应用(在实际应用中这是很常用的功能)。
你只需按下面的做即可轻松实现编辑 msflexgrid 控件数据的功能
例在窗体上放一文本框 txtvalue ,和一 msflexgrid 控件 grid
文本框控件的 keypress 事件
private sub txtvalue_keypress(keyascii as integer)
放入一些处理过程,如只需输入数字时的处理
dim i
i=1
end sub
private sub txtvalue_change()
grid.text = txtvalue.text
end sub
'
grid entercell 事件中加入下例代码
private sub grid_entercell()
txtvalue.text = grid.text
txtvalue.selstart = 0
txtvalue.sellength = len(txtvalue.text)
end sub
'
当用户输入数据时直接调用文本框的 keypress 事件
private sub grid_keypress(keyascii as integer)
txtvalue_keypress keyascii
end sub
ok,
这样一个可编辑的 msflexgrid 控件就完成了,简单吧 !!
原理
当用户点击 msflexgrid 中的某个 cell 格要输入数据时 , 产生 entercell 事件,在这里我们对文本框进行初始化,输入当前 cell 格中的内容,并且选中所有文本。当用户要按下按键进行输入时,就直接调用 txtvalue 的事件,由文本框来处理 . 处理的结果同 grid 的当前 cell 同步,使用户编辑 cell 格就象使用文本框一样方便。
 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值