关于Combobox的焦点问题,移动焦点如何获得Combobox的name!!!急!!! (300分)

阿朗

Unregistered / Unconfirmed
GUEST, unregistred user!
1。当移动焦点从第一Combobox到下一个Combobox时,怎样获得第一个Combobox的Name?
例:
procedure TfrmPymDialog.DBGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=vk_return then
begin
frmInputDialog.cbSex.Text:=DBGrid1.SelectedField.Value;
close;
end;
end;
以上是从DBGrid的里获得值反映在cbSex里,如果移动了焦点到下一个Combobox里,如何
让cbSex换成现在的combobox的name。

2。为什么当移动焦点时,计算机的pc喇叭总是响一下?
例:
procedure TfrmInputDialog.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=vk_return then perform(cm_dialogkey,vk_tab,0); //用回车键变化焦点
end;
为什么总是pc喇叭响?

第一个问题200分,第二个问题1000分
 
1.也不知道行不行
var
I:Integer;
begin
if Key=#13 then
begin
Key:=#0;
perform(cm_dialogkey,vk_tab,0);
for I:=0 to ComponentCount-1 do
if (components is TComboBox) and (I-1>=0) then
begin
(Components[I-1] As TComboBox).Text:=(Components as TComboBox).Name;
end;
end;
end;
 
忘了说
你说的第二个问题:
在传递焦点前应写一个Key:=#0;
回车键本身就比较特别再按下时会对控件造成影响
 
1、不太清楚你说的意思,比如你有几个combobox,焦点在DBGrid还是combobox中跳动?
你要改的是combobox的name属性还是它的值?

2、试试:Perform(WM_NEXTDLGCTL, 0, 0);
 
你应该在每个控件获取焦点时,就将它的名称存到在个全局变量中, 移到哪一个控件后,再取这个名称就可以了
 
最简单的方法
if key=#13 then key:=#9;
在要取得名字的comboBox的lostfouns事件中保存name属性
 
1、从你的代码来看,你想的功能应该是(1)根据DBGrid中的记录改变ComboBox1的Text,
从ComboBox1的名称看,这应该是用来显示性别的(2)当ComboBox2获得焦点,ComboBox1
的值随之改变。
关于(1)你可以在Query或Table的AfterScroll事件中写:
ComboBox1.ItemIndex:=ComboBox1.Items.IndexOf(Query1.FieldByName('Sex').AsString);
至于(2)在ComBobox2的OnEnter和OnChange事件中分别写上
ComboBox1.ItemIndex:=ComboBox1.Items.IndexOf(ComboBox2.text);
以上代码都是建立在你已经确定了ComboBox1的Items。
如果还要添加内容。
以添加数据库内容为例,代码如下:
If
ComboBox1.Items.IndexOf(Query1.FieldByName('Sex').AsString)=-1
Then
ComboBox1.Items.Add((Query1.FieldByName('Sex').AsString));
ComboBox1.ItemIndex:=ComboBox1.Items.IndexOf(Query1.FieldByName('Sex').AsString);
和blue_morning兄弟说的一样,我也不知道你所指的Name是什么,以上代码希望对你有点帮助
 
Components[].name
 
1、答:当前焦点控件的名称为ActiveControl.Name
你可以用ShowMessage(ActiveControl.Name);显示查看当前焦点所在的控件的名称。
 
谢谢大家,问题已解决,对我帮助不小,请大家以后多帮忙!
 
顶部