Visual Basic

Programovacie jazyky, rady, poradňa...
dasti555
Professional
Professional
Používateľov profilový obrázok
Príspevky: 1577
Registrovaný: 12 jún 2011, 15:08

Visual Basic

Príspevok od používateľa dasti555 »

Zdravím rozhodol som sa "učiť" vo VB. (Aj keď zrovna neviem či je to dobrý nápad a nejaká java/c by nebolo lepšie)

OMAČKA: S VB som začal lebo je to celkom jednoduché a aj interface sa dá ľahko spraviť. Aj keď chodím na škole na krúžok JAVY ale pravdu povediac od začiatku roka som sa nenaučil nič iné ako system.out.writeln

K VECI : Chcel by som vedieť čo napísať do kódu keď chcem aby po kliku na button1 sa zobrazila form2 a v nej naskočil ProgressBar a následne ak by dobehol do 100% tak by sa zavrela from2 a otovorila form3.

Na googli to určite je ale neviem čo tam zadať kedže pod "vb progress bar on new form after click on button" som nenašiel nič.


EDIT:

Kód: Vybrať všetko

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        If TextBox1.Text = "" And TextBox2.Text = "" Then
            MessageBox.Show("Napíš niečo do textových polí")
        Else
            Form3.ShowDialog()
            Me.Close()
        End If
    End Sub
To mi funguje až na to že nezavrie tú form1. form3 vyskočí ale jak syk progressbar je na nule
form3 code

Kód: Vybrať všetko

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        Timer1.Start()
        ProgressBar1.Increment(1)
        If ProgressBar1.Value = 100 Then
            Me.Close()
            Form2.Show()
        End If
        End Sub
End Class
myslím si že mám to ale v zlej (triede?) čiže by to nemalo byť napísané v tom Timer1_Tick ale v niečom inom problém je že neviem do čoho ten riadok (4) dať

Kód: Vybrať všetko

        Timer1.Start()
        ProgressBar1.Increment(1)
        If ProgressBar1.Value = 100 Then
            Me.Close()
            Form2.Show()
čiže toto musím hodiť do niečoho iného .. pokiaľ by bol ten progress bar na form1 tak by som to napísal do Button1_Click lenže takto aby sa to samostatne spustilo .. jak syk :/
Fabo
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6810
Registrovaný: 16 nov 2007, 17:23
Bydlisko: 's Chravenhache
Kontaktovať používateľa:

Re: Visual Basic

Príspevok od používateľa Fabo »

v com to robis, VStudio a VB.net?
dasti555
Professional
Professional
Používateľov profilový obrázok
Príspevky: 1577
Registrovaný: 12 jún 2011, 15:08

Re: Visual Basic

Príspevok od používateľa dasti555 »

Visual Studio express 2012
pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: Visual Basic

Príspevok od používateľa pcsiete »

Ok, v prvom kóde voláš ShowDialog, čo je funkcia, ktorá "zamrazí"/deaktivuje všetky ostatné okná okrem spúšťaného, a aktivuje ich až keď sa to spúšťané okno zavrie. To je dôvod, prečo sa ti to nevypne. Ako riešenie môžeš najprv to prvé okno skryť, a až potom otvoriť to druhé, takže možno niečo ako

Kód: Vybrať všetko

Me.Hide()
Form3.ShowDialog()
Me.Show()
S tým ProgressBar-om je to už iný problém. Voláš Start v Tick-u, ktorý sa vykoná až potom, čo časovač už beží. Potrebuješ ho najprv spustiť, najlepšie vtedy, keď je nové okno už načítané (Load).

No a samozrejme, vzhľadom na tú prvú zmenu potrebuješ to druhé okno už len zatvoriť, pričom Form1 sa zobrazí automaticky, keď sa Fomr3 zatvorí.
dasti555
Professional
Professional
Používateľov profilový obrázok
Príspevky: 1577
Registrovaný: 12 jún 2011, 15:08

Re: Visual Basic

Príspevok od používateľa dasti555 »

Najlepšie by bolo ak by sa form1 vypla úplne čiže napr. Vo form4 bude buttonXZ a tým sa vypne celý program. Ale to by som si už sám vyriešil mne ide hlavne o ten progress bar a vôbec neviem ako ďalej...
pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: Visual Basic

Príspevok od používateľa pcsiete »

A čítal si čo som ti napísal?
Nemôžeš zatvoriť nadradené okno, pretože sa ti zatvoria všetky podradené. Zároveň, nie je to Close čo tvorí dvojicu so Show, ale Hide.
Aj k tomu progressbaru tam máš vysvetlenie - Tick sa nestane, pokým sa Timer nezapne, a to sa nestane, pokým sa nestane Tick... <- tu je ten problém.
dasti555
Professional
Professional
Používateľov profilový obrázok
Príspevky: 1577
Registrovaný: 12 jún 2011, 15:08

Re: Visual Basic

Príspevok od používateľa dasti555 »

Noo tomuto už chápem viac. :)

Aj keď ten progress bar stále nechápem ako spojazdniť. Kam by som teda mal dať čo.
pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: Visual Basic

Príspevok od používateľa pcsiete »

Musíš vytvoriť funkciu pre načítanie Form3 (najjednudochšie - dvakrát klikneš na okno v dizajnérovi a prehodí ťa to do kódu, kde to tú funkciu automaticky vytovorí). Do tejto funkcie, ktorá sa zavolá až po načítaní Form3 dáš nazovTimeru.Start(). Podľa nastavenia tvojho Timer-u sa ti bude raz za čas volať funkcia Tick, v ktorej zakaždým posunieš ProgressBar. Tá posledná vec, to overovanie, či je hodnota ProgressBaru rovná 100 je tam na to, aby sa ti Form3 (v tomto prípade Me) zavoril a Form1 znova objavil.
Toť vše.
dasti555
Professional
Professional
Používateľov profilový obrázok
Príspevky: 1577
Registrovaný: 12 jún 2011, 15:08

Re: Visual Basic

Príspevok od používateľa dasti555 »

Ďakujem už som to nejako spojazdnil. :) Je možné ale že budem potrebovať ešte nejakú pomoc ale zatiaľ všetko.
Spixy
Professional
Professional
Používateľov profilový obrázok
Príspevky: 1334
Registrovaný: 24 okt 2010, 12:52

Re: Visual Basic

Príspevok od používateľa Spixy »

Caute, robim jednu ulohu a s VBA robim prvykrat. Excel mi vyhadzuje syntax error na riadku: Private Function Contains(name As String, names As String()) As Boolean
Neviete, co s tym?

Kód: Vybrať všetko

Private Function Contains(name As String, names As String()) As Boolean
    Contains = False
    
    Dim Index As Integer
    For Index = 0 To names.GetUpperBound(0)
        If names(Index) = name Then
            Contains = True
            Exit For
        End If
    Next
End Function
pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: Visual Basic

Príspevok od používateľa pcsiete »

VBA nie je Visual Basic :) Ale to je jedno ...
Skús names() As String namiesto names As String().
Spixy
Professional
Professional
Používateľov profilový obrázok
Príspevky: 1334
Registrovaný: 24 okt 2010, 12:52

Re: Visual Basic

Príspevok od používateľa Spixy »

jo dík, to som opravil, teraz to už hádže Compile error: invalid qualifier na riadku
names.GetUpperBound(0)
pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: Visual Basic

Príspevok od používateľa pcsiete »

Myslím že VBA preferuje UBound(names) pred GetUpperBound(0), ale to je len tip.
Napísať odpoveď