• 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

0 głosów
76 wizyt
pytanie zadane 10 stycznia w C i C++ przez TeslaX93 Użytkownik (530 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 przez ガーディアン ガーディアン Mądrala (6,590 p.)

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 przez Hipcio Nałogowiec (46,520 p.)
edycja 30 sierpnia przez Hipcio

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ź 59 wizyt
0 głosów
0 odpowiedzi 32 wizyt
0 głosów
1 odpowiedź 45 wizyt
pytanie zadane 17 kwietnia 2016 w C i C++ przez Dominik Gola Użytkownik (560 p.)
Obowiązuje już zaktualizowany regulamin.

Czy wiesz, że nie musisz już odświeżać strony głównej?

Lista pytań i odpowiedzi aktualizuje się automatycznie!

38,606 zapytań

76,489 odpowiedzi

149,375 komentarzy

18,071 pasjonatów

Przeglądających: 313
Pasjonatów: 29 Gości: 284

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...