CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Dynamiczne tworzenie warunku if()

Dynamiczne tworzenie warunku if()

dział ogólny

Dynamiczne tworzenie warunku if()

Nowy postprzez mate006 » poniedziałek, 30 maja 2016, 15:24

Witam

Chciałbym zrobić dynamiczne generowanie warunku if, np. wybieram sobie z obiektu ComboBox "cena" w kolejnym ComboBox wybieram "> większa" i w TEdit wpisuje wartość np. 20 po kliknięciu w szukaj wyszukuje mi tylko takie wiersze które spełniają warunek, oczywiście po wybraniu 1 opcji pojawia się nowy wiersz w którym mogę wybrać kolejny warunek. Tylko nie wiem jak i czy w ogóle jest szansa.

Prosiłbym o rozwikłania mej niewiedzy.

Pozdrawiam
Avatar użytkownika
mate006
Intelektryk
Intelektryk
 
Posty: 145
Dołączył(a): wtorek, 2 marca 2010, 14:12
Podziękował : 7
Otrzymał podziękowań: 0
System operacyjny: Windows 7 Premium 64
Kompilator: Embarcadero® C++Builder® XE
Gadu Gadu: 0
    WindowsFirefox

Re: Dynamiczne tworzenie warunku if()

Nowy postprzez Mironas » poniedziałek, 30 maja 2016, 15:54

ComboBox-y możesz tworzyć dynamicznie:
KOD cpp:     UKRYJ  
TComboBox* CB = new TComboBox(this);
CB->Parent = Panel1;  // gdzie umieścić combobox-a
CB->Left = 20;
CB->Top = 20;


Możesz też utworzyć obiekt TFrame zawierający komplet komponentów dla pojedynczego warunku, a potem generować takie obiekty (po jednym dla każdego warunku) i umieszczać je w oknie albo na panelu.

Możesz też wykorzystać StringGrid-a i dodawać warunki w kolejnych wierszach. W komórkach StringGrid-a też możesz umieszczać ComboBox-y. W tym celu trzeba pobrać Rect pojedynczej komórki a potem umieścić na tym miejscu ComboBox albo inny komponent.

Tylko pamiętaj na koniec usunąć usunąć dynamicznie tworzone elementy.
Avatar użytkownika
Mironas
Programista I
Programista I
 
Posty: 427
Dołączył(a): poniedziałek, 2 stycznia 2012, 19:02
Podziękował : 17
Otrzymał podziękowań: 61
System operacyjny: Windows 10
Kompilator: C++Builder 10.3 Rio
TMS Components Pack
Gadu Gadu: 0
    Windows XPChrome

Re: Dynamiczne tworzenie warunku if()

Nowy postprzez mate006 » poniedziałek, 30 maja 2016, 18:57

Nie o to mi chodziło, z tym to nie mam problemu.

Chodzi o warunek np.

switch (combobox1->itemindex)
{
case 1: column = 1; break;
case 2: column = 2; break;
case 3: column = 4; break;
}


switch (combobox2->itemindex)
{
case 1: znak = ">="; break;
case 2: znak = "="; break;
case 3: znak = "<="; break;
case 3: znak = "!="; break;
}

for (int i = 0; i <= StringGrid->RowCount; i++)
{
if (StringGrid->Cells[column][i] znak Edit1->Text) <------- i chodzi tutaj o dynamiczne tworzeniu warunku
{
//tutaj robimy coś ze znalezionymi wierszami
}
}
Avatar użytkownika
mate006
Intelektryk
Intelektryk
 
Posty: 145
Dołączył(a): wtorek, 2 marca 2010, 14:12
Podziękował : 7
Otrzymał podziękowań: 0
System operacyjny: Windows 7 Premium 64
Kompilator: Embarcadero® C++Builder® XE
Gadu Gadu: 0
    WindowsChrome

Re: Dynamiczne tworzenie warunku if()

Nowy postprzez polymorphism » poniedziałek, 30 maja 2016, 19:47

Możesz użyć wyrażeń lambda:
KOD cpp:     UKRYJ  
bool (*pred)(const String &a, const String &b) = [](const String &a, const String &b) -> bool { return false; };
       

switch (combobox2->itemindex)
{
case 1: pred = [](const String &a, const String &b) -> bool { return a >= b; }; break;
case 2: pred = [](const String &a, const String &b) -> bool { return a == b; }; break;
case 3: pred = [](const String &a, const String &b) -> bool { return a <= b; }; break;
case 4: pred = [](const String &a, const String &b) -> bool { return a != b; }; break;
}


for (int i = 0; i <= StringGrid->RowCount; i++)
{
        if (pred(StringGrid->Cells[column][i], Edit1->Text))
        {
                //tutaj robimy coś ze znalezionymi wierszami
        }
}
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows 7Firefox


Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 6 gości

cron