首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

TValueListEdit最坑爹的控件,没之一

2014-01-09 
TValueListEdit最坑爹的控件,没有之一1、VLEdit-OptionsgoEditing无效VLEdit-Options VLEdit-Optio

TValueListEdit最坑爹的控件,没有之一
1、VLEdit->Options<<goEditing;无效
   VLEdit->Options = VLEdit->Options<<goEditing;才有效
   折磨了我很长时间。
2、key值输入等号“=”,程序直接崩溃。
   搞了一下午还不知道该怎么解决这个问题。
3、我想骂娘。TValueListEdit最坑爹的控件,没之一
[解决办法]
新年快樂~

LZ 先沉住氣囉...很多道理只要搞清楚了就豁然開朗了呀~

比如第一項先前就有大概提到...這裡再稍作單的補充 : Delphi 是 Object Pascal 衍生編程語言...VCL 基礎源自 Delphi...然而在 VCL 中集合 Set 類型廣泛使用......

那為什麼不直接以 VLEdit->Options<<goEditing; 非要以 VLEdit->Options = VLEdit->Options<<goEditing; 呢? 淺顯的說 TValueListEdit 控件本身是由 Delphi 所建構...在 C++Builder 直接使用時稱作為引用...C++Builder 工程師發展接近 Object Pascal 之 Set 類型 Template...巧妙的轉化以 C++ 的語法來使用...若要以 VLEdit->Options<<goEditing; 來使用也行...但得經過一層在 C++ 語法上的封裝之多此一舉......
[解决办法]
楼主可以去看看TValueListEdit组件的源码。
[解决办法]

引用:
在哪找源码啊,我百度了下没找到。


百什么度啊。你不知道百毒一下,你就被骗么。

C++Builder中VCL的源码默认是在安装目录中的Source目录下。

TValueListEditor类的源码是在$(BCB)\Source\vcl\ValEdit.pas文件中
[解决办法]
引用:
ValueListEdit源码
Consts文件中:
  
SNoEqualsInKey = 'Key may not contain equals sign ("=")';

ValEdit文件中:
function TValueListStrings.KeyIsValid(const Key: string; RaiseError: Boolean = True): Boolean;
var
  Index: Integer;
begin
  Result := True;
  if Pos('=', Key) <> 0 then
    raise Exception.CreateRes(@SNoEqualsInKey);
  if Assigned(FEditor) and (keyUnique in FEditor.KeyOptions) then
  begin
    if Key <> '' then
    begin
      Index := IndexOfName(Key);
      Result := (Index = -1);
      if not Result and RaiseError then
        raise Exception.CreateResFmt(@SKeyConflict, [Key]);
    end;
  end;
end;

看來你找到問題了~ 所以非程序直接崩潰之 Bug...而是 TValueListEdit 控件限制使用的條件所拋出的例外處裡......
目前新版的 RAD Studio 開發環境自身已改為多階層樹狀之 TInspListBox...但未開放之私用無自帶......

热点排行