[VB.NET] ProgressBars (Simple) für Anfänger

02/06/2014 12:56 iSam34#1
Einleitung

Hallo liebe e*pvp Community! :) Ich muss sagen, ich bin selber noch nicht wirklich ein Über-Pro im Bereich VB.NET. Ich scheitere auch hin und wieder an eigentlich einfachen Aufgaben durch simple Logikfehler wie eigentlich jeder normale Mensch ;). Als ich mich dazu entschlossen habe, VB.NET zu lernen bzw einige Grundlagen zu lernen hatte ich erst keinen Plan was ich mit dem ganzen Visual Basic Kram anfangen soll. Das erste was ich "programmieren" wollte, ist ein simpler Keylogger. (Imma pro hacker :D -nicht). Als ich einige sachen in die Form geworfen habe, dachte ich mir "In einen guten Keylogger gehört eine ProgressBar rein! Das sieht legit aus (nicht) und schindet eindruck bei den naiven Leuten, die dieses Tool nutzen!". Und da währen wir auch schon :

Wie zum Geier benutzt man eine ProgressBar?

Benötigte sachen :
  • Button
  • ProgressBar
  • Timer

Kann in etwa so aussehen :

[Only registered and activated users can see links. Click Here To Register...]

Als erstes machen wir einen Doppelklick auf den Button.
-> Jetzt sieht man den Tab "Form1.vb" mit dem Programm Code Drinnen.

Unter "Private Sub bla bla " :D Schreiben wir folgendes :

Code:
Timer1.Start()
Mit diesem Befehl, wird per Knopfdruck der Timer gestartet.

Diesen stellen wir nun ein :

Zurück auf den Tab "Form1.vb [Entwurf]" und einen Doppelklick auf Timer1.
-> Wir befinden uns nun wieder im Tab "Form1.vb"

Folgender Code wird nun eingefügt :

Code:
ProgressBar1.Minimum = 0
ProgressBar1.Maximum = 100
ProgressBar1.Step = 3
Progressbar1.PerformStep()
Erklärung:

ProgressBar1.Minimum = 0 :
Legt fest, wie viel der Wert der ProgressBar mindestens sein muss

ProgressBar1.Maximum = 100 :
Legt fest, wie viel der Wert der ProgressBar Maximal ist

ProgressBar1.Step = 3 :
Legt fest, wie viel dem Wert der ProgressBar pro "Schritt" hinzufügt

ProgressBar1.PerformStep() :
Führt einen Schritt aus (Wert der ProgressBar + 3). Da es ein Timer ist, werden mehrere Schritte ausgeführt!

Nun können wir noch Optional einen Code einfügen, der bestimmt was passiert wenn die Progressbar voll ist.

Also fügen wir folgenden Code ein :

Code:
If ProgressBar1.Value = 100 Then
            Timer1.Stop()
            MessageBox.Show("ProgressBar vollständig ausgefüllt!", "Meldung")
        End If
Erklärung :

Wenn der Wert der ProgressBar 100 entspricht, wird der Timer angehalten und eine Benachrichtigung wird auf deinem Bildschirm erscheinen.

Beachte dabei :

[Only registered and activated users can see links. Click Here To Register...]

Abschluss

Danke fürs lesen und ich hoffe ich konnte euch bei dieser Grund-Funktion Hilfe geben. Ich weiß es ist nix Professionelles oder gar Cooles. Es soll einfach nur zeigen, wie man eine Progressbar benutzt! :)

Wenn ich euch geholfen habe, lasst doch ein Thanks da :)

~Sam
02/06/2014 15:25 YatoDev#2
oh gott nein. wer benutzt eine progressbar in einem timer ? vorallem woher soll die dann wissen wie weit sie ausgefüllt werden soll?
Ein keylogger mit progress?

Das tut bringt nichts sry
02/06/2014 16:33 alpines#3
Quote:
scheitere auch hin und wieder an eigentlich einfachen Aufgaben
Hm...
Quote:
Das erste was ich "programmieren" wollte, ist ein simpler Keylogger
Woot?
Quote:
Benötigte sachen :
Button
ProgressBar
Timer
Nicht benötigt, in deinem Falle ja aber kriegt man schöner und besser hin.
Quote:
Unter "Private Sub bla bla " Schreiben wir folgendes :
Sehr professionell.

Man kann sich jetzt über das Tutorial streiten aber da du noch Anfänger bist hätte ich dir nicht geraten eins zu schreiben da du möglicherweise einige Leute zum eingeschränkten Denken bringst und nicht mehrere Methoden nennst wie man das noch angehen könnte.
Wenn du an einfachen Sachen scheiterst dann sollte man erst recht kein Tutorial schreiben, sowas sind essentielle Sachen die man einfach draufhaben muss und ohne schreibt man keine halbwegs vernünftigen Tutorials.

Außerdem das nächste Mal erstmal auf Vorschau drücken bevor man etwas absendet.
02/06/2014 16:36 snow#4
Der Logik nach erfüllt sich die Bedingung progress == 100 nie. 0 + 3 + 3 + 3 + 3... = niemals 100. Hm.
02/06/2014 16:41 alpines#5
Quote:
Originally Posted by snow911 View Post
Der Logik nach erfüllt sich die Bedingung progress == 100 nie. 0 + 3 + 3 + 3 + 3... = niemals 100. Hm.
Quote:
Ich scheitere auch hin und wieder an eigentlich einfachen Aufgaben durch simple Logikfehler
Stimmt wohl.
02/06/2014 18:37 ​Tension#6
Man sollte keine Tutorials schreiben wenn man die Sprache nicht in einem gewissen Level beherrscht.
02/15/2014 12:42 DeinMud#7
@snow911
Bei Performstep wird intern geprüft ob sich der Wert über MaxValue befindet, wenn ja wird auf MaxValue gesetzt (100), deswegen erfüllt sich die Bedingung schon.
Bei Value += 3 würde die Bedingung nie erfüllt.

