收藏 分销(赏)

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

上传人:二*** 文档编号:4516184 上传时间:2024-09-26 格式:DOC 页数:26 大小:112KB
下载 相关 举报
VB数据库编程中MSHFlexGrid控件用法详解.doc_第1页
第1页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、VB数据库编程中MSHFlexGrid控件用法详解添加MSHFlexGrid将Name改成flex1添加text 将name 改成txteditPublic rs1 As New ADODB.Recordset, rs2 As New ADODB.Recordset 定义数据集对象Dim i As Integer, j As IntegerSub EditKeyCode(MSHFlexGrid As Control, Edt As Control, KeyCode As Integer, Shift As Integer) 标准编辑控件处理。 Select Case KeyCode Case

2、27 ESC:隐藏焦点并将其返回 MSFlexGrid Edt.Visible = False MSHFlexGrid.SetFocus Case 13 ENTER 将焦点返回 MSFlexGrid。 MSHFlexGrid.SetFocus DoEvents If MSHFlexGrid.Col MSFlexGrid.FixedRows Then MSFlexGrid.Row = MSFlexGrid.Row - 1 End If End SelectEnd SubSub view_DP() If flex1.Col = 4 Or flex1.Col = 5 Or flex1.Col = 6

3、 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

4、 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) 格

5、式化合计金额End SubSub SetButtons(bVal As Boolean) cmdRegister.Enabled = Not bVal cmdSave.Enabled = bVal cmdCancel.Enabled = bVal flex1.Enabled = bVal Frame1.Enabled = bValEnd SubPrivate Sub DataGrid2_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyReturn Then With Adodc2.Recordset 赋值给flex

6、1表格 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.Vis

7、ible = False DataGrid2不可见 txtEdit.Text = txtEdit.SetFocus End If If KeyCode = vbKeyEscape Then 按ESC键DataGrid2不可见 DataGrid2.Visible = False txtEdit.SetFocus txtEdit获得焦点 End IfEnd SubPrivate Sub delone_Click() For i = 1 To flex1.Cols - 1 flex1.TextMatrix(flex1.Row, i) = Next i view_DPEnd SubPrivate Su

8、b flex1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) 利用PopupMenu方法 If Button And vbRightButton Then PopupMenu edit 弹出菜单 End IfEnd SubPrivate Sub Form_Load() Dim i As Integer 使第一列较窄。 flex1.ColWidth(0) = flex1.ColWidth(0) / 2初始化编辑框 txtEdit = flex1.Rows = 101 flex1.Cols = 8

