Witam! Jestem początkującym programistą C#. Istnieją typy A, B i C. W każdym z nich występują odpowiednio A.1, A.2, A.3, A.4, B.1 etc., w kórych istnieje po kilkanaście elemntów W mojej aplikacji mam pewien formularz, w którym najpierw wybiera się przez ComboBox1 typ (A, B lub C), a następnie poprzez zaznaczenie Check Boxów które podtypy (1, 2, 3 i 4). W ComboBox2 ma wyświetlić się kombinacja tych typów. Dokładnie: wszystkie elementy typu wybranego w ComboBox1, które występują tylko w podtypach wybranych w CheckBoxach.
Wiem że trochę chaotycznie to wyszło i ciężko będzie zrozumieć, więc zamieszczam tutaj taki oto przykładowy kod:
public class A
{
public object[] a1, a2, a3, a4;
public A()
{
a1 = new object[] { "1", "2", "3", "4", "5", "6" };
a2 = new object[] { "3", "4", "5", "8", "12", "32", "128" };
a3 = new object[] { "9", "10", "11", "12", "13", "14" };
a4 = new object[] { "13", "14", "15", "16", "17" };
}
}
public class B
{
public object[] a1, a2, a3, a4;
public B()
{
a1 = new object[] { "q", "w", "e", "r", "t", "y" };
a2 = new object[] { "q", "w", "e", "r", "x", "y", "z" };
a3 = new object[] { "a", "s", "d", "f", "g", "h" };
a4 = new object[] { "g", "h", "j", "k", "l" };
}
}
Teraz np. jeśli zaznaczę w A i tylko 1 (w Check Boxach) to w ComboBox2 chcę otrzymać: 1, 2, 6. Jeśli zaznaczę a3 i a4 to: 13, 14; natomiast, gdy a2, a3 i a4: null
Jak to zrobić? Napisałem coś takiego:
void zaladuj()
{
object[] items = new object[9000];
int liczba = 0;
bool sprawdzac = true;
switch (cbRodzaj.SelectedItem.ToString())
{
case "Broń":
if (cbWojo.Checked == true & cbNinja.Checked == false & cbSura.Checked == false & cbSzaman.Checked == false)
{
foreach (var Obj in itemy.bron.wojo)
{
sprawdzac = true;
foreach (var Obj1 in itemy.bron.ninja)
{
if (Obj1 == Obj)
{
sprawdzac = false;
break;
}
}
if (sprawdzac)
{
foreach (var Obj2 in itemy.bron.sura)
{
if (Obj2 == Obj)
{
sprawdzac = false;
break;
}
}
}
if (sprawdzac)
{
foreach (var Obj3 in itemy.bron.szaman)
{
if (Obj3 == Obj)
{
sprawdzac = false;
break;
}
}
}
if (sprawdzac)
{
items[liczba] = Obj;
liczba++;
}
}
for (int i = 0; i < liczba; i++)
{
cbPrzedmiot.Items.Add(items[i]);
}
}
break;
default:
break;
}
}
Niestety aby przewidzieć wszystkie kombinacje tych 4 CheckBoxów musiałbym napisać 16 podobnych :( Cały czas staram się to rozwiązać, ale bez rezultatu. Dlatego też proszę o pomoc w tej sprawie i...
...w kolejnej, najważniejszej. O ile w pierwszym przypadku kilka dni logicznego myślenia i problem w końcu rozwiążę, o tylke w 2. przypadku tak łatwo nie będzie :( Otóż w cbRodzaj mam 14 itemów (m.in. "Broń") i tworzenie dla każdego Case oddzielnych kilkunastu linijek kody mija się z celem. Chciałem zrobić coś w stylu:
void zaladuj()
{
object[] items = new object[9000];
int liczba = 0;
bool sprawdzac = true;
switch (cbRodzaj.SelectedItem.ToString())
{
case "Broń":
klasy(itemy.bron);
break;
default:
break;
}
void klasy(class klasa)
{
[...]
}
Jednak z wiadomych dla was przyczyn jest to niemożliwe :( Więc: Czy da się przekazać klasę jako parametr? Jakieś wskaźniki czy coś? Albo może macie lepszy pomysł jak to rozwiązać?
PROSZĘ O POMOC!