• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Sprawdzanie, czy wartości w pozostałych polach checkbox są różne

VPS Starter Arubacloud
0 głosów
252 wizyt
pytanie zadane 10 stycznia 2017 w C i C++ przez TeslaX93 Gaduła (3,590 p.)

Witam, 

tworzę sobie program w C++ Builder 6, który wygląda mniej więcej jak powyżej. Chciałbym, aby w każdym combobox można było wybrać jedną z liter od A do Z lub znak "?", i te wartości wpisałem już do właściwości Items każdego comboboksa.

Chciałbym jednak, aby wartości tych comboboksów się nie powtarzały - to znaczy, gdy w jednym z nich wybiorę np. literę "A", to aby we wszystkich pozostałych nie było można tej litery wybrać. Wyjątkiem jest "?", które będzie mógł być wybierany wiele razy. Fajnie byłoby też, gdyby po zmianie litery na inną, poprzednio niedostępna litera stawała się możliwa do wyboru.

Poprosiłbym o jakieś nakierowanie w jaki sposób można byłoby takie coś zrealizować.

2 odpowiedzi

+1 głos
odpowiedź 10 stycznia 2017 przez niezalogowany

Builder to zło i nie znam go, ale mam pomysł.

Umieść te comboboxy w tablicy i przy każdej zmianie przeleć pętlą po wszystkich comboboxach i usuń z ich zestawu opcji tą wybraną literę. W pseudokodzie by było cuś takiego:

vector <comboBox*> comboboxy; //vector jest łatwo rozszerzalny, więc w przykładzie go użyję
//Kod w którym wklejasz do tego vectora adresy swoich combo
//na przykład tak o: comboboxy.push_back(&ComboBoxA)

if(Zdarzenie_zmiany_wartosci_w_comboboxie)
{
	if(co_zostalo_wybrane != "?") //Jeżeli został wybrany znak zapytania to nic tu się nie stanie
	{
		for(int i = 0; i<comboboxy.size(); i++)
		{
			if(comboboxy[i].nazwa != "nazwa_comboboxa_w_ktorym_zostala_zmieniona_wartosc")
				//Nie usuwa z comboboxa, w którym została ta wartość wybrana
			{
				comboboxy[i].items.delete(co_zostalo_wybrane);
			}
		}
	}
}

Nie umiem pisać pseudokodu...., ale mam nadzieję, że chociaż trochę pomogłem. Tylko musisz do tego zrobić, że jak zmieni literę na inną, to ta zablokowana zostanie dostępna. Wystarczy sprawdzić jaka była stara litera i pętlą przejechać dodając ją do zestawu.

+1 głos
odpowiedź 10 stycznia 2017 przez niezalogowany
edycja 30 sierpnia 2017

Gdy użytkownik wybierze np 'A' to znajdź item, który ma taką wartość i usuń go ze wszystkich comboBoxów. Masz do dyspozycji funkcje:

ComboBox1->Items->Delete(4) // 4 - to numer elementu
ComboBox2->...

W Visual Studio CLI można było robić tablice przycisków, combo itp żeby sobie ułatwić... W Borlandzie nie doszedłem do tego momentu, ale to możesz poszukać później :)

Wracając do sedna... Wyjątkiem będzie gdy mamy już zaznaczoną literę i usuniętą z pozostałych combosów. To trzeba będzie rozbudować funkcje zaznaczania o sprawdzenie czy coś w nim było czy nie. Bo jeżeli tak to musimy dodać zamieniany element do pozostałych combo, bo go usunęliśmy. Można byle jak, a możesz też skorzystać z pomocniczej tabeli literek i ustawić tak, by było w miarę alfabetycznie. Jeżeli zaś nie musi tak być to możesz wstawiać jako np pierwszy element:

ComboBox1->Items->Insert(0, "A");

Podobne pytania

0 głosów
1 odpowiedź 689 wizyt
pytanie zadane 24 maja 2017 w Java przez Ring Początkujący (330 p.)
0 głosów
1 odpowiedź 60 wizyt
0 głosów
1 odpowiedź 305 wizyt

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...