vb6DataGrid

如何检测DBGrid的焦点移动和移动焦点

你可以在RowColChange事件中放置代码,发现用户移动到第二列就

提供相应的选择。当然你可以参考QA000168 "如何在DBGrid控件中

使用下拉列表框"
    你可以使用SelEndCol、SelStartCol、SelEndRow和

SelStartRow属性来改变当前选择的单元。


 DBGrid和事务的联合使用 
 两点意见:
    (1) DBGRID 直接进行数据录入时,由于其本身的限制(缺乏必要

的检测 如单元格检测),因此需要自行做很多控制.建议考虑其他方

法。
    (2) 事务的处理. 在数据量较大时,将保存的过程尽可能简化,

然后套上事务,会大大加快保存的效率.下面以 VB6 为例 使用

ADO,SQL7
    比如说生成一个表的过程,可从服务器返回一个空的结果集
     Example: " Select * from table1 where 1=0"
    然后是
     On Error Goto Errhandle
     ...
     BeginTrans
     AddNew
     字段赋值过程
     ...
     Update
     CommitTrans
     ...
     Exit sub
     Errhandle:
     RollBack
    与 Data 控件绑定时,事务最好是紧跟着保存操作,而不要在某

个函数里调保存的函数,这样执行 "Data1.refresh"时就不会有问题

了。
    以上意见仅供参考。


用DATAGRID控件,如何用回车键在单元格之间移动光标

 Private Sub DataGrid1_KeyUp(KeyCode As Integer, Shift As

Integer)
     If KeyCode = 13 Then
     SendKeys "{down}"
     End If
    End Sub


如何修改DBGrid的列标题

 可以使用Select语句指定标题,如:
    Select f1 As [姓名] From db
    但是这种方法有毛病,因为VB认为使用了As后,数据库就变成

只读的了。
    比较好的办法是利用DBGrid的Column的Caption,如:
    DBGrid1.Columns(1).Caption = "姓名"


如何才能向非绑定DBGrid控制追加数据

 如果要想让最终用户追加数据,可以将AllowAddNew属性设为True

,这样在表的最后一行会出现一个空白行,用户可以在此追加数据


    如果要想在程序中修改行数,可以使用Refresh方法,这样

DBGrid控制放弃当前数据,重新调用UnboundReadData事件读取数据

,借机可以追加数据。
    你可以在http://www.componentone.com/dbgrid/下载DBGrid

Survival Kit,包括10个例子,其中的Tutorial 7就是演示如何使

用非绑定模式。


 如何禁止拆分DataGrid 

方法1:(不推荐)
    DataGrid1.RecordSelectors = False
    方法2:
    设置或编程DataGrid本身的成员(方法属性),好象确实不能禁止

拆分!
    换个新思路:
    加个控件将DataGrid的左下角的拆分标签挡上!
    实践证明Label、Image不行(老在最底层),
    但Command、Picture可以!
    要仔细码放Command效果最好(极佳)!
    最好再加一句:
    Command1.TabStop=False
     补充编写如下过程:
     Public Sub DisableDataGridSplit(DataGridX As DataGrid,

CommandX As CommandButton)
     DataGrid1.ScrollBars = dbgBoth '最好加上这一句,一劳永

逸,
     '否则还得编程 DataGrid1_ColResize 等事件,
     '控制 Command 的 Visible 属性
     CommandX.Height = 270
     CommandX.Move DataGridX.Left + 10, DataGridX.Top +

DataGridX.Height - CommandX.Height, 30
     CommandX.TabStop = True
     End Sub
    
    huaidai的意见:
    这个问题比较模糊,但是对于DataGrid的Split操作有两个:
     拆分: DataGrid1.Splits.Add(0)
     去掉: DataGrid1.Splits.Remove(0)
    详情请看帮助!


如何才能使DBGrid的前若干列固定不动

 DBGrid也有锁定列的功能,只是用法比较奇怪。DBGrid可以使用

Split对象将一个表分割成两个完全相同的部分。我们可以将左边的

一个只显示几个固定列,而右边的那个显示其余列。下面是一个小

例子。
    Private Sub Form_Load()
    ' Hide all columns in Splits(1) except for columns 0

and 1
    Data1.Refresh
    
    DBGrid1.Splits.Add 0
    Dim Cols As Columns
    
    Set Cols = DBGrid1.Splits(0).Columns
    
    For Each C In Cols
     C.Visible = False
    Next C
    
    Cols(0).Visible = True
    Cols(1).Visible = True
    
    ' Configure Splits(1) to display exactly two columns,

