Formular   otázka

VB.NET, WinForms

Prosím o radu pri nasledovnom probléme mám formulár v ktorom mám 4 comboboxy do ktorých pri Form_Shown na čítavam dáta, vzhľadom na to že dát je dosť veľa tak som si tam dal na formulár ProgressBar a Label kde si posielam info o tom čo sa práve deje a kde asi som.

Všetko pracuje tak ako chcem.

Problem však nastane ak chcem potom tento formulár spustit z iného formuláru. Vtedy vizuálne zamrzne a zobrazí sa celý až keď Form_Shown dobehne.

Na zobrazenie som vyskúšal Form.Show, Form.ShowDialog výsledok je stále rovnaký.

Ďakujem

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

V první řadě načítat data v události Show je naprostá hovadina, protože se budou načítat vždy při zobrazení formuláře. Tedy při obnovení z minimalizovaného stavu, přepnutí z jiného okna atd. Data by se měla načítat v události Load, případně nějak ručně například stisknutím nějakého tlačítka. Načítání dat by mělo probíhat ve vlastním vlákně pokud trvá dlouho a k tomu se používá komponenta BackgroundWorker, na toto téma se zde už mnohokrát diskutovalo.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Načítanie dát som presunul do tlačítka. Teraz sa formulár zobazí celý, ale pri načítaní dát sa mi nerefrešuje label ani ProgressBar. To platí len v prípade ak ho otváram z iného formulára. Ak ho spúšťam ako východzí formulár tak sa label aj progressBar refrešujú. Kód na načítanie dát nemám vo formulári ale v ďalšej triede. Ďakujem

kód prikladám

 Private Function NaplneniePolí(ByVal recordset As ADODB.Recordset, ByVal ActionText1 As String, ByVal ActionText2 As String) As Array
        Dim F1 As Adresa = My.Forms.Adresa
        Dim PB As ProgressBar = My.Forms.Adresa.ProgressBar1
        Dim Action As Label = My.Forms.Adresa.Popis
        Dim i As Long

        '   nastavenie min. a maxima Progres Baru
        PB.Minimum = 0
        PB.Maximum = recordset.RecordCount - 1
        '   Text v Action label
        Action.Text = ActionText1 & PB.Maximum
        '   prekreslenie formuláru
        F1.Refresh()
        '   dimenzovanie veľkosti poľa podľa počtu záznamov
        Dim PoleHodnot(0 To recordset.RecordCount - 1)
        '   prechod na prvý záznam
        recordset.MoveFirst()
        '   prechádzanie všetkých záznamov a plnenie poľa
        For i = 0 To recordset.RecordCount - 1
            PoleHodnot(i) = recordset.Fields(0).Value
            '   zmena hodnoty ProgresBaru
            PB.Value = i
            '   prekreslenie ProgresBaru
            PB.Refresh()
            '   prechod na ďalší záznam
            recordset.MoveNext()
        Next
        '   zatvorenie 
        ZatvorenieADODB()

        '   oznam o ukončení
        Action.Text = ActionText2
        Action.Refresh()
        'prekreslenie formuláru
        F1.Refresh()

        Return PoleHodnot

    End Function

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