Avatar billede jesper2003 Nybegynder
11. januar 2006 - 21:51 Der er 11 kommentarer og
1 løsning

få ProgressBar til at opdatere i VB 2005

Hvordan kan jeg få en ProgressBar1 til at opdatere sig når mit program eks er ved at hente en fil ned fra nettet eller kopyrer en fil?
Avatar billede jesper2003 Nybegynder
11. januar 2006 - 21:59 #1
Hvordan ser koden i det gamle vb 6 så kan jeg måske konvatere koden
Avatar billede arne_v Ekspert
11. januar 2006 - 22:59 #2
eksempel:

Imports System
Imports System.Drawing
Imports System.IO
Imports System.Net
Imports System.Windows.Forms
Imports System.Threading

Public Class MainForm
Inherits Form
    Private bar As ProgressBar
    Private start As Button
    Private abort As Button
    Private t As Thread

    Public Sub New()
        bar = New ProgressBar
        start = New Button
        abort = New Button
        SuspendLayout
        bar.Location = New Point(50, 50)
        bar.Size = New Size(200, 50)
        bar.Name = "Progress Bar"
        start.Location = New Point(50, 150)
        start.Size = New Size(200, 50)
        start.Name = "Start Button"
        start.Text = "Start"
        AddHandler start.Click, AddressOf StartClick
        abort.Location = New Point(50, 250)
        abort.Size = New Size(200, 50)
        abort.Name = "Abort Button"
        abort.Text = "Abort"
        AddHandler abort.Click, AddressOf AbortClick
        ClientSize = New Size(300, 350)
        Controls.Add(bar)
        Controls.Add(start)
        Controls.Add(abort)
        Name = "Main Form"
        Text = "Main Form"
        ResumeLayout(False)
    End Sub

    Sub ResetBar(ByVal n As Integer)
        bar.Minimum = 0
        bar.Maximum = n
        bar.Value = 0
    End Sub

    Sub UpdateBar(ByVal n As Integer)
        bar.Value = n
    End Sub

    Delegate Sub ResetHandler(ByVal n As Integer)

    Delegate Sub UpdateHandler(ByVal n As Integer)

    Sub Copy()
        Try
        Dim req As HttpWebRequest = CType(WebRequest.Create("http://wasd.vsm.com.au/wasd/htroot913.zip"), HttpWebRequest)
        Dim resp As HttpWebResponse = CType(req.GetResponse, HttpWebResponse)
        Dim tot As Integer = CType(resp.ContentLength, Integer)
        If bar.InvokeRequired Then
            bar.Invoke(New ResetHandler(AddressOf ResetBar), New Object() {tot})
        Else
            ResetBar(tot)
        End If
        Dim f1 As Stream = resp.GetResponseStream
        Dim f2 As Stream = New FileStream("C:\htroot913.zip", FileMode.CreateNew, FileAccess.Write)
        Dim sofar As Integer = 0
        Dim b(1000) As Byte
        Dim n As Integer
        n = f1.Read(b, 0, b.Length)
        While n > 0
            f2.Write(b, 0, n)
            sofar += n
            If bar.InvokeRequired Then
                bar.Invoke(new UpdateHandler(AddressOf UpdateBar), New Object() {sofar})
            Else
                UpdateBar(sofar)
            End If
            n = f1.Read(b, 0, b.Length)
        End While
        f2.Close
        f1.Close
        resp.Close
        Catch ex As Exception
        MessageBox.Show(ex.Message)
        End Try
    End Sub

    Sub StartClick(ByVal sender As Object, ByVal e As EventArgs)
        t = New Thread(AddressOf Copy)
        t.Start
    End Sub

    Sub AbortClick(ByVal sender As Object, ByVal e As EventArgs)
        t.Abort
    End Sub

    <STAThread()> _
    Public Shared Sub Main(ByVal args As String())
        Application.Run(New MainForm)
        Application.Exit
        Environment.Exit(0)
    End Sub
End Class
Avatar billede jesper2003 Nybegynder
12. januar 2006 - 16:04 #3
det virker. Men hvordan laver jeg så jeg kan bruge mit eget design? har lavet knappen osv selv
ProgressBar1 = ProgressBar
Button1 = Start
Button2 = Anuller
Avatar billede jesper2003 Nybegynder
12. januar 2006 - 16:20 #4
har fundet ud af det nu. men hvad betyder dette