and
    ' disable resizing
    
    With DBGrid1.Splits(0)
     .SizeMode = dbgNumberOfColumns
     .Size = 2
     .AllowSizing = False
    End With
    ' Set columns 0 and 1 invisible in other splits (Splits

0 and 2)
    Set Cols = DBGrid1.Splits(1).Columns
    Cols(0).Visible = False
    Cols(1).Visible = False
    End Sub


DbGrid:怎么知道用户选择了哪几行

 你可以使用SelBookmarks集合获得所有被选中的行,如:
    Do While DBGrid1.SelBookmarks.Count <> 0
     Data1.Recordset.Bookmark = DBGrid1.SelBookmarks(0)
     Print Data1.Recordset(0)
    Loop

如何做到部分单元合并,部分不合并

  使用环境:
    VB6.0
    Windows me
    我现在需要将.TextMatrix(6, 3)和 .TextMatrix(6, 4)不合并

,只合并 .TextMatrix(6, 1)和 .TextMatrix(6, 2)。按以下代码

,是(6, 1)与(6, 2)合并,(6, 3)与(6, 4)也合并,代码如下:
    Public Sub hjdx(ByVal msfGrid As MSFlexGrid)
    With msfGrid
    .MergeCells = flexMergeRestrictRows
    .MergeRow(6) = True
    '下两格相同值,但不合并。
    .TextMatrix(6, 3) = jf
    .TextMatrix(6, 4) = jf
    '下两格相同值,合并。
    .TextMatrix(6, 1) = "大写金额:" & ChMoney(.TextMatrix

(6, 3))
    .TextMatrix(6, 2) = "大写金额:" & ChMoney(.TextMatrix

(6, 3))
    End With
    End Sub

回答:

    你可以这样:
    .TextMatrix(6, 3) = jf
    .TextMatrix(6, 4) = jf + " "
    因为在合并时,MSFlexGrid严格比较字符串是否相同,多了一

个空格就不相同了,而看上去仍然是相同的。


boolean型如何DBGRID表中显示为复选框

 可以设置DBGrid1.Columns(1).NumberFormat

为"Yes/No"、"True/False"或"On/off",这样比显示为0和-1好些。

如果要显示为复选框,可以参考QA000168 "如何在DBGrid控件中使

用下拉列表框"的方法,不过比较麻烦。也可以购买商业控件,如:

