Blokowanie poszczególnych RadioButtonów, które są w grupie na podstawie sprawdzenia warunków z datami

0

Cześć,
Mam problem z blokowaniem poszczególnych RadioButtonów, które są w grupie. Dokładnie jest to kontrolka RadioGroup z pakietu DevExpress Winforms. Chciałbym napisać jak najprostszą metodę, która będzie uruchamiana przez wciśnięcie przycisku Button. Metoda ma za zadanie /odblokowanie/zablokowanie tych RadioButtonów w grupie, które spełniają następujące warunki:

private void TerminPlatnosci()
        {
            liczbaDni = 90;

            DateTime dataDzisiejsza = DateTime.Now;
            DateTime dataTerminuPlatnosci = dataDzisiejsza.AddDays(liczbaDni);

            if (dataDzisiejsza.Month == dataTerminuPlatnosci.Month)
            {
                terminZaplaty.Properties.Items[4].Enabled = true;                
            }
            else if (dataTerminuPlatnosci.Month != dataDzisiejsza.Month)
            {
                terminZaplaty.Properties.Items[4].Enabled = false;               
            }
        }

Przykład ten działa dla jednego RadioButton tylko, że chcę to jedną metodą puścić dla całej grupy RadioButoonów i zablokować wszystkie te dla, których data jest różna od bieżącego miesiąca. Wartości dla liczbaDni to: 3,7,14,30,90 zaś Items mają indeksy od 0 do 4 gdzie indeks 4 to liczbaDni = 90. Wie ktoś jak najprostszym sposobem można to zrobić ?

0

Prostacki przykład rozwiązania jednego z wielu:

DateTime dataDzisiejsza = DateTime.Now;
...
[0]....
[1]...
[2]...
[3]...
terminZaplaty.Properties.Items[4].Enabled = (dataDzisiejsza == dataDzisiejsza.AddDays(90));

Możesz zrobić tablicę i całość przelecieć w pętli albo do każdego itema dodać stosowną operację jak powyżej.

0

Powyższe rozwiązanie nie działa. Blokowane Są wszystkie RadioButtony w grupie.

Jeśli zrobimy jak poniżej to łatwym sposobem działa:

DateTime dataDzisiejsza = DateTime.Now;
...
[0]....
[1]...
[2]...
[3]...
terminZaplaty.Properties.Items[4].Enabled = (dataDzisiejsza.Month == dataDzisiejsza.AddDays(90).Month);
0

Jak się przyjrzysz to zobaczysz ze mój przykład porównuje całą datą a nie tylko miesiąc. Dodaj ".Month" do warunku i ruszy. Tj powinno.

btw.
Nie zrobiłem tego specjalnie.

0

Jest jak już napisałem ok, zauważyłem po chwili, że jest porównywana cała data. Dzięki za pomoc

0

Ale w sumie prawda, można zrobić tablicę i przelecieć przez nią pętlą. Tylko teraz pytanie, jestem nowicjuszem w C#, więc jakby przykładowy kod do tej operacji wyglądał ?

0
terminZaplaty.Properties.Items.Foreach(item => item.Enabled = (dataDzisiejsza.Month == dataDzisiejsza.AddDays(90).Month));

tak sobie czytam, czy ten warunek dataDzisiejsza.Month == dataDzisiejsza.AddDays(90).Month nie będzie zawsze równy false? ;D

0

@gswidwa1: masz rację ten warunek zawsze będzie równy false :)

0

Mam jeszcze jedno pytanie, zakładając, że wszystkie warunki będą false to wtedy chciałym ustawić następującą zależność:

RadioGroup1.SelectedIndex = 1;
RadioGroup1.Items[0].Enabled = false;

W jaki sposób można to zrobić ?

Próbowałem jak niżej, ale to nie działa :(

public void Test()
{
DateTime dataDzisiejsza = DateTime.Now;
            terminZaplaty.Properties.Items[0].Enabled = (dataDzisiejsza.Month == dataDzisiejsza.AddDays(3).Month);
            terminZaplaty.Properties.Items[1].Enabled = (dataDzisiejsza.Month == dataDzisiejsza.AddDays(7).Month);
            terminZaplaty.Properties.Items[2].Enabled = (dataDzisiejsza.Month == dataDzisiejsza.AddDays(14).Month);
            terminZaplaty.Properties.Items[3].Enabled = (dataDzisiejsza.Month == dataDzisiejsza.AddDays(30).Month);
            terminZaplaty.Properties.Items[4].Enabled = (dataDzisiejsza.Month == dataDzisiejsza.AddDays(90).Month);
if ((terminZaplaty.Properties.Items[0].Enabled = false) && (terminZaplaty.Properties.Items[1].Enabled = false) && (terminZaplaty.Properties.Items[3].Enabled =false)
                && (terminZaplaty.Properties.Items[4].Enabled = false))
            {
                RadioGroup1.SelectedIndex = 1;
                RadioGroup1.Properties.Items[0].Enabled = false;
            }
}
0

Masz błąd w konstruowaniu warunku. Sprawdź go dokładnie znak po znaku, to trywialny błąd :)

0

@gswidwa1: Masz rację :) Dzięki, przyglądałem się i nie widziałem :) Co ślepemu po oczach :) Tak to powinno być:

if (terminZaplaty.Properties.Items[0].Enabled == false && terminZaplaty.Properties.Items[1].Enabled == false ..........)

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