DataTimePicker - zachycení a zablokování změny datumu   zodpovězená otázka

VB.NET

Zdarec !! Nutně bych potřeboval, pro zdejší machry, triviální záležitost.

Mám komponentu Dim Kalendar As datatimepicker a potřebuji následující věc. Mám proměnnou, která říká, že ve formuláři BYLA/NEBYLA provedena změna pakliže změna=TRUE a pokusím se provést změnu datumu v Kalendar vyběhne MsgBox typu YES|NO|CANCEL při resul=CANCEL potřebuji aby bylo vráceno datum před pokusem o změnu.

Zkoušel jsem to přes událost kalendar.ValueChanged

Tam jsem to při result=CANCEL zkusil hodit kalendar.value=Today

ALE to má dva problémy....

1) né vždy se vracím z aktuálního dne

2) a asi horší tím, že NASTAVUJI kalendar.vale=něco nového automaticky se mi zopakuje událost kalendar.ValueChanged

Doufám, že jsem to nepopsal moc složitě !!!

MOC díky za pomoc !!!

Radek

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Že by nikdo nevěděl ???

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Před vrácením hodnoty kalendáře potřebujete odregistrovat a po něm opět zaregistrovat obslužnou proceduru události ValueChanged kalendáře. Původní hodnotu pro vrácení si musíte ve "vhodný okamžik" uchovat (například při detekci první změny nebo při nějakém plnění formuláře) v proměnné nebo ho mít uchovaný v nějakém objektu (modelu apod.).

Kód by mohl vypadat přibližně takto:

Private KalendarOriginalValue As DateTime

Private Sub Kalendar_ValueChanged(sender As Object, e As EventArgs)
	If Me.HasChanges AndAlso Not Me.SaveWithQuery() Then
		'Cancel Msg dialogu
		RemoveHandler Kalendar.ValueChanged, AddressOf Kalendar_ValueChanged
		Try
			'Vrácení původní hodnoty kalendáře
			kalendar.Value = Me.KalendarOriginalValue
		Finally
			AddHandler Kalendar.ValueChanged, AddressOf Kalendar_ValueChanged
		End Try
		Return
	End If

	If Not Me.HasChanges Then
		'První změna
		Me.KalendarOriginalValue = Kalendar.Value
		Me.HasChanges = True
	End If
End Sub
nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Paráda..... to už je vyšší dívčí... :-)

Jen poprosím ještě o návod nebo stručné navedení jak odregistrovat původní proceduru události ???

Nebo nemůžu nějak jednoduše vytvořit "novou" událost, která předchází vlastní změně ????

Něco jako je validating a validated ???

Ještě jedno díky

nahlásit spamnahlásit spam 0 odpovědětodpovědět

To odregistrování události je ten řádek:

RemoveHandler Kalendar.ValueChanged, AddressOf Kalendar_ValueChanged

Tím se při nastavení Value nebude Kalendar_ValueChanged opakovaně volat. Obsluha události se pak znovu zaregistruje tím AddHandler (v bloku Finally).

Jinak DateTimePicker události Validating a Validated má (dědí je z Control) viz MSDN (http://msdn.microsoft.com/cs-cz/library/..., ale jak se na něm chovají si musíte vyzkoušet.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Super!!! děkuji za info..... skoro už mi to funguje podle představ....

Jen dva poslední datzy.

1. dotaz úplného loozera jaký je prosím rozdíl mezi klasickým and a andalso ?? Nikdy jsem to tak nepoužival...:-(

2. ta druhá součást podmínky Not Me.SaveWithQuery() to je prosím co ??

Vřelé a mnohé díky za snad poslední radu.....

nahlásit spamnahlásit spam 0 odpovědětodpovědět

1) Při And se vyhodnocují obě části výrazu, při AndAlso se pravá část výrazu vyhodnocuje pouze pokud je levá true (obdobně u OrElse se pravá část výrazu vyhodnocuje jen pokud je levá false).

2) SaveWithQuery v tom kódu představuje volaní metody, která by zobrazila nějaký ten msg dotaz zda uložit/vrátit změny. Pokud vrátí false, znamená to, že se musí změna vrátit, true že se změna uložila.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Díky moc !!! Už to funguje perfektně !!!

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback