用C++ Builder 实现类似ie地址栏的ComboBox

原创 2003年04月08日 14:23:00

大家一定对ie浏览器的地址栏很熟悉,几乎没有没用过的人,当你输入一串字符时,下拉列表会列出所有历史记录中存放的地址前几位字符和输入字符相符的条目。

我们在设计程序也需要这种技术以方便用户输入,它是怎么实现的呢?

下面我就说说我用CBuilder实现这种效果的方法:

首先新建一个应用程序,在窗体上ComboBox,名称设为:ComboBox1

在头文件中声明一个stringlist

TStringList *MyDropDownList;

在应用程序初始化部门将所有列表数据存入MyDropDownList;

在ComboBox1的KeyPress中加入以下代码:

nt i, iInputLength, iSelStartRestore, iSelLengthRestore;
AnsiString strInput;
TStringList *TempList;

strInput= ComboBox1->Text;


  if (Key == VK_ESCAPE)
  {
    Key = 0x0; // No more beeping after pressing Escape.
  }

  if (Key == VK_RETURN)
   {
       Key = 0x0;
    if (ComboBox1->Items->IndexOf(strInput) == -1) ComboBox1->Items->Add(strInput);
    ComboBox1->DroppedDown = False;

    ComboBox1->SelStart = ComboBox1->Text.Length();

   }
  else
   {
   iSelStartRestore = ComboBox1->SelStart;
    iSelLengthRestore = ComboBox1->SelLength;
    if (Key == VK_BACK)
    {
      // Handle backspace:
      if ((ComboBox1->SelLength == 0) && (ComboBox1->SelStart > 0))
      {
        ComboBox1->SelStart = ComboBox1->SelStart - 1;
        ComboBox1->SelLength = ComboBox1->SelLength + 1;
      }
    }
      strInput.Delete(ComboBox1->SelStart + 1, ComboBox1->SelLength);

    if (Key != VK_BACK)
           {
           strInput.Insert(Key, ComboBox1->SelStart + 1);
           }
    iInputLength = strInput.Length();
    ComboBox1->Items->Clear();
    if (iInputLength > 0)
    {

      TempList = new TStringList;
      try
         {
             for ( i= 0; i<MyDropDownList->Count - 1;i++)
                 {
                    if ((MyDropDownList->Strings[i].SubString(1, iInputLength)).UpperCase() ==
                           strInput.UpperCase())
                      TempList->Add(MyDropDownList->Strings[i]);

                  }
        if (TempList->Count > 0)
        {
          for (i = 0 ;i<7;i++) ComboBox1->Items->Add("");
           ComboBox1->DropDownCount = 8;
          ComboBox1->DroppedDown = True;
          ComboBox1->Items->Clear();
          ComboBox1->Items = TempList;
         }
        else ComboBox1->DroppedDown = False;
       }

        __finally
       {
        TempList->Free();
       }
      }
      else

            ComboBox1->DroppedDown = False;
    // Restore the position of the carrot and the selected text:
    ComboBox1->SelStart = iSelStartRestore;
    ComboBox1->SelLength= iSelLengthRestore;

}

在C++ Builder win2000下实现,其他应该也可以。

 

 

 

 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

TComboBox组件的重要属性

TComboBox组件的重要属性 CharCase--------此属性用于设置编辑框内文字的大小写 DropDownCount---此属性用于设置当用户下拉组合框时不需要加滚动条就能显示的项...
  • kyfvc
  • kyfvc
  • 2013年04月23日 12:58
  • 5712

IE浏览器在地址栏针对param直接输入中文导致乱码的解决方案

这篇文章算是对我前几年在做搜索引擎项目时候无法解决的一个问题画一个句号吧,用处不大,不过可以弥补下自己的一个遗憾。     当时的场景是这样子的,本来正常人的习惯总是在搜索框输入正常搜索词然后进行搜索...
  • linsongze2011
  • linsongze2011
  • 2016年01月23日 03:46
  • 5294

C#中comboBox下拉框中实现多选

原文地址:http://www.codeproject.com/Articles/21085/CheckBox-ComboBox-Extending-the-ComboBox-Class-and?ms...
  • babyqian84
  • babyqian84
  • 2013年05月27日 13:13
  • 8424

C#comboBox实现类似ie地址栏的功能

  • 2008年10月09日 14:24
  • 30KB
  • 下载

comboBox输入自动提示 自动关联(仿ie地址栏)C#

最近在做项目的时候,需要使用comboBox实现类似ie下拉列表一样的功能!最直接的思路是监听comboBox的textChanged事件,当事件发生时,从数据(我是用arrayList暂存数据的)中...
  • szstephenzhou
  • szstephenzhou
  • 2013年04月09日 16:43
  • 2928

利用C#制作一个仿IE地址栏的文本框

  • 2009年04月21日 07:56
  • 2.67MB
  • 下载

TComboBox模仿IE地址栏

  • 2008年09月15日 11:48
  • 18KB
  • 下载

清空IE地址栏记录的资源

  • 2010年07月01日 13:34
  • 65KB
  • 下载

仿IE地址栏单击全部选中操作.e

  • 2009年07月06日 22:15
  • 5KB
  • 下载

如何修改IE地址栏图标

  • 2009年07月28日 17:27
  • 430B
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用C++ Builder 实现类似ie地址栏的ComboBox
举报原因:
原因补充:

(最多只允许输入30个字)