2010-11-13 28 views
11

Mam kilka DateTimePicker s w formie, która nigdy się nie aktualizuje.
Próbowałem Value i Text, Invalidate() a następnie Update() a także Refresh() ...DateTimePicker nigdy nie aktualizuje!

Nic nie wydaje się, aby zmienić swoje wartości od bieżącej daty!
Bez względu na to, co ustawiłem, obecne daty są (względnie) aktualne!

Czy jest to błąd .NET 3.5, czy co?
(. Nie, nie mogę używać .NET 4 nad tym projektem)


Jeśli naprawdę chcesz jakiś kod, to tutaj jest: dateTimePicker1.Value = user.BirthDay;. Ponadto, jeśli napiszę MessageBox.Show(user.BirthDay.ToString());, otrzymam ładne pudełko z informacją o urodzinach użytkownika (moje urodziny, na moim komputerze). (Tak więc wartość w zmiennej ...)


Czy powinienem również wspomnieć, że są one tylko dla dat, a nie razy?


Ok, widzę, że trzeba pisać więcej:

Przede wszystkim, sposób, w którym kontrola jest aktualizowana subskrybuje zdarzenia Form.Load. W związku z tym jest wywoływana/uruchamiana/wywoływana, gdy formularz i elementy sterujące są widoczne i "działają".

Po drugie, spójrz na to kawałki kodu i ich wyniki:

MessageBox.Show(user.BirthDay.ToString()); // Shows 12.12.1995 (in my regional format) 
dateTimePicker1.Value = user.BirthDay; // assigned to 12.12.1995 
MessageBox.Show(dateTimePicker1.Value.ToString()); // Shows today's date! 

To nie jest miłe ... Wyjście jest dzisiejsza data. (Do dziś mam na myśli dzień, w którym kod został uruchomiony.)

dateTimePicker1.MinDate = new DateTime(1900,1,1); // January 1st, 1900 
MessageBox.Show(dateTimePicker1.MinDate.ToString()); // January 1st, 1753 ... 

Zła kontrola! 1900 nie równa się 1753!

dateTimePicker1.MaxDate = DateTime.Today; 
// In reality, I need it to today's date 
MessageBox.Show(dateTimePicker1.MinDate.ToString()); // December 31st, 9998 

Time warp? O_O

Zresztą, cały kod wygląda następująco:

public void Form_Load(object sender, EventArgs e) 
{ 
    this.user = User.Load(path); 
    // this.user is a field. 
    // path is a static field which holds the absolute path of the file in which is serialized that data of the user. 

    MessageBox.Show(user.BirthDay.ToString()); // Shows 12.12.1995 (in my regional format) 
    dateTimePicker1.Value = user.BirthDay; // assigned to 12.12.1995 
    MessageBox.Show(dateTimePicker1.Value.ToString()); // Shows today's date! 

    dateTimePicker1.MinDate = new DateTime(1900,1,1); // January 1st, 1900 
    MessageBox.Show(dateTimePicker1.MinDate.ToString()); // January 1st, 1753 ... 

    dateTimePicker1.MaxDate = DateTime.Today; 
    MessageBox.Show(dateTimePicker1.MinDate.ToString()); // December 31st, 9998 
} 

tak, to jakieś rozwiązanie? xC

+0

jesteś pierwszą osobą zgłaszającą ten błąd –

+0

Czy ustawiłeś 'MinDate' dla datetimicker? Czy jesteś pewien, że nikt inny nie nadpisuje twojej wartości?Ponieważ uważam, że jest całkiem bezpiecznie powiedzieć, że nie ma w nim błędów ;-) –

+0

Czy próbowałeś ustawić wartość na "DateTime.Parse (user.BirthDay.ToString())"? –

Odpowiedz

18

Jedna mała wskazówka z tym problem: mój problem było to, że miałem DateTimePicker ustawienie zaznaczone = false i (przez pomyłkę) ShowCheckbox = false; Dzięki tej konfiguracji mogłem ustawić DTPicker, niezależnie od żądanej wartości, ale to się nie zmieni.

+0

Do diabła Muszę to wypróbować! – Vercas

+0

To był problem, dzieje się tak, ponieważ po kliknięciu prawym przyciskiem myszy "Resetuj" wartość DateTimePicker zmienia "Sprawdzono" na False! – WhoIsRich

+0

Zrobiłem to również dla mnie, jednak miałem dwie kontrolki TabPage z dokładnie takim samym rodzajem zagnieżdżania dla zawartych kontrolek itp., A dla jednego z nich nigdy nie miałem żadnych problemów. Na drugiej stronie TabPage, kontrolka (DateTimePicker) nigdy nie była aktualizowana w interfejsie użytkownika, ale ustawienie Checked to True dla tego DateTimePicker rozwiązało to (ponownie, z drugiej strony działało z obydwoma ustawieniami). – Gorgsenegger

1

Standardowy diagnostyczny dla formularza, który nie aktualizuje swojego wyglądu, ale widzisz, że aktualizacja właściwości z debuggerem jest w porządku, to użycie niewłaściwej instancji formularza. Jak to na przykład:

var frm = new Form1(); // Wrong!! 
frm.UpdateBirthDay(user.BirthDay); 

Diagnose to zmieniając swój kod tak:

dateTimePicker1.Value = user.BirthDay; 
this.Show(); // <=== add this 
+0

Interesująca odpowiedź, ale obawiam się, że tak nie jest. Kontrola jest aktualizowana w zdarzeniu "Form.Load", które jest uruchamiane, gdy formularz i elementy sterujące są już widoczne. Również ustawienie 'MinDate' lub' MaxDate' nie działa! – Vercas

+0

Formularz jest * nie * jeszcze widoczny po wywołaniu zdarzenia Załaduj. Jeśli tak, to jest coś naprawdę nie tak. Ustaw punkt przerwania i spójrz na stos wywołań. Upewnij się, że nie widzisz konstruktora. –

+0

Obawiam się, że jest widoczny! – Vercas