Czy chcesz zareagować na tę wiadomość? Zarejestruj się na forum za pomocą kilku kliknięć lub zaloguj się, aby kontynuować.

Obsługa przycisków

2 posters

Go down

Obsługa przycisków Empty Obsługa przycisków

Pisanie by emielek Pią Cze 20, 2014 7:31 pm

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ć):
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

Powrót do góry Go down

Obsługa przycisków Empty Re: Obsługa przycisków

Pisanie by Fores Nie Cze 22, 2014 8:04 pm

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
Fores

Liczba postów : 73
Join date : 30/05/2013
Age : 34
Skąd : Katowice

Powrót do góry Go down

Obsługa przycisków Empty Re: Obsługa przycisków

Pisanie by emielek Wto Cze 24, 2014 7:25 am

'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

Powrót do góry Go down

Obsługa przycisków Empty Re: Obsługa przycisków

Pisanie by Sponsored content


Sponsored content


Powrót do góry Go down

Powrót do góry


 
Pozwolenia na tym forum:
Nie możesz odpowiadać w tematach