vb6DataGrid
来源:互联网 发布:windows server是什么 编辑:程序博客网 时间:2024/06/06 12:33
如何检测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、如果要让文本框的内容自动换行,只需取消文本框的横向滚动条就行了。