True DBGrid(http://www.componentone.com/)或FarPoint的

Spread(http://www.fpoint.com/)。


如何在VB6下通过ADO使用DBGrid

 由于ADO和DAO有很大差别,所以行列显示的数据控件对于两种数据

库不兼容,也就是说DBGrid只能和Data控件和RDO控件一起使用,

DataGrid控件只能和ADO一起使用。你可以将DataGrid控件的

DataSource属性指定为一个ADO的Recordset。


DataGrid中选中几行,按Delete键从数据库中删除

可额外添加一个字符串数组,或是其他可连续加入的控件。以List

控件为例,如果是DataGrid 的DataSource是Adodc控件的话,则只

需在Adodc 控件的MoveComplete 中加入
    list1.additem adodc1.fields("item")
    如果使用的是ADO 代码,则所定义的 Recordset 变量前需加入

。例:
    Dim WithEvents RST As Recordset


RichtextBox在win98下运行时,显示的全是乱码

其实老版本的FoxMail 2.x和友情强档 4.0都存在这样的问题。原因是Win9x 系统的 RICHED32.DLL 文件可能被替换为非中文版的文件。推荐解决的方法是使用 Windows 2000 中文版的 RICHED32.DLL 及 RICHED20.DLL 复制到您 windows/system 目录。


如何在Richtextbox 中输入及控制上下标的输入

这个问题是我提的, 可以用字符升高降低来实现上下标功能。下面的程序是在RichTextBox 控件中实现上标和下标的形式,主要是使作为上、下标的字符的尺寸小一些,位置在基线上下浮动。程序利用属性SelCharOffset,由它确定RichTextBox 控件中的文本是出现在基线上(正常状态),当SelCharOffset >0 时,文本出现在基线之上,成为上标形式; 当SelCharOffset<0 时,文本出现在基线之下,成为下标形式。 该属性在设计时无效。
    在表单的Load事件中添加以下代码:
    Private Sub Form_Load()
    RichTextBox1.Font.Name = "Times New Roman"
    RichTextBox1.Font.Size = 10
    RichTextBox1.Text = "H2SO4"
    " Move the numbers down 2 points.
    OffsetRichText RichTextBox1, 1, 1, 2
    OffsetRichText RichTextBox1, 4, 1, -2
    End Sub
    
    Private Sub OffsetRichText(box As RichTextBox, start As Integer, length As Integer,
    offset As Integer)
    
    "box指RichTextBox控件;start指作为上下标的
    "字符的起始位置;length指上下标字符的长度;
    "offset指上标还是下标,大于0上标;小于0下标。
    
    box.SelStart = start
    box.SelLength = length
    box.SelFontSize = box.Font.Size -abs(offset)
    box.SelCharOffset = ScaleY(offset,vbPoints, vbTwips)
    box.SelStart = 0
    box.SelLength = 0
    End Sub
    

    上述程序在WINDOWS98/ME中通过。



Richtextbox控件中插入jpg格式的图片和数学公式
第二个问题比较简单,可以用下述语句:
    1、richtextbox1.OLEObjects.Add , , ,
    "Equation.3"(Equation3.0,版本号可以自己改一下)插入一个空的公式及显示公式编辑器;
    2、或将WORD或其它文件中的公式用,“复制”,然后在richtextbox的一定位置中用CTRL+V键
    粘贴.
     关于第一个问题:
     richtextbox的OLE插入方式有三种:
    1、拖放:该对象在richtextbox中将显示为一个文件名加图标的形式,BMP图象也不例外,只不过它的图标是一个其本身的缩略图;
    2、richtextbox1.OLEOBJECTS.ADD方式:
    richtextbox1.OLEOBJECTS.ADD ,,"文件名"
    或richtextbox1.OLEOBJECTS.ADD ,,,"对象类型"
    如果该文件创立者或类允许现场在OLE母体显示、编辑(如excel、word和公式),则直接在richtextbox中显示内容;否则显示图标。各类图象均不许现场编辑。
    3、剪贴板方式:可以直接在richtextbox中显示内容。方法是将某一文件用其他程序打开后,“复制”,然后在richtextbox的一定位置中用CTRL+V键粘贴。打开图象可以用画笔、ACDSEE、PHOTOSHOP等)。
    所以在richtextbox中显示JPG图象只能用第三种方式。
    
    anshaodong的意见:
    不必用其他程序打开JPG文件,直接在本程序中用通用对话框获得文件名,将其图像发送到剪贴板,再用SendKeys语句粘贴即可。
    CommonDialog1.ShowOpen
    Clipboard.SetData LoadPicture(CommonDialog1.FileName)
    RichTextBox1.SetFocus
    SendKeys "^v", True '模拟键盘输入(Ctrl+v),将按键消息发送到活动窗口
    




如何把粘贴板的图片粘贴到Rich textbox中

 问题:我想把粘贴板的图片粘贴到Rich textbox中,但其中没有Paste属性,RichTextBox1.Text =Clipboard.GetText可得到粘贴板的文字,用RichTextBox1.Text=Clipboard.GetText.GetData()却得不到图片,得到一串数字,请问为什么?怎么样才能解决?谢谢!
    水平: 中级

回答:

    可以这么做:
    '***************************
    Private Sub cmdPaste_Click()
     RichTextBox1.SetFocus
     SendKeys "^v"
    End Sub
    '***************************


如何在RichTextBox中实现“撤消(Undo)”功能

下面的办法不但适用于RichTextBox,也适合于TextBox。
    先加入以下定义:
    Const EM_CANUNDO = &HC6
    Private Declare Function SendMessage Lib "User32" Alias _
    "SendMessageA" _
     (ByVal hWnd As Long, _
     ByVal wMsg As Long, _
     ByVal wParam As Long, _
     ByVal lParam As Long) As Long
     Const EM_UNDO = &HC7
    然后使用
    SendMessage RichTextBox1.hWnd, EM_UNDO, 0&, 0&
    就可以实现Undo功能。
    你也可以使用
     lRet = SendMessage(RichTextBox1.hWnd, EM_CANUNDO, 0&, 0&)
    来决定是否可以进行Undo操作。如果返回1表示可以。


如何把RichText的内容存到Access数据库中

使用TextRTF或SelRTF属性就可以得到RTF字符串,这个字符串包括字体等设置。一般保存RTF内容的字段是Memo型,你可以使用GetChunk来读Memo字段,而使用AppendChunk写Memo字段。



Windows 剪贴板

1、请记住,Clipboard 指的是 Windows 剪贴板,剪贴板最常用的操作是所选文本的拷贝与粘贴。

拷贝:
Clipboard.SetText 文本框名称.SelText

粘贴:
文本框名称.SelText = Clipboard.GetText

2、Multiline 属性为 True 时,文本框控件的 PasswrodChar 属性不起作用。

3、如果要让文本框的内容自动换行,只需取消文本框的横向滚动条就行了。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值