Wywołanie funkcji z MainWindow

0

Od razu zaznaczę że jestem dyletantem i bawię się C# jedynie hobbystycznie.
Wybaczcie więc dziury we wiedzy.

Mam aplikację która mniej-więcej wygląda tak:

public partial class MainWindow : Window
{

    public MainWindow()
    {
        InitializeComponent();

		Update();
	}

	Update()
	{
		Show_List()
	}

    private void btn_prod_change_Click(object sender, RoutedEventArgs e)
    {
        Poduction_Queue pro = new Poduction_Queue(selected_item);
        pro.Show();
    }
}

public partial class Poduction_Queue : Window
{

	public Production_Queue
	{
	}
	
	private void Button_OK(object sender, RoutedEventArgs e)
    {
		this.Close()
	}
}

Klikając [button_prod_change] wywołuję dodatkowe okno, w którym ustalam kolejkę produkcji.
Przy jej zamknięciu chciałbym, aby znowu byłą wykonana funkcja Update() aby odświeżyć listę danych.
Jak to najlepiej zrobić?

1
    private void btn_prod_change_Click(object sender, RoutedEventArgs e)
    {
        Poduction_Queue pro = new Poduction_Queue(selected_item);
        if(pro.ShowDialog() == DialogResult.OK)
        {
           Update();
        }
    }

#EDIT

    private void btn_prod_change_Click(object sender, RoutedEventArgs e)
    {
        Poduction_Queue pro = new Poduction_Queue(selected_item);
        pro.ShowDialog();
        Update();
    }
0

Chyba DialogResult nie będzie domyślnie OK jeśli się to nie ustawi. If jest niepotrzebny. Jeśli nie jest potrzebny.

0

Racja. Byłem pewny, że Button ma domyślnie DialogResult.OK, a ma DialogResult.None.

0

@AdamWox:

    private void btn_prod_change_Click(object sender, RoutedEventArgs e)
    {
        Poduction_Queue pro = new Poduction_Queue(selected_item);
        pro.ShowDialog();
        Update();
    }

W tym przypadku Update() zostanie wykonany zaraz po otwarciu okna [Production_Queue], a nie po jego zamknięciu.
A że user dokonuje zmian zmiennych wg własnego uznania to w oknie [Production_Queue] zmiana nie będzie widoczna.

Przyklad:

Aby zmodyfikować wynik w TextBox txt musimy:

  1. uruchomic klase [plus_minus]
  2. wybrac operacje [plus] albo [minus]
  3. zamknac okno [plus_minus]
  4. musze wykonac "any_action" aby odswiezyc [main window], a tego chce wlaśnie uniknąć
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            Host.my_value = 5; //dane wsadowe
            Update();                  
        }

        public void Update()   //główna pętla
        {
            txt.Text = Host.my_value.ToString();
        }

        private void Button_Math_Click(object sender, RoutedEventArgs e)   //okno operacji
        {
            Plus_minus test = new Plus_minus();
            test.Show();    
        }

        private void Button_Any_Action(object sender, RoutedEventArgs e) //dowolna inna akcja w [Main_Window]
        {
            Update();
        }
    }

    public class Host  //miejsce przechowywania danych
    {
        public static int my_value;
    }

    public partial class Plus_minus : Window   //okno operacji na danych
    {
        static int value;

        public Plus_minus()
        {
            InitializeComponent();

            value = Host.my_value;
        }

        private void Button_Plus_Click(object sender, RoutedEventArgs e)
        {
            value++;
        }

        private void Button_Minus_Click(object sender, RoutedEventArgs e)
        {
            value--;
        }

        private void Button_OK_Click(object sender, RoutedEventArgs e)
        {
            Host.my_value = value;
            this.Close();
        }
    }
2

W tym przypadku Update() zostanie wykonany zaraz po otwarciu okna [Production_Queue], a nie po jego zamknięciu.
A że user dokonuje zmian zmiennych wg własnego uznania to w oknie [Production_Queue] zmiana nie będzie widoczna.

Nie prawda. Zwróć uwagę, że tam jest ShowDialog(), a nie Show(). Metoda Update() wykona się dopiero jak się zamknie okno.

1 użytkowników online, w tym zalogowanych: 0, gości: 1