obsługa elementu openshowdialog

0

Mam taki oto problem. Załóżmy że w konstruktorze formy jest InitializeComponent() który tworzy obiekt typu OpenFileDialog.

Pytanie numer 1 : dlaczego pokazuje się on zanim główna forma się pokaże, moim zdaniem powinno być tak że jeśli odpala się konstruktor formy a w nim powoływany jest do życia openfiledialog to forma powinna być widoczna zanim widocznym stanie się openfiledialog... dlaczego to działa odwrotnie?

Pytanie numer 2 (priorytetowe dla mnie) : wiadomo że openfiledialog ma zdarzenie polegające na poprawnym otwarciu pliku void openFileDialog1_FileOk(...)
Chciałbym móc jakoś zareagować na sytuację w której użytkownik kliknął cancel zamiast ok. Wiadomym jest że powyższe zdarzenie nie odpala się wówczas a innego nie ma dostępnego dla tego obiektu. Najlepsze jest to że wiem że można to zrobić sprawdzając np. właściwość openfiledialog związaną ze ścieżką którą w przypadku gdy kliknę cancel to nie zostanie przestawiona na inną.
Ale nie bardzo wiem w którym miejscu w programie mam sprawdzać czy uległa ona zmianie bo przecież nie dostaję żadnego zdarzenia od tego... co próbuję uzyskać ? Ano załóżmy że np.to żeby po kliknięciu "cancel" dane pole formy np.bool x ustawione zostało na true oraz dodatkowo aby odpalić metodę formy void foo().

Pomocy

1
  1. Jeśli chcesz aby openfiledialog pokazał się zaraz po pokazaniu formy to musisz wywołać openfiledialog.ShowDialog() w odpowiedzi na zdarzenie shown za msdn ("The Shown event is only raised the first time a form is displayed") tej formy.
  2. Standardowo openfiledialog używa się tak:
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
        string path = openFileDialog1.FileName;
}

W ten sposób sprawdzasz czy użytkownik kliknął cancel.

1

Coś próbujesz kombinować. OpenFileDialog Ci się pokazuje, bo go pokazujesz. Proste. On ma zostać tylko utworzony w konstruktorze (a konkretnie w InitializeComponents()). Ale tylko jeśli został przez Ciebie położony na formę. Jeśli chcesz go tworzyć dynamicznie, to twórz tuż przed użyciem.

A teraz jak używać tego dialogu. Na pewno nie tak jak Ty. To jest dużo prostsze:

OpenFileDialog ofd = new OpenFileDialog();
DialogResult res = ofd.ShowDialog();

if(res == DialogResult.OK)
{
  //plik został wybrany
} else
{
  //plik nie został wybrany
}

ofd.Dispose();

I tyle.

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