2011-08-02 20 views
8

Mam przycisk, który po kliknięciu otwiera okno dialogowe z różnymi kontrolkami, takimi jak przyciski radiowe i pola tekstowe. Jeśli wszystko jest w porządku, wartości w tym oknie dialogowym są przekazywane do przycisku, a reszta kodu jest przetwarzana z tymi wartościami. Jeśli Anuluj, nie rób nic.Niestandardowe okno dialogowe w C#?

Jak mogę to zrobić? Zastanawiałem się nad utworzeniem innej formy z tymi kontrolkami i mam przycisk wywoływania nowego formularza, ale chcę, aby pozostałe elementy sterujące przestały działać, dopóki formularz nie zostanie wypełniony, tak jak w oknie dialogowym.

Odpowiedz

31

1.) Utwórz formularz Mówiłeś o ze wszystkimi neccessary elementów UI. Dodaj również przycisk OK i Anuluj.

2.) W okienku właściwości przycisku OK i Anuluj, ustaw wartości DialogResult odpowiednio na OK i Anuluj. Dodatkowo możesz również ustawić właściwość Anuluj w formularzu, tak aby była ona ustawieniem przycisku Anuluj.

3. Dodaj dodatkowe właściwości do okna dialogowego, które odpowiadają wartościom, które chcesz zwrócić.

4.) Aby wyświetlić okno dialogowe, coś wzdłuż linii

using(MyDialog dialog = new MyDialog()) 
{ 
    DialogResult result = dialog.ShowDialog(); 

    switch (result) 
    { 
    // put in how you want the various results to be handled 
    // if ok, then something like var x = dialog.MyX; 
    } 

} 
0

Jednym ze sposobów jest utworzenie wydarzenia w formularzu okna dialogowego. W zależności od tego, ile wartości chcesz wysłać, możesz po prostu mieć parametry w delegacie wydarzenia. Lepszym sposobem jest utworzenie małej klasy lub struktury dla argumentów zawierających listę właściwości, które chcesz zwrócić.

Po kliknięciu przycisku OK wywołasz zdarzenie z wartościami z okna dialogowego. W przypadku anulowania zdarzenie nie jest uruchamiane.

W formularzu za pomocą przycisku można podłączyć obsługę zdarzenia. To odbiera twoje wartości i możesz wtedy robić z nimi wszystko, co potrzebujesz.

http://msdn.microsoft.com/en-us/library/aa645739(v=vs.71).aspx

+1

Dlaczego dodać wiele kanalizacji poprzez delegatów, gdy jest to coś, co może obsługiwać natywnie? – dotnetnate

+0

Prawda, jednak często można osiągnąć wiele różnych rzeczy.W takim przypadku istnieją właściwości publiczne z okna dialogowego, delegatów i zdarzeń, i tak dalej. Na przykład. http://www.codeproject.com/KB/cs/pass_data_between_forms.aspx Po prostu podaję alternatywę – ScruffyDuck

+0

Mogę iść do pracy z mojego domu 40 mil od mojego biura. To nie sprawia, że ​​jest to dobry pomysł. Nie wszystkie pomysły są tworzone jednakowo;) – dotnetnate

4

Można to robią. Utwórz nowy formularz. Od głównego formularza można wywołać za pomocą formularza niestandardowego:

CustomForm customForm = new CustomForm(); 
customForm.ShowDialog(); 

Upewnij się, że dodanie odpowiedniego przycisku do formularza niestandardowego i ustawić ich własności DialogResult do OK, Anuluj lub cokolwiek innego.

1

Gdzieś w kodzie, który usuwa okno dialogowe, możesz również jawnie ustawić wynik. Na przykład można umieścić następujący kod w module obsługi zdarzeń kliknięcia przycisku.

OnOKButton_Click(object sender, EventArgs e) 
{ 
    this.DialogResult = DialogResult.OK; 
    this.Dispose(); 
} 
0
  • Dodaj przyciski do formularza okien. Zazwyczaj nazwa przycisków albo jako cmdOK lub cmdCancel

enter image description here

  • Zdefiniuj Anuluj i OK Przyciski w formie dialogowym

enter image description here

Powiązane problemy