Wspólne menu dla kilku formatek

Wspólne menu dla kilku formatek
Tomasz Marzoch
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
0

Witajcie,

Chciałbym osiągnąć taki scenariusz:

  1. Mam w menu przyciski "Dodaj","Edytuj", "Usuń" (menu jako usercontrol)
  2. Mam np 3 formatki ("Lista pracowników", "Lista maszyn", "Grafik") - osadzam kontrolkę z menu do tych formatek, formatki mają interfejs implementujący metody dodaj, edytuj, usuń

I jak teraz zrobić żeby zdarzenia z tych przycisków wywoływały odpowiednią formatkę (dodaj/edytuj - inny zestaw i układ kontrolek typu textedit) i usuń (zaznaczanie na gridzie rekordów do usnięcia)

Dzięki z góry za podpowiedzi :)

--
Tomek

JU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5046
1

Jeśli dobrze rozumiem, to chcesz osiągnąć coś takiego:

Kopiuj

public interface IMenuInvoker
{
    void Add();
    void Modify();
    void Delete();
}

public class Menu: UserControl
{
    public IMenuInvoker MenuInvoker {get; set;}

    public void AddClicked(object sender, EventArgs e)
    {
        MenuInvoker?.Add();
    }
}

public class EmployeesForm: Form, IMenuInvoker
{
    public EmployeesForm()
    {
        InitializeControls();
        menuControl.MenuInvoker = this;
    }
}
Tomasz Marzoch
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
0
Juhas napisał(a):

Jeśli dobrze rozumiem, to chcesz osiągnąć coś takiego:

Kopiuj

public interface IMenuInvoker
{
    void Add();
    void Modify();
    void Delete();
}

public class Menu: UserControl
{
    public IMenuInvoker MenuInvoker {get; set;}

    public void AddClicked(object sender, EventArgs e)
    {
        MenuInvoker?.Add();
    }
}

public class EmployeesForm: Form, IMenuInvoker
{
    public EmployeesForm()
    {
        InitializeControls();
        menuControl.MenuInvoker = this;
    }
}

Myślę że jak najbardziej to chciałbym osiągnąć :)

Tylko gdzie teraz obsłużyć zdarzenia tych przycisków?
w klasie Menu czy w klasie EmployeesForm

bo jeśli w klasie menu to chyba tak to się robi:?

Kopiuj
   private void barButtonItem1_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)        {
            MenuInvoker?.OnAddCommand();
        }
AK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3561
0

W chyba wszystkich listenerach zdarzeń na świecie jest argument 'sender' który jest referencją na obiekt, z którego zdarzenie wyszło. To pozwala użyć listenera do wielu elementów GUI i nadal mieć nad tym kontrolę.

JU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5046
0

Przecież ja Ci dałem cały szkielet. Forma implementuje interfejs, na rzecz którego są uruchamiane elementy menu. Ty masz oprogramować implementację tego interfejsu, żeby coś dodać faktycznie, usunąć, czy zmodyfikowac.Czyli EmployeesForm ma implementować interfejs IMenuInvoker, a z kolei odpowiednie metody z tego interfejsu są uruchamiane przez menu.

Tomasz Marzoch
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
0
Juhas napisał(a):

Przecież ja Ci dałem cały szkielet. Forma implementuje interfejs, na rzecz którego są uruchamiane elementy menu. Ty masz oprogramować implementację tego interfejsu, żeby coś dodać faktycznie, usunąć, czy zmodyfikowac.Czyli EmployeesForm ma implementować interfejs IMenuInvoker, a z kolei odpowiednie metody z tego interfejsu są uruchamiane przez menu.

Dziękuje,już zaimplementowałem obsługę menu w formatkach - wiedziałem że to jakoś tak ma być ale nie umiałem sobie chwilowo tego uświadomić (z przykładem - dużo łatwiej).
Dzięki raz jeszcze :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.