delphi中的combobox问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi中的combobox问题相关的知识,希望对你有一定的参考价值。

我调用下面的函数是为了清空控件中的text,但是当设置了ComboBox的style属性csDropDownList时,无法清空ComboBox中的text。但ComboBox的style属性设置为csDropDown时就可以清空text中的值,但是这样就可以修改ComboBox的值了,请问如何解决这个问题。谢谢了。
procedure TF_Growing.CLS;
begin
ComboBox1.Text:='';
Edit2.Text:='';
Edit3.Text:='';
Edit4.Text:='';
Edit5.Text:='';
ComboBox2.Text:='';
Edit6.Text:='';
Edit7.Text:='';
Edit8.Text:='';
Edit9.Text:='';
Edit10.Text:='';
Edit11.Text:='';
ComboBox3.Text:='';
ComboBox4.Text:='';
ComboBox6.Text:='';
ComboBox7.Text:='';
ComboBox11.Text:='';
ComboBox5.Text:='';
ComboBox10.Text:='';
ComboBox8.Text:='';
ComboBox9.Text:='';
end;

参考技术A 当ComboBox的style属性csDropDownList时,设置其itemindex为-1,就会清除显示了。
再,你的过程写得比较繁琐,帮你改了一下,以供你参考。

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
for i:=0 to self.ComponentCount-1 do
begin
if self.Components[i] is TEdit then
begin
TEdit(self.Components[i]).Clear;
end;
if self.Components[i] is TComboBox then
begin
if TComboBox(self.Components[i]).Style=csDropDown then
begin
TComboBox(self.Components[i]).Clear;
end
else if TComboBox(self.Components[i]).Style=csDropDownList then
begin
TComboBox(self.Components[i]).Style:=csDropDown;
TComboBox(self.Components[i]).ItemIndex:=-1;
TComboBox(self.Components[i]).Style:=csDropDownList;
end;
end;
end;
end;

程序delphi7环境下测试通过。思路是处理的时候先判断combobox的style属性,然后相应的作出改变,处理完后还原其属性设置。
参考技术B 我也对这个Combobox控件很头疼,很多问题,比如用代码写选中了某一项,或这是你这个,都不行,最后我想了一个办法,方法如下
在Combobox上添加一个Panel,大小要和它一样,的留出按钮的位置,把Panel的Enabled设为False,在Combobox的Change事件里,写上Panel1.Caption:=Combobox1.Text,就可以了,如果想清空,只需清除Panel1就可以了,我就是用这个方法的,你可以试试看~~~本回答被提问者采纳
参考技术C 变通以下,可以考虑style属性设置为csDropDown下不让用户修改Combobox的值,在Combobox的ComboBoxKeyPress事件下写key:=#0;这样你可以清空text值,也可以不让用户修改combobox的值 参考技术D 用csDropDownList意思是必选的,不用清空,把item.index重置默认的即可

输入时如何填充 ComboBox?

【中文标题】输入时如何填充 ComboBox?【英文标题】:How to fill ComboBox while you are typing in it? 【发布时间】:2018-10-13 07:28:32 【问题描述】:

我正在尝试在您输入 TComboBox 时完成搜索,并在我输入时自动添加项目。

我使用 Delphi 7 和 MSSQL。

假设我有一张长表,其中包含一列名为“names”的表中的姓名列表,我输入了“Jonathan”。

我想在我一一输入时将结果输入TComboBox

谢谢。

【问题讨论】:

你看过 TDBLookUpComboBox 吗? 你在哪里输入的?在TComboBox?或者您输入其他组件并希望 ComboBox 项目填充数据? 我在 TCombobox 更改事件上键入代码,因此当用户向数据库键入新查询时,会加载与组合框匹配的名称。我的问题是组合框的行为很奇怪,添加到我不需要的现有项目,或者当我清除项目并添加新项目时它失去焦点,或者当我输入 123 时它转到 321。 @StarDust 看看我的回答 【参考方案1】:

尝试以下方法:

procedure TForm1.ComboBox1Change(Sender: TObject);
var
  I: Integer;
begin
  ComboBox1.Items.Clear;
  ComboBox1.SelStart:= Length(ComboBox1.Text); //To put the cursor in the end
                                                 of the string typed in the ComboBox
  if ComboBox1.Text = '' then
    ADOTable1.Filtered:= False
      else
        begin
          ADOTable1.Filter:= 'Names LIKE ' + QuotedStr(ComboBox1.Text + '*');
          ADOTable1.Filtered:= True;
          for I := 1 to ADOTable1.RecordCount do
            begin
              ADOTable1.RecNo:= I;
              ComboBox1.Items.Add(ADOTable1.FieldByName('Names').Value);
            end;
        end;
end;

【讨论】:

您能否添加一个带有 TADO QUERY 组件的示例?我会在家里试试这个,我会告诉你的。 @StarDust 你可以用TADOQuery做同样的事情 谢谢,我修改了一点你的逻辑,它工作正常。但是,当我快速键入时,我会出现某种滞后行为,或者当我从中间删除某些内容时,它会回到最后。在我开始输入并等待半秒后,有什么办法可以让代码有一点延迟? @StarDust 你的意思是Sleep()?

以上是关于delphi中的combobox问题的主要内容,如果未能解决你的问题,请参考以下文章

delphi中的ComboBox组件的使用?

Dojo:dojo onblur 事件

delphi 中combobox控件怎么显示所选择选项

QT软件开发之基础控件--2.4.2 comboBox下拉框

delphi的combobox的事件问题

qt中控件的使用函数