读书人

TValueListEdit最坑爹的控件没之一

发布时间: 2014-01-09 23:07:34 作者: rapoo

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...但未放之私用自......

读书人网 >C++ Builder

热点推荐