Obsługa przycisków
2 posters
:: Projekt "Madagaskar" :: 4.INNE :: 1.C#: ogólnie
Strona 1 z 1
Obsługa przycisków
Hej
Mam pytanko. Dostałem do poprawy taki błąd:
Są dwa przyciski: A i B. Przyciśnięcie A powinno rozwinąć menu z wyborem daty z kalendarza. Przyciśnięcie B powinno otworzyć okno słownika, w którym są zdefiniowane przez użytkownika daty + dodatkowe uwagi. Problem polega na tym, że program nie rozróżnia przycisków i w obu przypadkach rozwija menu z kalendarzem (przycisk B działa tak samo jak A). Po wciśnięciu któregokolwiek przycisku uruchamiana jest metoda (i tak ma to działać):
W ifie wywoływana jest metoda
Jeśli użytkownik wybiera przycisk A - QueryPopUp nie powinien nic robić. Ponieważ e.Cancel jest równy false to RaiseQueryPopup zwraca false i wykonywane są operacje wewnątrz ifa w metodzie OnClickButton co odpowiada za realizację wciśnięcia A.
Problem polegał na tym, że event obsługujący linię: QueryPopUp(sender, e); nie był opisany, zatem w każdym przypadku program zachowywał się tak samo. Wykombinowałem coś takiego:
Event powinien sprawdzić czy został wciśnięty przycisk B odpowiedzialny za wywołanie danych zdefiniowanych w słowniku. Jeśli tak to powinien wywołać kolejny event:
który obsługuje wciśnięcie dowolnego przycisku odpowiedzialnego za wywołanie danych słownikowych. Następnie zmienia wartość e.Cancel na true, dzięki czemu nie byłyby realizowane polecenie z metody OnClickButton.
Mój problem polega na tym, że nie potrafię przekazać do eventu: repositoryItemData_QueryPopUp, który przycisk został wciśnięty. Linia którą skleciłem:
DevExpress.XtraEditors.Controls.ButtonPressedEventArgs btnPressed = sender as DevExpress.XtraEditors.Controls.ButtonPressedEventArgs;
nadaje obiektowi btnPressed wartość null i przy ifie wyrzuca mi wyjątek. Czy da się jakość to przekazać? Czy od początku do końca źle do tego podchodzę?
edit
Bo zapomniałem^^ chodzi mi o to czy jest możliwe przekazanie tak żeby modyfikacje dotknęły tylko repositoryItemData_QueryPopUp.
Mam pytanko. Dostałem do poprawy taki błąd:
Są dwa przyciski: A i B. Przyciśnięcie A powinno rozwinąć menu z wyborem daty z kalendarza. Przyciśnięcie B powinno otworzyć okno słownika, w którym są zdefiniowane przez użytkownika daty + dodatkowe uwagi. Problem polega na tym, że program nie rozróżnia przycisków i w obu przypadkach rozwija menu z kalendarzem (przycisk B działa tak samo jak A). Po wciśnięciu któregokolwiek przycisku uruchamiana jest metoda (i tak ma to działać):
- Kod:
protected override void OnClickButton(EditorButtonObjectInfoArgs buttonInfo)
{
if (!this.Properties.RaiseQueryPopup(this))
{
...
}
}
W ifie wywoływana jest metoda
- Kod:
public bool RaiseQueryPopup(object sender)
{
if (QueryPopUp != null)
{
CancelEventArgs e = new CancelEventArgs();
QueryPopUp(sender, e);
return e.Cancel;
}
return false;
}
Jeśli użytkownik wybiera przycisk A - QueryPopUp nie powinien nic robić. Ponieważ e.Cancel jest równy false to RaiseQueryPopup zwraca false i wykonywane są operacje wewnątrz ifa w metodzie OnClickButton co odpowiada za realizację wciśnięcia A.
Problem polegał na tym, że event obsługujący linię: QueryPopUp(sender, e); nie był opisany, zatem w każdym przypadku program zachowywał się tak samo. Wykombinowałem coś takiego:
- Kod:
void repositoryItemData_QueryPopUp(object sender, System.ComponentModel.CancelEventArgs e)
{
DevExpress.XtraEditors.Controls.ButtonPressedEventArgs btnPressed = sender as DevExpress.XtraEditors.Controls.ButtonPressedEventArgs;
if (btnPressed.Button.Caption.Equals(GlobalResources.Slownik))
{
repositoryItem_ButtonClick(sender, btnPressed);
e.Cancel = true;
}
}
Event powinien sprawdzić czy został wciśnięty przycisk B odpowiedzialny za wywołanie danych zdefiniowanych w słowniku. Jeśli tak to powinien wywołać kolejny event:
- Kod:
private void repositoryItem_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
który obsługuje wciśnięcie dowolnego przycisku odpowiedzialnego za wywołanie danych słownikowych. Następnie zmienia wartość e.Cancel na true, dzięki czemu nie byłyby realizowane polecenie z metody OnClickButton.
Mój problem polega na tym, że nie potrafię przekazać do eventu: repositoryItemData_QueryPopUp, który przycisk został wciśnięty. Linia którą skleciłem:
DevExpress.XtraEditors.Controls.ButtonPressedEventArgs btnPressed = sender as DevExpress.XtraEditors.Controls.ButtonPressedEventArgs;
nadaje obiektowi btnPressed wartość null i przy ifie wyrzuca mi wyjątek. Czy da się jakość to przekazać? Czy od początku do końca źle do tego podchodzę?
edit
Bo zapomniałem^^ chodzi mi o to czy jest możliwe przekazanie tak żeby modyfikacje dotknęły tylko repositoryItemData_QueryPopUp.
emielek- Liczba postów : 27
Join date : 04/02/2014
Age : 41
Re: Obsługa przycisków
Dostajesz nulla, poniewaz senderem nie jest klasa argumentow. Senderem jest kontrolka, ktora wywolala dane zdarzenie, wie w tym przypadku jest to Button. Jesli wpiszesz 'sender as Button' to powinno to poprawnie dzialac
Fores- Liczba postów : 73
Join date : 30/05/2013
Age : 34
Skąd : Katowice
Re: Obsługa przycisków
'Sender as Button' nie poszło, nie pozwoliło mi na rzutowanie 'DevExpress.XtraEditors.Controls.ButtonPressedEventArgs' na 'Buttona'. Dopiero dodatkowa klasa i delegata pomogły. Ale dzięki za info.
emielek- Liczba postów : 27
Join date : 04/02/2014
Age : 41
:: Projekt "Madagaskar" :: 4.INNE :: 1.C#: ogólnie
Strona 1 z 1
Pozwolenia na tym forum:
Nie możesz odpowiadać w tematach