Warning    1    'Public Sub New()' in designer-generated type 'C4_Clan.Form2' should call InitializeComponent method.    H:\C4\C4 Clan\C4-Clan\Form2.vb    14    16    C4-Clan
Avatar billede jesper2003 Nybegynder
12. januar 2006 - 16:26 #5
eller har ikke helt fundet ud af det. Hvordan laver man så man ikke skal flytte rundt på det i koden? http://guf4you.dk/01_EXP.jpg så man ikke skal flytte det rundt i koden eks

  Public Sub New()
        bar = New ProgressBar
        start = New Button
        abort = New Button
        SuspendLayout()
        bar.Location = New Point(42, 57)
        bar.Size = New Size(100, 23)
        bar.Name = "Progress Bar"
        start.Location = New Point(50, 150)
        start.Size = New Size(200, 50)
        start.Name = "Start Button"
        start.Text = "Start"
        AddHandler start.Click, AddressOf StartClick
        abort.Location = New Point(50, 250)
        abort.Size = New Size(200, 50)
        abort.Name = "Abort Button"
        abort.Text = "Abort"
        AddHandler abort.Click, AddressOf AbortClick
        ClientSize = New Size(300, 350)
        Controls.Add(bar)
        Controls.Add(start)
        Controls.Add(abort)
        Name = "Main Form"
        Text = "Main Form"
        ResumeLayout(True)
    End Sub
Avatar billede jesper2003 Nybegynder
13. januar 2006 - 16:09 #6
Fandt selv ud af det efter nogen timer :p Læg bare et svar
Avatar billede arne_v Ekspert
13. januar 2006 - 18:27 #7
ok
Avatar billede jesper2003 Nybegynder
13. januar 2006 - 21:24 #8
Forresten nu blev jeg så optaget af koden at jeg glemte at spørge hvordan man gør så den også kan vise hvorlangt den er med at kopyre en fil istedet for at downloade en fil alser vis den skal flytte en fil fra c: til d: så man kan se hvor langt den er. det var også det jeg spurgte om til at starte med men glemte det i farten.
Avatar billede arne_v Ekspert
13. januar 2006 - 21:28 #9
hvis du kopierer fra FileStream til FileStream så kan du bruge helt samme teknik som ovenfor

(bortset fra at der gerne skulle gå så hurigtigt at du ike når at se noget)
Avatar billede jesper2003 Nybegynder
13. januar 2006 - 21:46 #10
Synes ikke lige jeg kan få koden til at hænge sammen hvordan skal jeg fjerne

          Dim req As HttpWebRequest = CType(WebRequest.Create("http://c4.guf4you.dk/program/download/game/hit_the_ball.exe"), HttpWebRequest)
            Dim resp As HttpWebResponse = CType(req.GetResponse, HttpWebResponse)
            Dim tot As Integer = CType(resp.ContentLength, Integer)

og gøre så den kopyre filer istedet
Avatar billede arne_v Ekspert
13. januar 2006 - 21:52 #11
utestet:

        Dim tot As Integer = CType(New FileInfo("D:\htroot913.zip")).Length, Integer)
        If bar.InvokeRequired Then
            bar.Invoke(New ResetHandler(AddressOf ResetBar), New Object() {tot})
        Else
            ResetBar(tot)
        End If
        Dim f1 As Stream = New FileStream("D:\htroot913.zip", FileMode.Open, FileAccess.Read)
        Dim f2 As Stream = New FileStream("C:\htroot913.zip", FileMode.CreateNew, FileAccess.Write)
        Dim sofar As Integer = 0
        Dim b(1000) As Byte
        Dim n As Integer
        n = f1.Read(b, 0, b.Length)
        While n > 0
            f2.Write(b, 0, n)
            sofar += n
            If bar.InvokeRequired Then
                bar.Invoke(new UpdateHandler(AddressOf UpdateBar), New Object() {sofar})
            Else
                UpdateBar(sofar)
            End If
            n = f1.Read(b, 0, b.Length)
        End While
        f2.Close
        f1.Close
        resp.Close
Avatar billede jesper2003 Nybegynder
13. januar 2006 - 22:10 #12
Tak for hjælpen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester