Pomoc w przerobieniu kodu zamiast CheckListBox.Checked na ComboBox

0

Cześć, potrzebuje pomocy w przerobieniu kodu. zamiast CheckListBox na ComboBox. kod by robił to samo dosłownie ale zamiast działać na zaznaczone elementy w CheckListbox.Checked, działał by na wybrany element z ComboBox(tylko na zwykłym Combox - bez dodawania do niego CheckBoxa wybieramy tylko jeden element z rozwijanej listy)

j : integer


for J := 0 to CheckListBox1.Items.Count - 1 do
     begin
       if CheckListBox1.Checked[J] then
       begin
         if TCategory(CheckListBox1.Items.Objects[J]).CategoryId = lExpr.CategoryId then
         begin
           categoryOk := true;
           Break;
         end;
       end;
     end;


0

OK, a w czym konkretnie masz problem?

0

szczególnie z tą linią: jak ją zamienić na ComboBox,

if CheckListBox1.Checked[J] then

Ogólnie kod ma działać tak samo lecz za miast ChecListBoxa chcę użyć ComboBoxa .
i tak wychodzi mi coś takiego:

for J := 0 to ComboBox1.Items.Count - 1 do
      begin
        if CheckListBox1.Checked[J] then   // i tu nie wiem i
        
       // ta niżej też nie wiem czy jest poprawnie ale błędu nie podkreśla
        begin
          if TCategory(ComboBox1.Items.Objects[J]).CategoryId = lExpr.CategoryId then
          begin
            categoryOk := true;
            Break;
          end;
        end;
      end;

1

A wiesz, czym się różni CheckedListBox od ComboBox? CheckedListBox może mieć wybranych kilka itemów jednocześnie. Stąd masz sprawdzenie, z którym nie wiesz co zrobić. ComboBox może mieć wybrany TYLKO JEDEN element na raz. Dlatego:

if TCategory(ComboBox1.Items[ComboBox1.ItemIndex]).CategoryId = lExpr.CategoryId then
  categoryOk := true;

A jeszcze lepiej:

categoryOk := (TCategory(ComboBox1.Items[ComboBox1.ItemIndex]).CategoryId = lExpr.CategoryId);

I tyle.

0

Przepraszam zamotałam się z tym, ale zrobiłam wedle zaleceń i dalej nic a nie błędów żeby wiedzieć gdzie się przyczepić nic się nie dzieje po kliku

procedure TForm1.Button1Click(Sender: TObject);
var
  I ,k: Integer;
  lExpressions: TExpressionsArray;
  lExpr: TExpression;
  languageOK, categoryOk : Boolean;
begin
  lExpressions := self.idictionary.expressionsArray;
  ListBox1.Items.BeginUpdate;
  try
    ListBox1.Items.Clear;

    for I := 0 to high(lExpressions) do
    begin
      languageOK := false;
      categoryOk := false;
      lExpr := lExpressions[I];


     for k := 0 to lExpr.wordsList.Count - 1 do
            if TLanguage(ComboBox1.Items[ComboBox1.ItemIndex]).code = Tword(lExpr.wordsList.Objects[k]).languagaeCode then
            begin
              languageOK := true;
              Break;
            end;

      if TCategory(ComboBox2.Items[ComboBox2.ItemIndex]).CategoryId = lExpr.CategoryId then
          begin
            categoryOk := true;
            Break;
          end;

      if categoryOk and languageOK  then
        self.ListBox1.Items.Addobject(lExpr.description, lExpr);
    end;

    if self.ListBox1.Items.Count > 0 then
    begin
      self.ListBox1.ItemIndex := 0;
    end;
  finally
    ListBox1.Items.EndUpdate;
  end;
end;
0

Co Ty chcesz zrobić? Bo mam wrażenie, że coś mocno kombinujesz.

0

To samo co tu tylko zamiast CheckListBoxa użyć ComboBoxa

procedure TForm1.AddDescription();
var
  I, J, k: Integer;
  lExpressions: TExpressionsArray;
  lExpr: TExpression;
  languageOK, categoryOk, descriptionOk: Boolean;
begin
  self.LabelExpression.Caption := 'Wyrażenie :';
  if assigned(self.ClientDataSet1) then
    freeandnil(self.ClientDataSet1);
  LoadImage('foo', self.ImageExpression);

  lExpressions := self.idictionary.expressionsArray;

  ListBox1.Items.BeginUpdate;
  try
    ListBox1.Items.Clear;

    for I := 0 to high(lExpressions) do
    begin
      languageOK := false;
      categoryOk := false;
      descriptionOk := false;
      lExpr := lExpressions[I];


      for J := 0 to CheckListBox1.Items.Count - 1 do
      begin
        if CheckListBox1.Checked[J] then
        begin
          if TCategory(CheckListBox1.Items.Objects[J]).CategoryId = lExpr.CategoryId then
          begin
            categoryOk := true;
            Break;
          end;
        end;
      end;


      for J := 0 to CheckListBox2.Items.Count - 1 do
      begin
        if CheckListBox2.Checked[J] then
        begin
          for k := 0 to lExpr.wordsList.Count - 1 do
            if TLanguage(CheckListBox2.Items.Objects[J]).code = Tword(lExpr.wordsList.Objects[k]).languagaeCode then
            begin
              languageOK := true;
              Break;
            end;
        end;
      end;


      if trim(self.Edit1.Text) <> '' then
        descriptionOk := (pos(uppercase(trim(self.Edit1.Text)), uppercase(lExpr.description)) <> 0)
      else
        descriptionOk := true;

      if categoryOk and languageOK and descriptionOk then
        self.ListBox1.Items.Addobject(lExpr.description, lExpr);
    end;
    if assigned(self.ClientDataSet1) then
      freeandnil(self.ClientDataSet1);
    if self.ListBox1.Items.Count > 0 then
    begin
      self.ListBox1.ItemIndex := 0;
      self.AddTable();;
    end;
  finally
    ListBox1.Items.EndUpdate;
  end;

end;
0

Konkretnie. Co chcesz zrobić? Oczekuję odpowiedzi w stylu: "Chcę wysłać rakietę w kosmos", "Chcę załadować plik", "Chcę zrobić robota do głaskania kota"

1 użytkowników online, w tym zalogowanych: 0, gości: 1