【问题标题】:From TcxCheckListBox to TcxCheckGroupBox (Load States from TStringStream)从 TcxCheckListBox 到 TcxCheckGroupBox(从 TStringStream 加载状态)
【发布时间】:2016-06-04 22:06:12
【问题描述】:

任何人都可以帮助我如何将其转换为使用TcxCheckGroup?我的程序可以加载检查Items 状态到cxCheckListBox

TcxCheckListBox 的工作示例...

procedure Tfrm.LoadStatesFromStream(SS: TStringStream);
var
  i : integer;
  S2 : String;
begin

  SS.Position := 0;
  i := 0;
while (i <= cxCheckListBox1.Items.Count - 1) and (SS.Position < SS.Size) do    
begin
  S2 := SS.ReadString(1);
  cxCheckListBox1.Items[i].Checked := S2 = '+';
  Inc(i);
end;
end;

我需要帮助...

procedure Tfrm.LoadStatesFromStream(SS: TStringStream);
var
  i : integer;
  S2 : String;
begin
  SS.Position := 0;
  i := 0;
while (i <= cxCheckGroup1.Properties.Items.Count - 1) and (SS.Position <   SS.Size) do
begin
  S2 := SS.ReadString(1);
  (cxCheckGroup1.States[i] = cbschecked ):= S2 = '+';  //I have a problem here

  Inc(i);
 end;
end;

感谢您的帮助!

【问题讨论】:

  • 您以错误的方式解决此问题。您应该使用像 JSON 这样的结构化格式,而不是重新发明轮子。
  • 我是delphi新手,刚学。谢谢你的建议,我一定会照顾 JSON 格式,但我现在需要这种格式。谢谢!
  • 不,你没有。你只是在为将来积攒很多麻烦。
  • @DavidHeffernan:实际上,我认为 Devex 库的初学者的问题只是在组件的内部找到自己的方法。 F.i,OP 的 TcxCheckBoxGroup 的子成员以不同于 TcxCheckList 的方式公开和访问,从表面上看,这只是容器化 Devex 复选框的另一种方式。无论如何,如果 OP 不是新手,他可以使用本机流式处理程序。

标签: delphi devexpress delphi-xe delphi-xe7


【解决方案1】:

见下面的代码;我假设您希望包含复选框状态可能为 cbsGrayed 的可能性(我在 StringStream 中用空格字符表示。

function CheckBoxStateToString(CheckBoxState : TcxCheckBoxState ) : String;
begin
  Result := '';
  case CheckBoxState of
    cbsChecked : Result := '+';
    cbsUnChecked : Result := '-';
    cbsGrayed : Result := ' ';
  end;
end;

function StringToCheckBoxState(Input : String) : TcxCheckBoxState;
begin
  Result := cbsGrayed;
  if Input = '+' then
    Result := cbsChecked
  else
    if Input = '-' then
      Result := cbsUnChecked
end;

procedure TForm1.SaveCheckGroupStatesToStream(SS : TStringStream);
var
  i : integer;
begin
  SS.Clear;
  SS.Position := 0;
  for i := 0 to cxCheckGroup1.Properties.Items.Count - 1 do begin
      SS.WriteString(CheckBoxStateToString(cxCheckGroup1.States[i]));
  end;
  Memo1.Lines.Add('>' + SS.DataString + '<');
end;

procedure TForm1.LoadCheckGroupStatesFromStream(SS : TStringStream);
var
  i : integer;
  S : String;
begin
  CheckBoxList.ClearCheckmarks;
  SS.Position := 0;
  i := 0;
  while (i <= cxCheckGroup1.Properties.Items.Count - 1) and (SS.Position < SS.Size) do begin
    S := SS.ReadString(1);
    cxCheckGroup1.States[i] := StringToCheckBoxState(S);
    Inc(i);
  end;
end;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    • 2010-11-12
    • 2016-09-30
    • 2015-07-05
    • 2021-06-17
    • 1970-01-01
    • 2017-07-30
    相关资源
    最近更新 更多