9、设置列标头。 s$ = |商品名称 |规格 |单位 |数量 |进货价 |金额 |备注 flex1.FormatString = s$End SubPrivate Sub flex1_KeyPress(KeyAscii As Integer) If flex1.Col = 4 Or flex1.Col = 1 Then MSHFlexGridEdit flex1, txtEdit, KeyAscii End IfEnd Sub添加下列例程以初始化文本框,并将焦点从 Hierarchical FlexGrid 传递到 TextBox 控件:Sub MSHFlexGridEdit(MSHFlexGr

10、id 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, _ MSHFlex

11、Grid.Top + MSHFlexGrid.CellTop - 15, _ MSHFlexGrid.CellWidth, _ MSHFlexGrid.CellHeight Edt.Visible = True Edt.SetFocusEnd SubPrivate Sub flex1_DblClick() If flex1.Col = 4 Or flex1.Col = 1 Then MSHFlexGridEdit flex1, txtEdit, 32 模拟一个空格。 End IfEnd SubPrivate Sub lblSum_Click()End SubPrivate Sub txt1_K

12、eyDown(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.Vis

13、ible = 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 fl

14、ex1.SetFocus End IfEnd SubPrivate 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 IfEnd SubPrivate Sub txtEdit_KeyPress(KeyAscii As Integer) 删除回车符,以消除嘟嘟声。 If KeyAscii = A

15、sc(vbCr) Then KeyAscii = 0End SubPrivate 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.S

16、etFocus 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

17、End Sub当输入数据并按下 ENTER 键,或用鼠标单击MSHFlexGrid 控件中的另一个单元时,焦点将返回此控件。这时 TextBox 中的文本被复制到活动单元中Private Sub flex1_GotFocus() If txtEdit.Visible = False Then Exit Sub flex1 = txtEdit txtEdit.Visible = False view_DPEnd SubPrivate Sub flex1_LeaveCell() If txtEdit.Visible = False Then Exit Sub flex1 = txtEdit txt

18、Edit.Visible = FalseEnd SubPrivate 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_DPEnd SubPrivate Sub cmdRegister_Click() Dim lsph As Integer 声明一个整型变量 创建入库票号 rs1.Open select * from 入库

19、主表 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 设置控件有效或无效 SetBut

20、tons 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_DPEnd SubPrivate 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.TextMat

21、rix(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.TextMat

22、rix(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

23、(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 商品

24、信息表 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.T

25、ext 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 FalseEnd SubPrivate Sub cmdQuit_Click() EndEnd SubVB msflexgrid中设置内容对齐方式学习 2010-03-26 10:43:29 阅读48

26、2 评论0 字号:大中小订阅 使用 .FixedAlignment (设置指定列的对齐方式) .ColAlignment (设置指定固定列的对齐方式) 常数 值 描述 flexAlignLeftTop 0 单元格的内容左、顶部对齐。 flexAlignLeftCenter 1 字符串的缺省对齐方式。单元格的内容左、居中对齐。 flexAlignLeftBottom 2 单元格的内容左、底部对齐。 flexAlignCenterTop 3 单元格的内容居中、顶部对齐。 flexAlignCenterCenter 4 单元格的内容居中、居中对齐。 flexAlignCenterBottom 5 单

27、元格的内容居中、底部对齐。 flexAlignRightTop 6 单元格的内容右、顶部对齐。 flexAlignRightCenter 7 数值的缺省对齐方式。单元格的内容右、居中对齐。 flexAlignRightBottom 8 单元格的内容右、底部对齐。 flexAlignGeneral 9 单元格的内容按一般方式进行对齐。字符串按“左、居中”显示,数字按“右、居中”显示。 FormatString 属性 设置 MSHFlexGrid的列宽、对齐方式、固定行文本和固定列文本。 语法 object.FormatString = string FormatString 属性的语法包含如下部

28、分: 部分 描述 object 一个对象表达式,其值为“应用于”列表中的一个对象。 string 一个字符串表达式,为格式化在行和列中的文本。如在说明中所述。 说明 在设计时,MSHFlexGrid 语法分析和解释 FormatString 来获得如下信息:行和列的数目、行和列标头的文本、列宽和列对齐方式。 FormatString 属性包含由管道字符 (|) 分隔的段。管道字符之间的文本定义一列并且也可能包含特定的对齐字符。这些字符使整个列左对齐()。另外,根据缺省规定文本被指定给行 0,且文本宽度定义每一列的宽度。 FormatString 属性可能包含一个分号 (;)。这使得字符串的余下

29、部分被解释为行标头和行宽度信息。另外,根据缺省规定文本被指定给列 0,且最长的字符串定义列 0 的宽度。 MSHFlexGrid 创建附加的行和列来驻留由 FormatString 定义的所有字段。如果只有几个字段被指定,附加的行和列不被删除。要删除附加的行和列,设置 Rows 和 Cols 属性。 FormatString 属性示例 下面的示例举例说明 FormatString 属性如何工作。 注意 如果正在使用 MSFlexGrid,用“MSFlexGrid1”代替“MSHFlexGrid1”。 设置列标头。 s$ = Region |Product |Sales MSHFlexGrid1

30、.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 MSFlexG

31、rid1 .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 .R

32、ow = i .Col = j 在这了可以对单元格进行各种操作 .Text = i & | & j .CellAlignment = 1 Next j Next i End With 这种方法对于fixed的行和列也有效附录资料:不需要的可以自行删除VB HOOK(钩子)超级无敌详细用法(介绍)hook是WINDOWS提供的一种消息处理机制,它使得程序员可以使用子过程来监视系统消息,并在消息到达目标过程前得到处理。 下面将介绍WINNDOWS HOOKS并且说明如何在WINDOWS 程序中使用它。关于HOOKS 使用HOOK 将会降低系统效率,因为它增加了系统处量消息的工作量。建议在必要时才使

33、用HOOK,并在消息处理完成后立即移去该HOOK。HOOK链 WINDOWS提供了几种不同类型的HOOKS;不同的HOOK可以处理不同的消息。例如,WH_MOUSE HOOK用来监视鼠标消息。 WINDOWS为这几种HOOKS维护着各自的HOOK链。HOOK链是一个由应用程序定义的回调函数队列,当某种类型的消息发生时,WINDOWS向此种类型的HOOK链的第一个函数发送该消息,在第一函数处理完该消息后由该函数向链表中的下一个函数传递消息,依次向下。如果链中某个函数没有向下传送该消息,那么链表中后面的函数将得不到此消息。(对于某些类型的HOOK,不管HOOK链中的函数是否向下传递消息,与此类型H

34、OOK联系的所有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

35、链的顶端。你可以使用CallNextHookEx函数将系统消息传递给HOOK链中的下一个函数。 注释对于某些类型的HOOK,系统将向该类的所有HOOK函数发送消息,这时,HOOK函数中的CallNextHookEx语句将被忽略。 全局HOOK函数可以拦截系统中所有线程的某个特定的消息(此时该HOOK函数必须放置在DLL中),局部HOOK函数可以拦截指定线程的某特定消息(此时该HOOK函数可以放置在DLL中,也可以放置在应用程序的模块段)。 注释 建议只在调试时使用全局HOOK函数。全局HOOK函数将降低系统效率,并且会同其它使用该类HOOK的应用程序产生冲突。HOOK类型 WH_CALLWND

36、PROC 和 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,并返回一个值,告诉

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 通信科技 > 数据库/数据算法

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服