猿问

麻烦帮忙看一下这个该怎么实现?

For i = 1 To 25
MSFlexGrid1.TextMatrix(i, 3)
找出最小的数,有空的跳过,在最小的数的格里变色
MSFlexGrid2.Row = i
MSFlexGrid2.Col = 3
MSFlexGrid2.CellBackColor = &HFF&

慕标琳琳
浏览 133回答 2
2回答

呼唤远方

'MSFlexGrid赋值的方法 MSFlexGrid1.TextMatrix(0, 1) = "老师"MSFlexGrid1.TextMatrix(1, 2) = "学生"MSFlexGrid1.TextMatrix(2, 3) = "校长"MSFlexGrid1.TextMatrix(3, 4) = "班主任"MSFlexGrid1.TextMatrix(4, 5) = "教务主任"MSFlexGrid1.AddItem 2MSFlexGrid1.AddItem 4MSFlexGrid1.AddItem 6MSFlexGrid1.AddItem 8``MSFLEXGRID 中如何取的某个单元格的数据Private Sub MSFlexGrid1_Click()&nbsp;MsgBox MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, MSFlexGrid1.Col), vbOKOnly, "提示消息"&nbsp;End Sub&nbsp;MSFlexGrid1.Row,表格中的当前行&nbsp;MSFlexGrid1.Col,表格中的当前列'初始化MSFlexGridDim i As IntegerMSFlexGrid1.Rows = 0For i = 0 To 10MSFlexGrid1.AddItem "AA" + Str(i)'For i = 0 To 10MSFlexGrid1.Col = 1MSFlexGrid1.Row = iMSFlexGrid1.Text = CStr(i)MSFlexGrid1.Col = 2MSFlexGrid1.Row = iMSFlexGrid1.Text = CStr(i) & CStr(i)MSFlexGrid1.Col = 3MSFlexGrid1.Row = iMSFlexGrid1.Text = CStr(i) & CStr(i) & CStr(i)Next i'实现MSFlexGrid控件,单行背景为浅灰,双行为兰色Dim j As IntegerWith MSFlexGrid1.AllowBigSelection = True ' 设置网格样式.FillStyle = flexFillRepeatFor j = 0 To .Rows - 1.Row = j: .Col = .FixedCols.ColSel = .Cols() - .FixedCols - 1If j Mod 2 = 0 Then.CellBackColor = &HC0C0C0 ' 浅灰Else.CellBackColor = vbBlue ' 兰色End IfNext jEnd With '在MsFlexGrid控件单元格中插入背景图形Set MSFlexGrid1.CellPicture = LoadPicture("f:\temp\snow.bmp")'MSFlexGrid控件如何移到最后一行MSFlexGrid1.TopRow = MSFlexGrid1.Rows - 1'隐藏第一行'Private Sub Command1_Click1()'MSFlexGrid1.RowHeight(1) = 0'End Sub'隐藏第一列'Private Sub Command_Click2()'MSFlexGrid1.ColWidth(1) = 0'End Sub在MSFlexGrid上点击右键,选择属性,选择"选择模式",自己任选&nbsp;点击得到行代码&nbsp;msgrid1.Col就是你选择的列号&nbsp;msgrid1.Row 就是你选择的行号&nbsp;msgrid1.text就是你选择单元格的内容。>> 将文本赋值给MsFlexGrid的单元格&nbsp;MsFlexGrid.TextMatrix(3,1)=”Hello”>> 在MsFlexGrid控件单元格中插入背景图形&nbsp;Set MsFlexGrid.CellPicture=LoadPicture(“C:\temp\1.bmp”)>>选中某个单元&nbsp;MsFlexGrid.Row=1&nbsp;MsFlexGrid.Col=1>>用粗体格式化当前选中单元&nbsp;MsFlexGrid.CellFontBold=True>> 添加新的一行&nbsp;使用AddItem方法,用Tab字符分开不同单元格的内容&nbsp;dim row as string&nbsp;row=”AAA”&vbtab&”bbb”&nbsp;MsFlexFrid1.addItem row>>怎样来实现MSFlexGrid控件单数行背景为白色,双数的行背景为蓝色?&nbsp;Dim i As Integer&nbsp;With MSFlexGrid1&nbsp;.AllowBigSelection = True ’ 设置网格样式&nbsp;.FillStyle = flexFillRepeat&nbsp;For i = 0 To .Rows - 1&nbsp;.Row = i: .Col = .FixedCols&nbsp;.ColSel = .Cols() - .FixedCols - 1&nbsp;If i Mod 2 = 0 Then&nbsp;.CellBackColor = &HC0C0C0 ’ 浅灰&nbsp;Else&nbsp;.CellBackColor = vbBlue ’ 兰色&nbsp;End If&nbsp;Next i&nbsp;End With>> MSFlexGrid控件如何移到最后一行&nbsp;MSFlexGrid1.TopRow = MSFlexGrid1.Rows – 1>>如何判断msflexgrid有无滚动条&nbsp;Declare Function GetScrollRange Lib "user32" (ByVal hWnd As Long, ByVal nBar As Long, lpMinPos As Long, lpMaxPos As Long) As Long&nbsp;Public Const SB_HORZ = &H0&nbsp;Public Const SB_VERT = &H1Public Function VsScroll(MshGrid As MSHFlexGrid) As Boolean ’判断水平滚动条的可见性&nbsp;Dim i As Long&nbsp;VsScroll = False&nbsp;i = GetScrollRange(MshGrid.hWnd, SB_HORZ, lpMinPos, lpMaxPos)&nbsp;If lpMaxPos <> lpMinPos Then VsScroll = True&nbsp;End FunctionPublic Function HeScroll(MshGrid As MSHFlexGrid) As Boolean ’判断垂直滚动条的可见性&nbsp;Dim i As Long&nbsp;HeScroll = False&nbsp;i = GetScrollRange(MshGrid.hWnd, SB_VERT, lpMinPos, lpMaxPos)&nbsp;If lpMaxPos <> lpMinPos Then HeScroll = True&nbsp;End Function>>程序运行时,想动态增加MSFlexgrid的列数&nbsp;在第2列后插入一列:&nbsp;Private Sub Form_Load()&nbsp;Me.MSHFlexGrid1.Cols = 5&nbsp;MSHFlexGrid1.Rows = 2&nbsp;For i = 0 To Me.MSHFlexGrid1.Cols - 1&nbsp;Me.MSHFlexGrid1.TextMatrix(0, i) = i&nbsp;Me.MSHFlexGrid1.TextMatrix(1, i) = i&nbsp;Next&nbsp;End SubPrivate Sub Command1_Click()&nbsp;Me.MSHFlexGrid1.Cols = Me.MSHFlexGrid1.Cols + 1&nbsp;Me.MSHFlexGrid1.ColPosition(5) = 3&nbsp;End Sub>> 请教MSFlexGrid中的对齐功能的使用&nbsp;设置MSFlexGrid1.ColAlignment(index)=n>>得到MSFlexGrid控件中当前选中的一行&nbsp;msflexgrid1.rowsel就是当前选中行>> 如何通过代码调节列宽度&nbsp;msflexgrid1.colwidth(i)=4000--------------------------------------------------------------------------------------'OutDataToText'将MsFlexGrid控件中显示的内容输出到文本文件Public Sub OutDataToText(Flex As MSFlexGrid)Dim s As StringDim i As IntegerDim j As IntegerDim k As IntegerDim strTemp As StringOn Error GoTo ErtMe.MousePointer = 11On Error Resume NextDoEventsDim FileNum As IntegerFileNum = FreeFileOpen "d:aa.txt" For Output As #FileNumWith Flexk = .RowsFor i = 0 To k - 1strTemp = ""For j = 0 To .Cols - 1DoEventsstrTemp = strTemp & .TextMatrix(i, j) & ","Next jPrint #FileNum, Left(strTemp, Len(strTemp) - 1)Next iEnd WithClose #FileNumMe.MousePointer = 0MsgBox "导出成功"Ert:MsgBox Err.DescriptionMe.MousePointer = 0End 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 IntegerDim gCol As Integer5 增加代码到 Grid_KeyPress 过程:Private Sub Grid1_KeyPress(KeyAscii As Integer)' Move the text box to the current grid cell:Text1.Top = Grid1.CellTop + Grid1.TopText1.Left = Grid1.CellLeft + Grid1.Left' Save the position of the grids Row and Col for later:gRow = Grid1.RowgCol = Grid1.Col' Make text box same size as current grid cell:Text1.Width = Grid1.CellWidth - 2 * Screen.TwipsPerPixelXText1.Height = Grid1.CellHeight - 2 * Screen.TwipsPerPixelY' Transfer the grid cell text:Text1.Text = Grid1.Text' Show the text box:Text1.Visible = TrueText1.ZOrder 0 ' 把 Text1 放到最前面!Text1.SetFocus' Redirect this KeyPress event to the text box:If KeyAscii <> ASC_ENTER ThenSendKeys Chr$(KeyAscii)End IfEnd Sub6 增加代码到 Text1_KeyPress 过程:Private Sub Text1_KeyPress(KeyAscii As Integer)If KeyAscii = ASC_ENTER ThenGrid1.SetFocus ' Set focus back to grid, see Text_LostFocus.KeyAscii = 0 ' Ignore this KeyPress.End IfEnd Sub7 增加代码到 Text1_LostFocus 过程:Private Sub Text1_LostFocus()Dim tmpRow As IntegerDim 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.RowtmpCol = Grid1.Col' Set Row and Col back to what they were before Text1_LostFocus:Grid1.Row = gRowGrid1.Col = gColGrid1.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 = tmpRowGrid1.Col = tmpColEnd Sub8 好了。 按 F5 开始测试。 您可以自由地在 Grid 中移动, 按回车可以开始或结束编辑。使用MsFlexGrid控件的几个函数作者:中国论坛网收集 来源:http://www.51one.net&nbsp;加入时间:2004-8-25在VB处理数据显示的时候,使用表格是一种好的方法,虽然DataGrid可以与数据源绑定,但是总有美中不足,就是外观不好看,所以有时应用MsFlexGrid显示数据还是一种比较好的方法,以下几个函数是用来控制MsFlexGrid的程序(本人语言表达能力有限,还请见谅)''MsFlexGrid操作函数''合并列Public Function MergeCol(GridObj As Object, ByVal StartCol As Long, ByVal EndCol As Long, ByValColValue As String, ByVal CurrentRow As Long) As BooleanIf StartCol > EndCol Or StartCol > GridObj.Cols Or CurrentRow > GridObj.Rows ThenMsgBox "对不起,行列设置错误!", vbOKOnly, App.TitleMergeCol = FalseExit FunctionEnd IfFor I = StartCol To EndColGridObj.MergeCol(I) = TrueGridObj.TextArray(faIndex(GridObj, CurrentRow, I)) = ColValueGridObj.ColAlignment(I) = flexAlignCenterCenterNext IGridObj.MergeRow(CurrentRow) = TrueMergeCol = TrueEnd Function''合并行Public Function MergeRow(GridObj As Object, ByVal StartRow As Long, ByVal EndRow As Long, ByValRowValue As String, ByVal CurrentCol As Long) As BooleanIf StartRow > EndRow Or StartRow > GridObj.Rows Or CurrentCol > GridObj.Cols ThenMsgBox "对不起,行列设置错误!", vbOKOnly, App.TitleMergeRow = FalseExit FunctionEnd IfFor I = StartRow To EndRowGridObj.MergeRow(I) = TrueGridObj.TextArray(faIndex(GridObj, I, CurrentCol)) = RowValueGridObj.ColAlignment(CurrentCol) = flexAlignCenterCenterNext IGridObj.MergeCol(CurrentCol) = TrueMergeRow = TrueEnd Function''转换索引Public Function faIndex(GridObj As Object, ByVal row As Integer, ByVal col As Integer) As LongIf row > GridObj.Rows Or row < 0 Or col > GridObj.Cols Or col < 0 ThenMsgBox "对不起,行列设置错误!", vbOKOnly, App.TitlefaIndex = -1Exit FunctionEnd IffaIndex = row * GridObj.Cols + colEnd Function''插入行Public Function SetItem(GridObj As Object, ByVal row As Integer, ByVal col As Integer, ByValSetValue As String) As BooleanIf row > GridObj.Rows Or row < 0 Or col > GridObj.Cols Or col < 0 ThenMsgBox "对不起,行列设置错误!", vbOKOnly, App.TitleSetItem = FalseExit FunctionEnd IfGridObj.TextArray(faIndex(GridObj, row, col)) = SetValueSetItem = TrueEnd Function''得到单元格值Public Function GetItem(GridObj As Object, ByVal row As Integer, ByVal col As Integer) As StringIf row > GridObj.Rows Or row < 0 Or col > GridObj.Cols Or col < 0 ThenMsgBox "对不起,行列设置错误!", vbOKOnly, App.TitleGetItem = ""Exit FunctionEnd IfGetItem = GridObj.TextArray(faIndex(GridObj, row, col))End Function在msflexgrid控件中每一个cell格的内容是不可以由用户直接编辑的但是我们可以通过一些小技巧来方便的实现这编辑功能来扩展msflexgrid的应用(在实际应用中这是很常用的功能)。你只需按下面的做即可轻松实现编辑msflexgrid控件数据的功能例在窗体上放一文本框txtvalue,和一msflexgrid控件grid‘文本框控件的keypress事件private sub txtvalue_keypress(keyascii as integer)‘放入一些处理过程,如只需输入数字时的处理dim ii=1end subprivate sub txtvalue_change()grid.text = txtvalue.textend sub'在grid的entercell事件中加入下例代码private sub grid_entercell()txtvalue.text = grid.texttxtvalue.selstart = 0txtvalue.sellength = len(txtvalue.text)end sub'当用户输入数据时直接调用文本框的keypress事件private sub grid_keypress(keyascii as integer)txtvalue_keypress keyasciiend subok,这样一个可编辑的msflexgrid控件就完成了,简单吧!!Private Sub fgrid1_click() '单击MSFlexGrid&nbsp;sphy = Trim(FGrid1.TextMatrix(FGrid1.Row, 0))&nbsp;delrecord&nbsp;End Sub&nbsp;Private Sub fgrid1_RowColChange()'用上下键在MSFlexGrid上选择&nbsp;sphy = Trim(FGrid1.TextMatrix(FGrid1.Row, 0))&nbsp;delrecord&nbsp;End Sub&nbsp;Private Sub DeleteRecord()'删除&nbsp;Dim I As Integer '&nbsp;Dim Ssql As String&nbsp;Dim response As String&nbsp;response = MsgBox("真的删除当前记录?", vbInformation + vbYesNo, "警告")&nbsp;If response = vbYes Then&nbsp;Ssql = "delete from login where loginname='" & sphy & "'"&nbsp;gcnLeaguers.Execute (Ssql)&nbsp;MsgBox "删除成功!", vbInformation + vbOKOnly, "系统提示"&nbsp;End If&nbsp;Exit Sub&nbsp;End Sub&nbsp;删除后可能还要刷新一下,你试试吧MSHFlexGrid1.SelectionMode = flexSelectionByRow&nbsp;还是&nbsp;Private Sub Form_Load()&nbsp;With MSHFlexGrid1&nbsp;.FixedCols = 0&nbsp;.Cols = 2&nbsp;.Rows = 0&nbsp;.AddItem "1" & vbTab & "11"&nbsp;.AddItem "2" & vbTab & "22"&nbsp;.AddItem "3" & vbTab & "33"&nbsp;End With&nbsp;End Sub&nbsp;Private Sub MSHFlexGrid1_RowColChange()&nbsp;Static intPrevRow As Long&nbsp;If MSHFlexGrid1.Row <> intPrevRow Then&nbsp;intPrevRow = MSHFlexGrid1.Row&nbsp;Dim i As Long&nbsp;For i = 0 To MSHFlexGrid1.Cols - 1&nbsp;MsgBox MSHFlexGrid1.TextMatrix(intPrevRow, i)&nbsp;Next&nbsp;End If&nbsp;End Sub&nbsp;&nbsp;原理当用户点击msflexgrid中的某个cell格要输入数据时,产生entercell事件,在这里我们对文本框进行初始化,输入当前cell格中的内容,并且选中所有文本。当用户要按下按键进行输入时,就直接调用txtvalue的事件,由文本框来处理.处理的结果同grid的当前cell同步,使用户编辑cell格就象使用文本框一样方便。网格单元格中文字的多行显示很简单,只要把WordWarp属性改为True就可以了。1.VB6自带MSHFlexGrid只支持2048条记录显示,这个问题通过装VB6 的SP6解决.2.TopRow属性的使用,这个属性可以使用代码移动MSHFlexGrid的行显示,如要做一个从上至下的滚动显示,使用这个属性解决起来非常方便3.使用选码高亮即选中显示某一行,如要选中第三行,可以使用代码:MSHFlexGrid1.Row = 3MSHFlexGrid1.TopRow =3myMSHFlexGrid.ColSel = MSHFlexGrid1.Cols - 1MSHFlexGrid中单击某一行变色,如何实现?Option ExplicitPublic j As LongPrivate Sub RowColor(i As Long, j As Long)'i代表现在点的这一行Dim n As Long 'n代表列With Me.MSHFlexGrid1For n = 1 To .Cols - 1.Row = i.Col = n.CellBackColor = &HC0FFFFIf j > 0 And i <> j Then.Row = j.CellBackColor = &HFFFFFFEnd IfNext nj = iEnd WithEnd SubPrivate Sub Form_Load()With Me.MSHFlexGrid1.Cols = 5.Rows = 6End WithEnd SubPrivate Sub MSHFlexGrid1_Click()Call RowColor(Me.MSHFlexGrid1.Row, j)Debug.Print jEnd Sub&nbsp;

繁花不似锦

i的循环条件是从1到3,换句话说循环的退出条件就是i大于3,所以当循环结束时,i的值就是3+step,由于step默认为1,所以i就等于4咯补充说明一下:nexti的作用相当于i=i+step,当最后一次循环运行时,i=3,那么当运行到next时,i就被自动+step,由于step是1,所以i就变为4了。这个可能会让你更容易理解。
随时随地看视频慕课网APP

相关分类

数据结构
我要回答