Zu dem Tutorial sag ich aber mal gar nix
04/24/2014 20:09 i0N#8
Quote:
Originally Posted by DeinMud View Post
@snow911
Bei Performstep wird intern geprüft ob sich der Wert über MaxValue befindet, wenn ja wird auf MaxValue gesetzt (100), deswegen erfüllt sich die Bedingung schon.
Bei Value += 3 würde die Bedingung nie erfüllt.

Zu dem Tutorial sag ich aber mal gar nix
Das stimmt schon, aber in diversen anderen Sprachen gibt es solche Dinge wie in .NET eben nicht, daher sind das 'bad coding habits', die man Leuten einfach nicht beibringen sollte. Wenn man ein Tutorial macht, sollte man auch schon was davon verstehen. Der Code selbst ist ja nun mal unnötig, dazu will ich nichts sagen, aber angenommen, jemand würde diesen Code tatsächlich nehmen wollen, dann bitte so:
Code:
If ProgressBar1.Value >= 100 Then
            Timer1.Stop()
            MessageBox.Show("ProgressBar vollständig ausgefüllt!", "Meldung")
        End If
Man beachte das >=. Wenn progressbar >= 100 wäre einfach besser, auch wenn es so wie du es gemacht hast in diesem Fall auch gehen würde.
04/24/2014 20:46 YatoDev#9
für progress sollte man am besten prozent verwenden.
wenn die pb bei 4500 also voll ist und der aktuelle wert 3000 ist rechnet man
3000/4500*100 oder jenachdem (3000/4500)*100
04/24/2014 21:29 alpines#10
Da * vor / nicht bevorzugt wird spielt es keine Rolle ob man 3000/4500 * 100 oder (3000/4500)*100 rechnet. Letzteres zieht sogar mehr Rechenleistung da die Klammern geparsed werden müssen, aber das ist unwichtig.
04/25/2014 02:02 YatoDev#11
Quote:
Originally Posted by alpines View Post
Da * vor / nicht bevorzugt wird spielt es keine Rolle ob man 3000/4500 * 100 oder (3000/4500)*100 rechnet. Letzteres zieht sogar mehr Rechenleistung da die Klammern geparsed werden müssen, aber das ist unwichtig.
wir sind hier nicht bei autoit.
:eek::awesome:
könnte mir sogar vorstellen das das wegoptimiert wird wie auch immer^^
04/25/2014 02:32 snow#12
Quote:
Originally Posted by »FlutterShy™ View Post
für progress sollte man am besten prozent verwenden.
wenn die pb bei 4500 also voll ist und der aktuelle wert 3000 ist rechnet man
3000/4500*100 oder jenachdem (3000/4500)*100
Bei deinem Code kommt immer 0% raus.

Quote:
Da * vor / nicht bevorzugt wird spielt es keine Rolle ob man 3000/4500 * 100 oder (3000/4500)*100 rechnet
Du weißt nicht wie der Ausdruck geparst wird, was ist, wenn 4500 * 100 zuerst ausgewertet wird?

Quote:
Letzteres zieht sogar mehr Rechenleistung da die Klammern geparsed werden müssen, aber das ist unwichtig.
Mein eigener Compiler berücksichtigt Klammern schon beim Übersetzen, ein Compiler aus dem Hause Microsoft kann das garantiert auch.

Quote:
also bei mir ergibt das 66%
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]

Datentypen 101: Integer / Integer schneidet den Rest ab ohne aufzurunden o.ä. Wenn bei a / b a kleiner ist, kommt folglich 0 raus. (3000 * 1.0f) oder auch ein Cast zu float löst das ganze.
04/25/2014 02:51 YatoDev#13
Quote:
Originally Posted by snow911 View Post
Bei deinem Code kommt immer 0% raus.
also bei mir ergibt das 66%

Quote:
Originally Posted by snow911 View Post
Datentypen 101: Integer / Integer schneidet den Rest ab ohne aufzurunden o.ä. Wenn bei a / b a kleiner ist, kommt folglich 0 raus. (3000 * 1.0f) oder auch ein Cast zu float löst das ganze.
schon klar das da immer ne kommazahl raus kommt da man immer das kleine durch das große teilen muss.
04/25/2014 05:00 dowhile#14
Danke man!

Ich habe nun schon ewig an meinem Projekt gearbeitet und bin schon fast fertig. Es war mir nur immer ein Rätsel, wie diese komische API von der ProgressBar funktioniert, so komplex und lückenhaft dokumentiert sie schließlich ist! Dass man dort drei Attribute setzen muss ... Also eigentlich kann ich mich schon mit der Klassenreferenz alleine in trivial Bliotheken einarbeiten, aber hier bin ich wirklich froh ein Tutorial wie dieses gefunden zu haben!

Danke!!

Kannst du bitte noch mehr solcher Anleitungen machen?
04/25/2014 18:35 alpines#15
Quote:
Originally Posted by snow911 View Post
Du weißt nicht wie der Ausdruck geparst wird, was ist, wenn 4500 * 100 zuerst ausgewertet wird?
Liest man nicht normalerweise von links nach rechts?