2011-12-21 16 views
5

Chciałbym zapytać,przejść z okna potomnego do okna nadrzędnego

Mam okno o nazwie MainWindow i jeszcze jeden o nazwie ImportForm. W MainWindow zgłoszę

private void generate_Window(int num_chart) 
{ 
    Window ownedWindow = new ImportForm(num_chart); 
    ownedWindow.Owner = this;  
    ownedWindow.Show(); 
} 

W oknie dziecko i zrobić kilka rzeczy, a ja produkować kilka zmiennych. jak var1, var2, var3.

Chcę gdy okno dziecko blisko powrotu var1, var2, var3 do MainWindow i wywołać jedną funkcję powiedzmy import_chart(var1, var2, var3) ..

Każda pomoc będzie apretiated. Dzięki

+0

można spróbować tworzenia zdarzenia i wprowadzanie tych zmiennych wewnątrz niego – jclozano

Odpowiedz

4

Wygląda na niezręczny wybór projektu. Tak czy inaczej, oto jak można to zrobić:

MainWindow.cs:

private void generate_Window(int num_chart) 
{ 
    Window ownedWindow = new ImportForm(num_chart, import_chart); 
    ownedWindow.Owner = this; 
    ownedWindow.Show(); 
} 

private void import_chart(int n, string s, bool b) 
{ 
    //Do something 
} 

ImportForm.cs:

private Action<int, string, bool> callback; 
public ImportForm(int num_chart, Action<int, string, bool> action) 
{ 
    InitializeComponent(); 
    Closed += ImportForm_Closed; 
    callback = action; 
} 

private void ImportForm_Closed(object sender, EventArgs e) 
{ 
    callback(0, "Test", false); 
} 

Wystarczy zmienić działanie do typów parametrów potrzebnych (i dostosować ImportForm_Closed (...) również ich używać).

Jeśli coś jest niejasne, daj mi znać.

+0

Tak to jest bardzo pomocne ... Dzięki dużo ... Ja jesteś winien ... Twoja odpowiedź była naprawdę oszczędna. – Anaisthitos

0

Co powiesz na dodanie wydarzenia do ImportForm "ImportFinished", gdzie przekazujesz swoje wartości jako eventargs. To zdarzenie jest uruchamiane w zdarzeniu Zamknij lub Zamknięcie w ImportForm i obsługiwane w MainWindow. Można również wyświetlić ImportForm jako okno dialogowe Modal i odczytać wartości, gdy zwrócona zostanie metoda ShowDialog.

0

prosty sposób to zrobić, aby var1, var2 i var3 instancji zmiennych, które są widoczne na zakres dominującej (na przykład, aby ich public), a następnie w MainWindow, należy dołączyć do zdarzenia Closed i przeczytaj zmienne z (ImportForm)sender.

0

Mam przykład z mojego własnego kodu. Jest to generyczne i wystarczająco oczywiste, że mogę je udostępnić tutaj.

Zrobiłem coś wzdłuż tych linii.

/// <summary> 
    /// Show an InputBox similar to the pre-.NET InputBox functionality. Returns the original value when Cancel was pressed. 
    /// </summary> 
    /// <param name="OriginalValue">Pre-populated value in the input box</param> 
    /// <param name="PromptText">Prompt text displayed on the form</param> 
    /// <param name="Caption">Window caption</param> 
    /// <returns>InputBoxResult structure containing both the DialogResult and the input text. Warning: The input text will always be returned regardless of the DialogResult, so don't use it if the DialogResult is Cancel.</returns> 
    public static InputBoxResult Show(string OriginalValue = "", string PromptText = "", string Caption = "") { 
     InputBox form = new InputBox { 
      Text = Caption, 
      lblPrompt = {Text = PromptText}, 
      txtInput = {Text = OriginalValue} 
     }; 

     InputBoxResult res = new InputBoxResult(); 
     res.Result = form.ShowDialog(); 
     res.Input = form.txtInput.Text; 

     return res; 
    } 

Stworzyłem klasę o nazwie InputBoxResult tak:

/// <summary> 
    /// Represents the results from an InputBox.Show call, including the DialogResult 
    /// and the input data. Note that the input data is always populated with the 
    /// user-entered data regardless of the DialogResult - this is inconsistent with 
    /// the old InputBox behavior and may change in the future. 
    /// </summary> 
    public struct InputBoxResult { 
     /// <summary> 
     /// Describes the way the dialog was resolved (OK/Cancel) 
     /// </summary> 
     public DialogResult Result { get; set; } 
     /// <summary> 
     /// User-entered text 
     /// </summary> 
     public string Input { get; set; } 

     /// <summary> 
     /// Translate this result into a string for easy debugging 
     /// </summary> 
     /// <returns></returns> 
     public override string ToString() { 
      return "Result: " + Result.ToString() + 
       "\r\nInput: " + Input.ToString(); 
     } 
    } 
Powiązane problemy