سؤال

يمكنني استخدام هذا الرمز مع TcheckListbox (LBSERSICES) وهو يعمل بشكل جيد. ولكن مع TCXCheckListBox من DevexPress ، فإنه يثير استثناء.

procedure TMaintenanceForm.AfterConstruction;
var
  i: Integer;
  ActionObj: TAction;
begin
  inherited;
  for i := 0 to ServiceActionList.ActionCount-1 do
  begin
    ActionObj := ServiceActionList.Actions[i] as TAction;
    lbServices.Items.AddObject(ActionObj.Caption, ActionObj);
  end;
end;

procedure TMaintenanceForm.btnStopClick(Sender: TObject);
begin
  fContinue := False;
end;

procedure TMaintenanceForm.cmdExecuteSelectedClick(Sender: TObject);
var
  i: Integer;
begin
  Screen.Cursor := crHourGlass;
  try
    for i := 0 to lbServices.Count -1 do
      if lbServices.Selected[i] then
        (lbServices.Items.Objects[i] as TAction).Execute;  // Exception here!!!!
  finally
    Screen.Cursor := crDefault;
  end;
end;

إذا قمت بتصحيح الرمز lbservices.count = 12. lbservices.items.objects [i] هو لا شيء لجميع العناصر في القائمة. ما هو الخطأ هنا؟

هل كانت مفيدة؟

المحلول

استخدم الكود التالي بدلاً من ذلك:

var
  AItem: TcxCheckListBoxItem;
begin
  AItem := cxCheckListBox1.Items.Add;
  AItem.ItemObject := Action1;
  AItem.Text := Action1.Caption;
end;

...

var
  I: Integer;
begin
  for I := 0 to cxCheckListBox1.Items.Count - 1 do
    if cxCheckListBox1.Items[I].Checked then
      (cxCheckListBox1.Items[I].ItemObject as TACtion).Execute;
end;

نصائح أخرى

لا يوجد أشياء خاصية tcxchecklistbox.items

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top