Okno.ShowDialog()   zodpovězená otázka

VB.NET

Zdravím.

Mám okno s "progress barem", který ukazuje průběh události. Potřebuju, aby uživatel nevstupoval do ostatních formulářů aplikace v průběhu události (okno s progressbarem ostatní okna překrývá). Problém je v tom, že pokud otevřu okno pomocí "Okno.Show()", všechno jede OK (ale uživatel může vstoupit do ostatních oken aplikace). Pokud ho otevřu pomocí "Okno.ShowDialog()" , nic se neděje (všechno zamrzne, průběh události se nezobrazí, neobjeví se ani text v záhlaví okna). Hodnota progressbaru je do formuláře posílána z okna, v němž právě bšží událost. Co dělám špatně, případně jak jinak zajistit, aby pod okno s průběhem události nemohl uživatel vůbec vstoupit ?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pokud zobrazíte nějaké okno modálně, čeká se dokud toto modální okno nebude uzavřeno. Řešením je zavolat okno nemodálně pomocí .Show() a u hlavního okna (případně dalších otevřených oken) nastavit .Enabled = False. Po uzavření nemodálního okna zase vše .Enabled nastavit na True. Tento způsob se mi velmi osvědčil.

nahlásit spamnahlásit spam 3 / 3 odpovědětodpovědět

Dobře, díky za odpověď. A nedá se nějak univerzálně odkázat na okno, které "krycí" okno s progressbarem otevřelo z "krycího" okna ? Potom by se dal jeden univerzální kód do okna "krycího" a nemusel bych při věech otevřeních "krycího" okna vypínat a zapínat příslušný formulář (těhle případů mám v aplikaci hodně). Poznámka: vždy nastane stav otevřeného pouze jednoho konkrétního okna (+ hlavní okno programu ve stavu "Visible = False") a přes něj vždy stejné "krycí" okno s progressbarem.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zkuste třeba "krycí" okno otevírat

 Form2.Owner = Me
        Form2.Show()

a do formuláře Form2 dejte ošetření událostí

Private Sub Form2_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Me.Owner.Enabled = False

    End Sub

Private Sub Form2_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
        Me.Owner.Enabled = True
    End Sub

nahlásit spamnahlásit spam 3 / 3 odpovědětodpovědět

Díky, funguje to.


  Form2.Show(Me)

Private Sub Form2_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Me.Owner.Enabled = False

    End Sub

Private Sub Form2_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
        Me.Owner.Enabled = True
    End Sub

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback