⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 052702_05.htm

📁 对于学习很有帮助
💻 HTM
字号:
<html>

<head>
<link REL="stylesheet" HREF="/style.css" TYPE="text/css">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>计算机世界日报:
再谈DelphiDBGrid中实现下拉列表字段编程的一种方法
</title>
<!--***********-->
</head>

<body bgcolor="#FFFFFF" >














<p><br>
<font color="#b904e8"><b><em><a href="class.htm">返回</a></em></b></font>
<center>
<font color="#0000c0"><h2>
再谈DelphiDBGrid中实现下拉列表字段编程的一种方法
</h2></font>
<h3>
山东省滨州师专计算机系
<br>李宏光
</h3>
</center>
<p><font color="#ffffff">----</font>

用delphi开发数据库软件,经常使用DBGrid控件实现数据的输入与显示,像大家熟悉的Excel97、VFP中的BROWS就是采用了这种数据网格的形式。很多情况下,在进行数据输入时,有些字段只允许某几个固定的条目,像学生档案管理中学生的所在系别,只有学校固定好的几个系,还有像学生的政治面貌等等,可否从一个下拉列表中进行选择,从而方便输入和避免输入错误呢?,Delphi的数据网格控件DBGrid支持的下拉列表编程可以实现此功能(见http://www.computerworld.com.cn/99/tips/9903/030302_05.htm),但有明显的缺陷,就是使用不方便,为显示某字段的下拉框需按两次回车键,然后用鼠标点击下拉列表的下拉按钮,下拉列表才能出现,输入数据时总是按动鼠标非常别扭。下面介绍的下拉列表的实现方法可以在不修改DBGrid控件或利用钩子函数的基础上实现下拉列表方便的开合,操作时不再需要按动鼠标,最大限度的方便了数据输入人员。
<p><font color="#ffffff">----</font>
基本思路
<p><font color="#ffffff">----</font>
利用一个浮动式菜单PopupMenu,浮动式菜单的各菜单条是用于选择的相应条目。以此来实现下拉列表的功能。为了实现浮动式菜单与相应字段的结合,还需要做以下的工作:
<p><font color="#ffffff">----</font>
(1)在DBGrid控件属性中有PoppupMenu一栏,添入浮动式菜单名,此时,程序运行时,按鼠标右键即可打开PoppupMenu进行选择。
<p><font color="#ffffff">----</font>
(2)为使键盘控制PoppupMenu的开合还需将装载DBGrid的窗体的Keypreview属性设为true,在DBGrid的KeyDown事件中写入一事件,来控制PoppupMenu的开合的位置与显示条件。
<p><font color="#ffffff">----</font>
下面以一个学生信息库中的学生的系别为例(字符串类型)为例,给出一个具体的例子:
<pre>
unitUnit1;
interface
uses
Windows,Messages,SysUtils,Classes,
Graphics,Controls,Forms,Dialogs,
Db,Menus,DBTables,Grids,DBGrids;
type
TForm1=class(TForm)
DBGrid1:TDBGrid;
DataSource1:TDataSource;
Table1:TTable;
PopupMenu1:TPopupMenu;
N1:TMenuItem;
N2:TMenuItem;
N3:TMenuItem;
Table1XH:TStringField;
Table1XM:TStringField;
Table1XB:TStringField;
N4:TMenuItem;
procedureDBGrid1KeyDown
(Sender:TObject;varKey:Word;
Shift:TShiftState);
procedureN1Click(Sender:TObject);
procedureN2Click(Sender:TObject);
procedureN3Click(Sender:TObject);
procedureN4Click(Sender:TObject);
private
{Privatedeclarations}
public
{Publicdeclarations}
end;
var
Form1:TForm1;
implementation
{$R*.DFM}
procedureTForm1.DBGrid1KeyDown
(Sender:TObject;varKey:Word;
Shift:TShiftState);
var
LastEditCol:integer;
begin
LastEditCol:=DbGrid1.SelectedIndex;
ifLastEditCol< >2thenexit;//让浮动式菜单只对第二列起作用
if(Key=VK_RETURN)//VK_***是您的热键的虚键值
then
PopupMenu1.Popup(336,222);//336,222浮动式菜单显示的位置
end;

procedureTForm1.N1Click(Sender:TObject);
begin
table1.Edit;
table1.FieldValues['XB']:='物理系';
table1.post;

end;

procedureTForm1.N2Click(Sender:TObject);
begin
table1.Edit;
table1.FieldValues['XB']:='数学系';
table1.post;
end;

procedureTForm1.N3Click(Sender:TObject);
begin
table1.Edit;
table1.FieldValues['XB']:='计算机系';
table1.post;
end;

procedureTForm1.N4Click(Sender:TObject);
begin
table1.Edit;
table1.FieldValues['XB']:='中文系';
table1.post;
end;
end.
</pre>



 



<p align="right"><small><em>中国计算机世界出版服务公司版权所有</em></small> 
<br>
</p>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -