nowa forma w wpf + nowy przycisk realizujący daną funkcję

0

Witam mam taki oto problem. We framgmencie mojego programu jestem zmuszony użyć nowego okna otwieranego przyciskiem, które samo zawiera wewnątrz inne kontrolki.

 
 private void button4_Click(object sender, EventArgs e)
        {
            FileInfo plikko = new FileInfo(@"C:\User\Wojtek\Desktop\GRR.xlsx");
            ExcelPackage paczkaa = new ExcelPackage(plikko);
            ExcelWorksheet nowy = paczkaa.Workbook.Worksheets["Pacjenci"];

            Label l1 = new Label() { Left = 0, Top = 0, Text = "Imie pacjenta" };
            TextBox nowy_pacjent_imie = new TextBox() {Left=0,Top=20};

            Label l2 = new Label() { Left = 0, Top = 40, Text = "Nazwisko pacjenta" };
            TextBox nowy_pacjent_nazwisko = new TextBox() { Left = 0, Top = 60 };
            
            Label l3 = new Label() { Left = 0, Top = 80, Text = "Pesel pacjenta" };
            TextBox nowy_pacjent_pesel = new TextBox() { Left = 0, Top = 100 };
            
            Label l4 = new Label() { Left = 0, Top = 120, Text = "Skala Bartel" };
            TextBox nowy_pacjent_skala_bartel = new TextBox() { Left = 0, Top = 140 };
            
            Label l5 = new Label() { Left = 0, Top = 160, Text = "Data objęcia opieką" };
            TextBox nowy_pacjent_data_opieki = new TextBox() { Left = 0, Top = 180 };
            Button ok = new Button(){Left = 100, Top=100, Text="Dodaj"};

             

            Form f = new Form();
            f.Text = "Nowy Pacjent";
            f.Controls.Add(nowy_pacjent_imie);
            f.Controls.Add(l1);
            f.Controls.Add(nowy_pacjent_nazwisko);
            f.Controls.Add(l2);
            f.Controls.Add(nowy_pacjent_pesel);
            f.Controls.Add(l3);
            f.Controls.Add(nowy_pacjent_skala_bartel);
            f.Controls.Add(l4);
            f.Controls.Add(nowy_pacjent_data_opieki);
            f.Controls.Add(l5);
            f.Controls.Add(ok);
          

      
            
                noweimie = nowy_pacjent_imie.Text;
                nowenazwisko = nowy_pacjent_nazwisko.Text;
                nowypesel = nowy_pacjent_pesel.Text;
                nowybartel = nowy_pacjent_skala_bartel.Text;
                nowadata = nowy_pacjent_data_opieki.Text;
                for (int ko = 2; ko < 1000; ko++)
                {
                    if (nowy.Cells["A" + ko.ToString()].Value.ToString() == null)
                    {
                        nowy.Cells["B" + ko.ToString()].Value = noweimie;
                        nowy.Cells["A" + ko.ToString()].Value = nowenazwisko;
                        nowy.Cells["C" + ko.ToString()].Value = nowypesel;
                        nowy.Cells["D" + ko.ToString()].Value = nowadata;
                        nowy.Cells["E" + ko.ToString()].Value = nowybartel;

                        break;

                    }
                }
                paczkaa.Save();
            
            }

Powyżej fragment kodu odpowiedzialna za nowe wyskakujące okno.
Moje pytanie jest takie jak dodać nowy przycisk wewnątrz tego nowego okna żeby zrealizował jakieś funkcje, oraz zamknął to nowe okno i powrócił do głównego.

A i jeszcze jedno czy jest jakaś szansa, żeby z powodzeniem przenieść mój program na system linux z zainstalowanym mono Runtime?
Bo z moich dotychczasowych prób to program się odpala lecz po naciśnięciu któregoś z działających przycisków automatycznie się zamyka.
Z góry dziękuję za pomoc.

1

Skoro to WPF to czemu tworzysz formę z WF? Czemu tworzysz to w metodzie zamiast po ludzku dodać nowy item w projekcie?

Button btn = new Button();
f.Controls.Add(btn);
btn.Click += OnClick;

void OnClick(object sender, EventArgs e)
{
...
}

Co do pytania o linuksa to nie mam pojęcia może ktoś inny odpowie.

0

Szczerze mówiąc nie jestem za bardzo zaawansowany w c# i nie wpadłem na to. A jak dodam tę drugą formę jako item to jak je połączyć żeby jedna jakoś odpalała drugą?

0

Mój błąd używam Windows Forms Application.

1

No to w takim razie lecisz z tutka który Ci podesłałem.

0

Kilka rad dla początkującego: nie nazywaj zmiennych l1, l2, l3, ko, nowy. Są nieczytelne. Używaj bardziej obrazujących nazw np. zamiast "l1" użyj "labelImiePacjenta", zamiast "nowy" użyj "arkuszPacjentow". Polecam przeczytać książkę Czysty Kod. Kilka pierwszych rozdziałów na pewno zrozumiesz, a czytelność kodu znacznie się poprawi.

private void button4_Click(object sender, EventArgs e)

Kontrolki też nazywaj bardziej obrazowo, daję Ci 100% gwarancji, że po powrocie do kodu za miesiąc nie będziesz wiedział który to buton i po co on jest, i będziesz musiał babrać się w kodzie.

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