帮个忙:如何在记录的输入中,在有可选值的地方按F3弹出一可选框,选择可选值。(100分)

  • 主题发起人 主题发起人 wst
  • 开始时间 开始时间
W

wst

Unregistered / Unconfirmed
GUEST, unregistred user!
输入框为edit,是自动创建的,且数目不定,其个数与一数据表字段对应创建的。如何实现?有其它更好的方法实现吗?
 
你的题目和内容不太一样,所以不知道你要问什么?
是用 edit 吗?
在 onkeydown 中

if Key = VK_F3 then
begin
创建一个 listbox,
还得给 listbox 的事件赋值,
。。。
end;
 
supermmx,是你的意思,我补充一句,因为编辑框是动态生成的,问题是如何在根据光标的当前位置和该编辑框对应的字段,才能确定给listbox赋相应的值,我希望通过listbox获得数据表中对应字段已输入的值,你的这种方法我已实现,这个问题的关键是根据不同的edit动态地给listbox赋不同的值。
 
你可以先建立EDIT数组。
再使用Form的ActiveControl属性得到当前输入焦点在那个EDIT[index]上
 
dry,让我试一试,明天在说,这会儿我有事出去。
 
你的问题:
“我希望通过listbox获得数据表中对应字段已输入的值,”
你的这种方法我已实现,这个问题的关键是根据不同的
edit动态地给listbox赋不同的值。”

我的看法:
" 不要用listbox"

直接用“DBGrid1”不是很好吗?
另用一个起索引作用的“Table”与它相连。
只不过是把“字段”变成了“记录”。

为了“获得数据表中对应字段已输入的值”不要搞复杂了。
“DBGrid1”把网格去掉不是和“listbox”一样吗?
“DBGrid1”可删除,还能排序。
“listbox”呢?也可以,不过......
 
:黄耀彰,你好,根据你的意思,是不是使grid中根据edit不同,显示不同的字段,如果是这样,如何根据edit的当前位置,显示不同的字段值,在处理这一部份上是不是象supermmx一样呢?
 
SuperMMX:用以下代码试试,我给出了两种方法,一种用DBEdit,另一种用EDit,好象用DBEDit比较方便,在我的机上试验成功.

procedure TForm1.MyEditKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
Var FieldName:string;
i:integer;
begin
if Key = VK_F3 then
begin
//如果使用DbEdit可以使用datafield属性得到fieldName
FieldName:=(Sender as TDBEdit).DataField;
Application.MessageBox(PCHar(FieldName),'Uses TDBEdit The Field is',MB_OK);
for i:=0 to MyEditList.Count-1 do
begin
//使用Edit要先判断焦点在那一个Edit上
if Pointer(form1.ActiveControl)=MyEditList.Items Then
begin
FieldName:=Table1.Fields.FieldName;
Application.MessageBox(PCHar(FieldName),'Uses Edit The Field is',MB_OK);
Break;
end;
end;
end;
end;
 
当然用dbgrid 比较方便一些,
现在还有问题吗? 上面的问题解决了没有?

最好做个标志好判断一些, tag
 
接受答案。感谢各位的热心帮助
 
后退
顶部