分享
分销 收藏 举报 申诉 / 26
播放页_导航下方通栏广告

类型VB数据库编程中MSHFlexGrid控件用法详解.doc

  • 上传人:二***
  • 文档编号:4516184
  • 上传时间:2024-09-26
  • 格式:DOC
  • 页数:26
  • 大小:112KB
  • 下载积分:5 金币
  • 播放页_非在线预览资源立即下载上方广告
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    VB 数据库 编程 MSHFlexGrid 控件 用法 详解
    资源描述:
    VB数据库编程中MSHFlexGrid控件用法详解 添加MSHFlexGrid将Name改成flex1 添加text 将name 改成txtedit Public rs1 As New ADODB.Recordset, rs2 As New ADODB.Recordset '定义数据集对象 Dim i As Integer, j As Integer Sub EditKeyCode(MSHFlexGrid As Control, Edt As Control, KeyCode As Integer, Shift As Integer) '标准编辑控件处理。 Select Case KeyCode Case 27 'ESC:隐藏焦点并将其返回 MSFlexGrid Edt.Visible = False MSHFlexGrid.SetFocus Case 13 'ENTER 将焦点返回 MSFlexGrid。 MSHFlexGrid.SetFocus DoEvents If MSHFlexGrid.Col < MSHFlexGrid.Cols - 1 Then MSHFlexGrid.Col = MSHFlexGrid.Col + 1 Else If MSHFlexGrid.Col = MSHFlexGrid.Cols - 1 Then MSHFlexGrid.Row = MSHFlexGrid.Row + 1 MSHFlexGrid.Col = 1 End If End If Case 38 '向上 MSHFlexGrid.SetFocus DoEvents If MSFlexGrid.Row > MSFlexGrid.FixedRows Then MSFlexGrid.Row = MSFlexGrid.Row - 1 End If End Select End Sub Sub view_DP() If flex1.Col = 4 Or flex1.Col = 5 Or flex1.Col = 6 Then '格式化Flex1表的第7列、第8列、第9列、第11列 flex1.TextMatrix(flex1.Row, 5) = Format(flex1.TextMatrix(flex1.Row, 5), "0.00") flex1.TextMatrix(flex1.Row, 6) = Val(flex1.TextMatrix(flex1.Row, 4)) * Val(flex1.TextMatrix(flex1.Row, 5)) flex1.TextMatrix(flex1.Row, 6) = Format(flex1.TextMatrix(flex1.Row, 6), "0.00") End If Dim A, B As Single '声明单精度浮点型变量 On Error Resume Next For i = 1 To flex1.Rows - 1 If flex1.TextMatrix(i, 1) <> "" And flex1.TextMatrix(i, 4) <> "" And flex1.TextMatrix(i, 6) <> "" Then A = Val(flex1.TextMatrix(i, 6)) + A '求合计金额 B = Val(flex1.TextMatrix(i, 4)) + B '求合计数量 End If Next i lblCount = B lblSum = Format(A, "0.00") '格式化合计金额 End Sub Sub SetButtons(bVal As Boolean) cmdRegister.Enabled = Not bVal cmdSave.Enabled = bVal cmdCancel.Enabled = bVal flex1.Enabled = bVal Frame1.Enabled = bVal End Sub Private Sub DataGrid2_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyReturn Then With Adodc2.Recordset '赋值给flex1表格 If .Fields("商品名称") <> "" Then flex1.TextMatrix(flex1.Row, 1) = Trim(.Fields("商品名称")) If .Fields("规格") <> "" Then flex1.TextMatrix(flex1.Row, 2) = Trim(.Fields("规格")) If .Fields("单位") <> "" Then flex1.TextMatrix(flex1.Row, 3) = Trim(.Fields("单位")) flex1.TextMatrix(flex1.Row, 5) = .Fields("成本价") End With flex1.Col = 4 DataGrid2.Visible = False 'DataGrid2不可见 txtEdit.Text = "" txtEdit.SetFocus End If If KeyCode = vbKeyEscape Then '按ESC键DataGrid2不可见 DataGrid2.Visible = False ' txtEdit.SetFocus 'txtEdit获得焦点 End If End Sub Private Sub delone_Click() For i = 1 To flex1.Cols - 1 flex1.TextMatrix(flex1.Row, i) = "" Next i view_DP End Sub Private Sub flex1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) '利用PopupMenu方法 If Button And vbRightButton Then PopupMenu edit '弹出菜单 End If End Sub Private Sub Form_Load() Dim i As Integer '使第一列较窄。 flex1.ColWidth(0) = flex1.ColWidth(0) / 2 '初始化编辑框 txtEdit = "" flex1.Rows = 101 flex1.Cols = 8 '设置列标头。 s$ = "^|^商品名称 |^规格 |^单位 |^数量 |^进货价 |^金额 |^备注 " flex1.FormatString = s$ End Sub Private Sub flex1_KeyPress(KeyAscii As Integer) If flex1.Col >= 4 Or flex1.Col = 1 Then MSHFlexGridEdit flex1, txtEdit, KeyAscii End If End Sub '添加下列例程以初始化文本框,并将焦点从 Hierarchical FlexGrid 传递到 TextBox 控件: Sub MSHFlexGridEdit(MSHFlexGrid As Control, Edt As Control, KeyAscii As Integer) '使用已输入的字符。 Select Case KeyAscii '空格表示编辑当前的文本。 Case 0 To 32 Edt = MSHFlexGrid Edt.SelStart = 1000 '其它所有字符表示取代当前的文本。 Case Else Edt = Chr(KeyAscii) Edt.SelStart = 1 End Select '在合适的位置显示 Edt。 Edt.Move MSHFlexGrid.Left + MSHFlexGrid.CellLeft - 15, _ MSHFlexGrid.Top + MSHFlexGrid.CellTop - 15, _ MSHFlexGrid.CellWidth, _ MSHFlexGrid.CellHeight Edt.Visible = True Edt.SetFocus End Sub Private Sub flex1_DblClick() If flex1.Col >= 4 Or flex1.Col = 1 Then MSHFlexGridEdit flex1, txtEdit, 32 '模拟一个空格。 End If End Sub Private Sub lblSum_Click() End Sub Private Sub txt1_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyReturn And Index = 0 Then Adodc1.RecordSource = "供应商信息表 where 供应商编号 like +'%'+'" + txt1(0) + "'+'%'or 供应商全称 like +'%'+'" + txt1(0) + "'+'%'or 简称 like +'%'+'" + txt1(0) + "'+'%'" Adodc1.Refresh If Adodc1.Recordset.RecordCount > 0 Then DataGrid1.Visible = True DataGrid1.SetFocus Else Adodc1.RecordSource = "供应商信息表" Adodc1.Refresh If Adodc1.Recordset.RecordCount > 0 Then DataGrid1.Visible = True DataGrid1.SetFocus Else MsgBox "无可选的供应商信息,请首先录入供应商数据!", , "提示窗口" End If End If End If If KeyCode = vbKeyReturn And Index = 1 Then flex1.Col = 1 flex1.Row = 1 flex1.SetFocus End If End Sub Private Sub DataGrid1_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyReturn Then txt1(0) = Adodc1.Recordset.Fields("供应商全称") txt1(1).SetFocus DataGrid1.Visible = False End If End Sub Private Sub txtEdit_KeyPress(KeyAscii As Integer) '删除回车符,以消除嘟嘟声。 If KeyAscii = Asc(vbCr) Then KeyAscii = 0 End Sub Private Sub txtEdit_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyReturn And flex1.Col = 1 Then Adodc2.RecordSource = "商品信息表 where 商品名称 like +'%'+'" + txtEdit + "'+'%'" Adodc2.Refresh If Adodc2.Recordset.RecordCount > 0 Then DataGrid2.Visible = True DataGrid2.SetFocus Else Adodc2.RecordSource = "商品信息表" Adodc2.Refresh If Adodc2.Recordset.RecordCount > 0 Then DataGrid2.Visible = True DataGrid2.SetFocus Else MsgBox "无可选的商品信息,请首先录入商品数据!", , "提示窗口" End If End If End If '只有TextBox控件在“数量”单元格时,才使用以下过程 If flex1.Col >= 4 Then EditKeyCode flex1, txtEdit, KeyCode, Shift End If End Sub '当输入数据并按下 ENTER 键,或用鼠标单击MSHFlexGrid 控件中的另一个单元时, '焦点将返回此控件。这时 TextBox 中的文本被复制到活动单元中 Private Sub flex1_GotFocus() If txtEdit.Visible = False Then Exit Sub flex1 = txtEdit txtEdit.Visible = False view_DP End Sub Private Sub flex1_LeaveCell() If txtEdit.Visible = False Then Exit Sub flex1 = txtEdit txtEdit.Visible = False End Sub Private Sub cmdCancel_Click() For i = 1 To flex1.Rows - 1 For j = 1 To flex1.Cols - 1 flex1.TextMatrix(i, j) = "" Next j Next i SetButtons False txtEdit.Visible = False view_DP End Sub Private Sub cmdRegister_Click() Dim lsph As Integer '声明一个整型变量 '创建入库票号 rs1.Open "select * from 入库主表 order by 票号", Cnn, adOpenStatic If rs1.RecordCount > 0 Then If Not rs1.EOF Then rs1.MoveLast If rs1.Fields("票号") <> "" Then lsph = Val(Right(Trim(rs1.Fields("票号")), 4)) + 1 txtph.Text = Date & "rk" & Format(lsph, "0000") End If Else txtph.Text = Date & "rk" & "0001" End If rs1.Close txtDate.Text = Date '设置控件有效或无效 SetButtons True For i = 1 To flex1.Rows - 1 For j = 1 To flex1.Cols - 1 flex1.TextMatrix(i, j) = "" Next j Next i txt1(0) = "" txt1(1) = "" txt1(0).SetFocus view_DP End Sub Private Sub cmdSave_Click() Dim js As Integer For i = 1 To flex1.Rows - 1 If flex1.TextMatrix(i, 1) <> "" And flex1.TextMatrix(i, 2) <> "" And flex1.TextMatrix(i, 4) = "" Then MsgBox "第" & i & "行录入错误!", , "提示窗口" Exit Sub End If If flex1.TextMatrix(i, 1) = "" Then js = js + 1 End If Next i If js = flex1.Rows - 1 Then MsgBox "没有要保存的数据!", , "提示窗口" Exit Sub End If rs1.Open "select * from 入库从表", Cnn, adOpenKeyset, adLockOptimistic For i = 1 To flex1.Rows - 1 If flex1.TextMatrix(i, 1) <> "" And flex1.TextMatrix(i, 2) <> "" And flex1.TextMatrix(i, 4) <> "" Then '添加新记录到"入库从表"中 rs1.AddNew If flex1.TextMatrix(i, 1) <> "" Then rs1.Fields("商品名称") = flex1.TextMatrix(i, 1) If flex1.TextMatrix(i, 2) <> "" Then rs1.Fields("规格") = flex1.TextMatrix(i, 2) If flex1.TextMatrix(i, 3) <> "" Then rs1.Fields("单位") = flex1.TextMatrix(i, 3) rs1.Fields("入库数量") = Val(flex1.TextMatrix(i, 4)) rs1.Fields("单价") = Val(flex1.TextMatrix(i, 5)) rs1.Fields("金额") = Val(flex1.TextMatrix(i, 6)) If flex1.TextMatrix(i, 7) <> "" Then rs1.Fields("备注") = flex1.TextMatrix(i, 7) If txtph.Text <> "" Then rs1.Fields("入库票号") = Trim(txtph.Text) rs1.Update Cnn.Execute ("update 商品信息表 set 库存数量=库存数量+" & Val(flex1.TextMatrix(i, 4)) & " where 商品名称 ='" + _ flex1.TextMatrix(i, 1) + "'and 规格='" + flex1.TextMatrix(i, 2) + "'") End If Next i rs1.Close rs2.Open "select * from 入库主表", Cnn, adOpenKeyset, adLockOptimistic '打开数据库 rs2.AddNew If txtph.Text <> "" Then rs2.Fields("票号") = Trim(txtph.Text) If txtDate.Text <> "" Then rs2.Fields("入库日期") = Trim(txtDate.Text) If txt1(0) <> "" Then rs2.Fields("供应商全称") = txt1(0) If txt1(1) <> "" Then rs2.Fields("经手人") = txt1(1) rs2.Fields("入库金额") = lblSum rs2.Update rs2.Close '设置控件有效或无效 SetButtons False End Sub Private Sub cmdQuit_Click() End End Sub VB msflexgrid中设置内容对齐方式 ∣学习 2010-03-26 10:43:29 阅读482 评论0   字号:大中小 订阅 使用   .FixedAlignment   (设置指定列的对齐方式)   .ColAlignment         (设置指定固定列的对齐方式)       常数                           值     描述     flexAlignLeftTop   0       单元格的内容左、顶部对齐。     flexAlignLeftCenter   1   字符串的缺省对齐方式。单元格的内容左、居中对齐。     flexAlignLeftBottom   2   单元格的内容左、底部对齐。     flexAlignCenterTop   3     单元格的内容居中、顶部对齐。     flexAlignCenterCenter   4   单元格的内容居中、居中对齐。     flexAlignCenterBottom   5   单元格的内容居中、底部对齐。     flexAlignRightTop   6   单元格的内容右、顶部对齐。     flexAlignRightCenter   7   数值的缺省对齐方式。单元格的内容右、居中对齐。     flexAlignRightBottom   8   单元格的内容右、底部对齐。     flexAlignGeneral   9   单元格的内容按一般方式进行对齐。字符串按“左、居中”显示,数字按 “右、居中”显示。     FormatString   属性                       设置   MSHFlexGrid的列宽、对齐方式、固定行文本和固定列文本。       语法       object.FormatString   [=   string]       FormatString   属性的语法包含如下部分:       部分   描述     object   一个对象表达式,其值为“应用于”列表中的一个对象。     string   一个字符串表达式,为格式化在行和列中的文本。如在说明中所述。             说明       在设计时,MSHFlexGrid   语法分析和解释   FormatString   来获得如下信息:行和列的数目、行 和列标头的文本、列宽和列对齐方式。       FormatString   属性包含由管道字符   (|)   分隔的段。管道字符之间的文本定义一列并且也可能 包含特定的对齐字符。这些字符使整个列左对齐(<)、居中(^)或右对齐(>)。另外,根据缺省规定文本 被指定给行   0,且文本宽度定义每一列的宽度。       FormatString   属性可能包含一个分号   (;)。这使得字符串的余下部分被解释为行标头和行宽度 信息。另外,根据缺省规定文本被指定给列   0,且最长的字符串定义列   0   的宽度。       MSHFlexGrid   创建附加的行和列来驻留由   FormatString   定义的所有字段。如果只有几个字段 被指定,附加的行和列不被删除。要删除附加的行和列,设置   Rows   和   Cols   属性。           FormatString   属性示例   下面的示例举例说明   FormatString   属性如何工作。       注意   如果正在使用   MSFlexGrid,用“MSFlexGrid1”代替“MSHFlexGrid1”。       '   设置列标头。   s$   =   "<Region   |<Product   |<Employee   |>Sales   "   MSHFlexGrid1.FormatString   =   s$               '   设置行标头(注意开始的分号)。   s$   =   ";Name|Address|Telephone|Social   Security#"   MSHFlexGrid1.FormatString   =   s$               '   设置列和行标头。   s$   =   "|Name|Address|Telephone|Social   Security#"   s$   =   s$   +   ";|Robert|Jimmy|Bonzo|John   Paul"   MSHFlexGrid.FormatString   =   s$       MSHFlexGrid   MSFlexGrid   都适用   Private   Sub   Form_Load()   With   MSFlexGrid1   .Rows   =   10   .Cols   =   5   For   j   =   0   To   4   .ColAlignment(j)   =   1   '--------->as   this   For   i   =   0   To   9   .TextMatrix(i,   j)   =   i   *   j   Next   Next   End   With   End   Sub 首先,msflexgrid1.cellalignment=0   只是设置了当前单元格的显示方式   让每个单元格都居左显示,有两种方法   楼上是一种   另外:             With   MSHFlexGrid1                     .Rows   =   5                     .Cols   =   4                     For   i   =   0   To   .Rows   -   1                             For   j   =   0   To   .Cols   -   1                                     .Row   =   i                                     .Col   =   j                                     '在这了可以对单元格进行各种操作                                     .Text   =   i   &   "|"   &   j                                     .CellAlignment   =   1                             Next   j                     Next   i             End   With   这种方法对于fixed的行和列也有效 附录资料:不需要的可以自行删除 VB HOOK(钩子)超级无敌详细用法(介绍) hook是WINDOWS提供的一种消息处理机制,它使得程序员可以使用子过程来监视系统消息,并在消息到达目标过程前得到处理。 下面将介绍WINNDOWS HOOKS并且说明如何在WINDOWS 程序中使用它。 关于HOOKS 使用HOOK 将会降低系统效率,因为它增加了系统处量消息的工作量。建议在必要时才使用HOOK,并在消息处理完成后立即移去该HOOK。 HOOK链 WINDOWS提供了几种不同类型的HOOKS;不同的HOOK可以处理不同的消息。例如,WH_MOUSE HOOK用来监视鼠标消息。 WINDOWS为这几种HOOKS维护着各自的HOOK链。HOOK链是一个由应用程序定义的回调函数队列,当某种类型的消息发生时,WINDOWS向此种类型的HOOK链的第一个函数发送该消息,在第一函数处理完该消息后由该函数向链表中的下一个函数传递消息,依次向下。如果链中某个函数没有向下传送该消息,那么链表中后面的函数将得不到此消息。(对于某些类型的HOOK,不管HOOK链中的函数是否向下传递消息,与此类型HOOK联系的所有HOOK函数都会收到系统发送的消息) HOOK过程 为了拦截特定的消息,你可以使用SetWindowsHookEx函数在该类型的HOOK链中安装你自己的HOOK函数。该函数语法如下: public function MyHook(nCode,wParam,iParam) as long ‘加入代码 end function 其中MyHook可以随便命名,其它不能变。该函数必须放在模块段。nCode指定HOOK类型。wParam,iParam的取值随nCode不同而不同,它代表了某种类型的HOOK的某个特定的动作。 SetWindowsHookEx总是将你的HOOK函数放置在HOOK链的顶端。你可以使用CallNextHookEx函数将系统消息传递给HOOK链中的下一个函数。 [注释]对于某些类型的HOOK,系统将向该类的所有HOOK函数发送消息,这时,HOOK函数中的CallNextHookEx语句将被忽略。 全局HOOK函数可以拦截系统中所有线程的某个特定的消息(此时该HOOK函数必须放置在DLL中),局部HOOK函数可以拦截指定线程的某特定消息(此时该HOOK函数可以放置在DLL中,也可以放置在应用程序的模块段)。 [注释] 建议只在调试时使用全局HOOK函数。全局HOOK函数将降低系统效率,并且会同其它使用该类HOOK的应用程序产生冲突。 HOOK类型 WH_CALLWNDPROC 和 WH_CALLWNDPROCRET HOOK WH_C ALLWNDPROC 和WH_CALLWNDPROCRET HOOK可以监视SendMessage发送的消息。系统在向窗体过程发送消息前,将调用WH_CALLWNDPROC;在窗体过程处理完该消息后系统将调用WH_CALLWNDPROCRET。 WH_CALLWNDPROCRET HOOK会向HOOK过程传送一个CWPRETSTRUCT结构的地址。该结构包含了窗体过程处理系统消息后的一些信息。 WH_CBT Hook 系统在激活,创建,消毁,最小化,最大化,移动,改变窗体前;在完成一条系统命令前;在从系统消息队列中移去鼠标或键盘事件前;在设置输入焦点前,或同步系统消息队列前,将调用WH_CBT HOOK。你可以在你的HOOK 过程拦截该类HOOK,并返回一个值,告诉
    展开阅读全文
    提示  咨信网温馨提示:
    1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
    2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
    3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
    4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
    5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
    6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

    开通VIP折扣优惠下载文档

    自信AI创作助手
    关于本文
    本文标题:VB数据库编程中MSHFlexGrid控件用法详解.doc
    链接地址:https://www.zixin.com.cn/doc/4516184.html
    页脚通栏广告

    Copyright ©2010-2026   All Rights Reserved  宁波自信网络信息技术有限公司 版权所有   |  客服电话:0574-28810668    微信客服:咨信网客服    投诉电话:18658249818   

    违法和不良信息举报邮箱:help@zixin.com.cn    文档合作和网站合作邮箱:fuwu@zixin.com.cn    意见反馈和侵权处理邮箱:1219186828@qq.com   | 证照中心

    12321jubao.png12321网络举报中心 电话:010-12321  jubao.png中国互联网举报中心 电话:12377   gongan.png浙公网安备33021202000488号  icp.png浙ICP备2021020529号-1 浙B2-20240490   


    关注我们 :微信公众号  抖音  微博  LOFTER               

    自信网络  |  ZixinNetwork