okna, krok po kroku

0

Witam....hmmm sry ale nie wiem za bardzo jak nazwac temat pierwszy raz mi sie tak zdarzylo...;)

Ogolnie chodzi o to ze mam menustrip w nim event click na "Otworz katalog"...wszystko dziala, jednak przed wyborem katalogu zrobilem forme ktora pozwala wybrac rozszerzenie zdjec ktore maja zostac potem zaladowane...problem polega na tym ze gdy wywolam to forme w konstruktorze glownej formy to mniej wiecej dziala...ale wtedy musze klikac jeszcze w menu -> otworz katalog zeby wybrac katalog a chce to zrobic wszystko w tym jednym zdarzeniu z menustrip:
Tak wyglada kod(jego czesc) do wyboru rozszerzen:

public class ExtensionChooseForm : Form
    {
        private Dictionary<string, CheckBox> checkboxs = new Dictionary<string, CheckBox>();
        public List<string> extension = new List<string>();
        private int State;

        public int state
        {
            get
            {
                return this.State;
            }

            set
            {
                this.State = value;
            }
        }

        public ExtensionChooseForm()
        {
             //tutaj mamy kod ktory wyswietla forme wszystko jest ok
        }

        private void button_ok_Click(object sender, EventArgs e)
        {
            foreach (string name in checkboxs.Keys)
            {
                if (checkboxs[name].Checked)
                {
                    extension.Add(checkboxs[name].Text);
                }
            }

            this.state = 1;
            this.Close();
        }

        private void button_selectAll_Click(object sender, EventArgs e)
        {
            foreach (string name in checkboxs.Keys)
            {
                checkboxs[name].Checked =(checkboxs[name].Checked == true) ? false : true;

            }
        }
    }
 

No i dalej zdarzenie click z tego menustrip:

private void otworzKatalogToolStripMenuItem_Click(object sender, EventArgs e)
        {

            List<string> path = new List<string>();
            string[] extension;
            string folder;

            this.formcheck = new ExtensionChooseForm();

            //to nie dziala po kliknieciu ok okno znika ale browserdialog sie juz nie pojawia
            if (this.formcheck.state == 1) 
            {
                extension = this.formcheck.extension.ToArray();
                this.folderBrowserDialog1 = new System.Windows.Forms.FolderBrowserDialog();
                this.folderBrowserDialog1.ShowNewFolderButton = false;
                this.folderBrowserDialog1.RootFolder = System.Environment.SpecialFolder.MyComputer;
                DialogResult result = this.folderBrowserDialog1.ShowDialog();
                folder = folderBrowserDialog1.SelectedPath;

                if (result == DialogResult.OK)
                {
                    //reszta kodu
                }
            }
        }
 

Hmm co robie zle...?
Tak jakby pole/wlasciwosc State/state nie istanialo/nie ustawialo sie....

0

Wydaje mi się , że musisz zmusić główny Wątek do poczekania na wykonanie akcji w tej formatce z wyborem rozszerzenia. Służy do tego np opcja ShowDialog().

W tym momencie MainThread nie czeka na zakończenie operacji trafia na ifa i widzi , że state jest równy 0.

Jedna uwaga.
Nie powinieneś wykonywać operacji pokazywania formatki w konstruktorze. Do tego służą właśnie metody Show() i ShowDialog(). Formatka , która ma te metody w konstruktorze staje się nieczytelna i dla innego programisty zachowuje się nielogicznie. Każdy programista zakłada , że konstruktor inicjalizuje Formatkę natomiast wyświetlenie jej następuje później.

1

Pierwszy raz w życiu widzę zapis nazwy pola małą, a właściwości wielką literą.

0

Ok juz wszystko gra kwiesta 5min ;p thx nie wiedzialem o oknach modalnych....a moze inaczej wiedzialem ale nie znalem ich zastosowania ;p

@LaM bylbys tak mily i podalbys nawet pseudo kod co powinien zawierac w takim razie konstruktor i jak wyswietlac potem forme?

0

Trzymaj w konstruktorze wszystkie operacje , które musisz przeprowadzić by zainicjalizować style , warunki początkowe Formatki. Nie przeprowadzaj operacji wyświetlania.

Customowa Formatka dziedziczy po "Form" więc posiada metodę ShowDialog(). Więc wywołaj tą metodę po stworzeniu Formatki.

MyForm newForm = new MyForm(parametry);

newForm.ShowDialog()

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