Blokowanie propagacji zdarzeń w WindowsForms

0

Witam,
Napisałem program WindowsForms pod Linux- MonoDevelop a następnie transponowałem go pod Windows gdzie pojawił się nieoczekiwany (dla mnie) problem.
Program umożliwia wczytanie pliku - OpenFileDialog. Formularz ten znajdując się nad głównym formularzem - aplikacją a dokładniej nad obiektem PicureBox do którego przypisana jest między innymi obsługa MouseDown, w momencie wyboru pliku aktywuje obsługę MouseDown w PictureBox.
Na ile zdołałem się zorientować problem leży w propagacji zdarzeń. Można ją zablokować (e.Handled) ale jak to zrobić w OpenFileDialog?
Ewentualnie można sprawdzać co jest żródłem wywołania zdarzenia. Problemem jest to, że e.OriginalSource jest właściwością MouseButtonEventArgs a nie MouseEventArgs.
Alternatywnym rozwiązaniem, którego chciałbym jednak uniknąć jest dodawanie - usuwanie obsługi zdarzeń związanych z myszą z PictureBox.
Z góry dzięki za wszelkie sugestie.

0

Program umożliwia wczytanie pliku - OpenFileDialog. Formularz ten znajdując się nad głównym formularzem - aplikacją a dokładniej nad obiektem PicureBox do którego przypisana jest między innymi obsługa MouseDown, w momencie wyboru pliku aktywuje obsługę MouseDown w PictureBox.

Ke? To zdecydowanie nie powinno mieć miejsca. Pokaż jak otwierasz ten OpenFileDialog.

0

Nie sądzę aby było coś w tym szczególnego

		private void onFileOpen(object sender, EventArgs e){
			OpenFileDialog ofd = new OpenFileDialog();
			ofd.Filter = "All DICOM Files(*.*)|*.*";
			if (ofd.ShowDialog() == DialogResult.OK)
			{
				if (ofd.FileName.Length > 0)
				{
					Cursor = Cursors.WaitCursor;
					readDICOMFile(ofd.FileName);
					Cursor = Cursors.Default;
				}
				ofd.Dispose();
			}
		}

Tak jak napisałem sytuacja ta ma miejsce tylko pod Windows i tylko jak formularz OpenFileDialog znajduje się nad (przepraszam za być może istotne niedopatzrenie) Panel-em a nie jak napisałem PictureBox.

0

ja też uważam, że klikanie w OFD nie powinno w żaden sposób przenosić się na formę/komponenty pod nim. Czy jesteś w stanie stworzyć testowy projekt z minimalną ilością komponentów, gdzie problem ten występuje. Albo chociaż nagrać jak to wygląda.

0

Ponownie witam,
Problem rozwiązany częściowo tzn. poprzez dodanie zmiennej i warunku nie wywołuje się nieporządana w tym momencie procedura ale zasadnicze pytanie pozostaje.
Sprostowanie - odpaleniu ulega obsługa MouseUp nie MouseDown i ciekawostka tylko jeśli wyboru pliku dokonuję przez dwuklik, natomiast NIE jeśli przez OK.
Co do testowego programiku to postaram się coś wyskrobać ale jeśli to późnym wieczorem.

0

No i sprawa się rozwiązała? Tytuł wątku i moje podejrzenia okazały się błedne.
Jestem okazjonalnym użytkownikiem Windows i nie przyszło mi do głowy, że pod Windows przy dwukliku np odczyt pliku rozpoczyna się już po drugim MouseDown -> zamknięcie OFD -> MouseUp.
Sorry za zawracanie głowy. Jakby się dało to wątek do usunięcia.

0
if (ofd.ShowDialog() == DialogResult.OK)
{
    ...
    ofd.Dispose();
}

A jak nie jest OK to wtedy nie Dispose? ;-)

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