Visual Basic - VB | Fragen

  • My.Computer.FileSystem.WriteAllText() (Parameter: "Pfad","Dateiname", append)


    Append ist ob er den Text anhängen soll.True = Anhängen, false = Ersetzen.


    My.Computer.FileSystem.ReadAllText() (Parameter: "Pfad")


    Okey vielen Dank! :)
    Hast du auch eine Lösung für mein oberes Problem, was noch besteht? :S


    &: Gibt es einen Befehl für etwas wie "sleep()"? Habe heute nichts bei Google gefunden...


    /edit: Möchte aber nicht, dass er das einfach so dareinschreibt. Er soll das ja Später auch aus der Zeile auslesen. Zum Beispiel trägt er ein:

    Code
    [Optionen]
    Handy=0


    => So geht das aber nicht, oder?

    Einmal editiert, zuletzt von Maik H. ()

  • Generell arbeitest du bei objektorientierten Sprachen wie VB, C# und JAVA etc nicht mit .ini-Files, wie du es von PAWN kennst, sondern mit XML.


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • Generell arbeitest du bei objektorientierten Sprachen wie VB, C# und JAVA etc nicht mit .ini-Files, wie du es von PAWN kennst, sondern mit XML.


    Oh, das verwirrt mich jetzt aber etwas in meinen Grundsätzen. Da muss ich wohl was ganz neues lernen... Gib's da zufällig ein gutes Tutorial? (Bevor ich wieder eine Quelle habe die ich nicht verstehe. ^^ )

  • Wieso sollte er eine ganze Klassenbibliothek laden, wenn er doch eindeutig nur den Sleep-Befehl brauchen wird? Absolut unnütz und kontraproduktiv.
    Deutlichere Beispiele als die aus den MS-Dokumentation deiner jeweiligen Sprache wirst du es wohl nicht finden. Wer das nicht versteht, hat sich momentan zu große Ziele gesetzt.


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • Wieso sollte er eine ganze Klassenbibliothek laden, wenn er doch eindeutig nur den Sleep-Befehl brauchen wird? Absolut unnütz und kontraproduktiv.
    Deutlichere Beispiele als die aus den MS-Dokumentation deiner jeweiligen Sprache wirst du es wohl nicht finden. Wer das nicht versteht, hat sich momentan zu große Ziele gesetzt.

    Erspart eine Menge an Arbeit, als wenn man jedes Mal Threading.Thread.Sleep() eingibt. Größer wird das Programm dadurch nun auch nicht.
    Programmierer sind für gewöhnlich faul (ich auch :P) und schaffen sich so eben Vereinfachungen.


    @LeijaT:

  • Programmierer sind für gewöhnlich nicht faul, sondern geizig. Und primär geizen sie an Kapazitäten, die sie in den meisten Fällen sowieso schon nicht haben und peripher an Tastenanschlägen. Also sei doch bitte so gut und bringt Neulingen nicht direkt so nen Mumpitz bei. Wenn du faul und zeitgleich verschwenderisch mit deinen Kapazitäten sein möchtest, ist das in Ordnung, aber der nächste guckt sichs dann von dir ab und verbaut sich ne Menge Zeit, die er dann damit verbringen darf, es irgendwann richtig zu lernen.


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • Da hätten wir beispielsweise Rechenleistung, Kalkulationspuffer, Arbeitsspeicherbelastung.. reicht das, oder soll ich weiter machen?


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • Prinzipiell belastet alles, was ein Programm tut, entweder die CPU, die HDD oder den RAM. Und prinzipiell will man sowas vermeiden, wenn es nicht nötig ist ;)


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • Neue Frage:

    Mit welcher Funktion kann ich Dateien von einem Link downloaden?


    Bestehende Frage:


    Also ich habe das mit dem "Sleep"-Befehl jetzt so eingebaut:



    Aber am Anfang wartet er ein bisschen, dann geht der Ladebalken von 3% auf 100% und gibt mir die Fehlermeldung. (Fehlermeldung sollte kommen)
    Warum?

  • Dann sag mir bitte auch, was Du unter Kapazitäten verstehst. Ich habe es soeben nochmal getestet, das Programm ist mit oder ohne Import gleich groß. Also verstehe ich nicht, was Du mir damit sagen willst.

    Wenn das so ist, habe ich was neues gelernt und widerrufe meine Sätze zu dem Import.

    Wieder einmal hat das selbstsichere Auftreten eines Halbwissenden den wahrheitssuchenden soweit verunsichert, dass er alles frisst, auch, wenn er selbst bereits Versuche dazu angestellt hat.
    Ich kann dem Leser dieses Posts nur empfehlen, dass, wenn man sich nicht sicher ist, ob jemand anderes die Wahrheit sagt (und im Internet, sollte man bedenken, dass die meisten Quellen unsicher sind), man mit den einem selbst zur Verfuegung stehenden Methoden und Wissen zu ueberpruefen, ob das geschriebene tatsaechlich der Wahrheit entspricht.
    So manches mal war ich selbst fast ueberzeugt von (aber nach wie vor kritisch gegenueber) einer Aussage, nachdem jemand auf mich ein gequatscht hat und als ich es ueberprueft habe, hat sich manches mal das Gegenteil herausgestellt.


    John_Hunter hat ja bereits Versuche, leider anscheinend nur anhand der Dateigroesse, durchgefuehrt. Ich empfehle ein Programm zum Ueberpruefen von Datei-differenzen zu suchen. Das in Windows integrierte 'fc' (Anwendung: fc "C:\datei1.txt" "C:\datei2.txt") kann bei kleineren Unterschieden bereits helfen.


    Die meisten Programmiersprachen (mir ist keine bekannt welche dies nicht tut) laden die kompletten Bibliotheken, auch, wenn nur eine Funktion daraus gebraucht wird und, ob man nun in den .NET Sprachen oben 'imports Threading.Thread' und unten 'Sleep', oder direkt unten 'Threading.Thread.Sleep' schreibt bleibt sich vollkommen egal. Bestenfalls verringert sich die Zeit fuer das Kompilieren, aber auf dem System des Endnutzers ist kein Unterschied.
    Die bei meinen Versuchen gefundenen Unterschiede, die 'fc' mir ausgegeben hat, waren lediglich Unterschiede, die bei jedem neu-kompilieren auftreten. Wie eine neu generierte GUID und zwei aktualisierte Zeitstempel. Alles andere war vollkommen identisch.
    Wenn man also keine Ahnung hat.. ihr wisst ja. ;)
    (Ausprobieren und lernen, bis man Ahnung hat. Dann erst mitreden.)


    Auch, ob man nun XML Dateien, ini Dateien, oder Registry keys verwendet ist meist Hauptsaechlich Geschmackssache/Einstellungssache. Wenn man auf jedes Byte an Ressourcen Wert legt sind Ini-Dateien unter Windows oftmals sogar weit besser, als XML-Dateien. XML-Dateien nehmen (bei kleineren Datenmengen) mehr Speicherplatz auf der Festplatte ein, da man Tags zum oeffnen und schliessen braucht und man braucht zusaetzlichen Programmcode (Quelltext/Bibliotheken), um XML-Dateien zu verarbeiten. In Ini-Dateien hat man hingegen meist keine Tags zum schliessen und unter Windows braucht man nichtmal zusaetzlichen Quelltext, oder Bibliotheken, um die Daten aus der Datei heraus zu filtern, da, die von jedem Programm genutzte kernel Bibliothek bereits die Funktionen zum Verarbeiten von Ini-Dateien beinhaltet. (GetPrivateProfile-Funktionen, wie GetPrivateProfileString())


    Aber am Anfang wartet er ein bisschen, dann geht der Ladebalken von 3% auf 100% und gibt mir die Fehlermeldung. (Fehlermeldung sollte kommen) Warum?

    Der Ladebalken sollte von 3 auf 90 auf 100 gehen. Das liegt daran, dass es so Programmiert wurde. ProgressBar1.Value (der Wert des Prozessbalkens) wird waehrend der gesamten Wartezeit in dem Directory.Exists("C:\Maik")-Block nicht veraendert. Ausserdem wird die config.ini Datei in dem Directory.Exists-Block nicht erstellt. Es werden nur die Ordner erstellt, weswegen die Fehlermeldung kommt, sofern C:\Maik erst erstellt werden muss.

  • SBIKA: Danke dir für deine, möchte ich jetzt hier mal meinen, weise Antwort. Werde ich mir auf jeden Fall merken!


    Ich habe übrigens das mit der ProgressBar jetzt behoben, ist mir garnicht aufgefallen... ^^ Aber was mir im Nachhinein aufgefallen ist, nachdem auch die ProgressBar ihre Arbeit richtig macht, dass der Text sich nicht verändert. Kannst du mir sagen warum?

    Hier mal der überarbeitete Code:


    Und um direkt zum Problem Nr. 2 zu kommen:

    :D

    Wie kann ich den eingestellen Pfad zum downloaden der Bilder mit dem Bildnamen verbinden?
    Habe es so gemacht:

    Code
    Dim str1 As String = INI_ReadValueFromFile("Optionen", "DownloadPfad", "", "C:\Maik\Handy Wallpaper\config.ini")
        	My.Computer.Network.DownloadFile("http://forum.sa-mp.de/wcf/images/tumek_breadfish/logo.png", str1 & "logo.png")


    Das str1 & "logo.png" am Ende: str1=Der Pfad, der in den Einstellungen eingestellt und abgespeichert wurde. Das andere ist der Bildname, wird ja benötigt.
    Aber das funktioniert nur wenn ich zum Beispiel den ganzen Link zusammen eingebe, so z.B.: "http://forum.sa-mp.de/wcf/images/tumek_breadfish/logo.png"


    Versteht jemand was ich meine? Wie kann ich das so machen?

  • Aber was mir im Nachhinein aufgefallen ist, nachdem auch die ProgressBar ihre Arbeit richtig macht, dass der Text sich nicht verändert. Kannst du mir sagen warum?

    http://stackoverflow.com/quest…date-label-text-in-vb-net
    Falls die Englisch Kenntnisse nicht so gut sind: Das Label wird nicht nach jeder kleinen Aenderung neu 'gemalt', sondern nur als 'dreckig' markiert, sodass es beim naechsten Fenster-Update neu gezeichnet wird. Vergleichbar mit den Bildern pro Sekunde, die man in Spielen hat, es kann sich viel waehrend eines Frames/Bildes aendern, aber anstatt das aktuelle Bild fuer jede kleine Aenderung (einmal fuer Physik, einmal fuer Kontroll-Kommandos vom Benutzer, einmal fuer ..., und das fuer jedes einzelne kleine Objekt aus dem das Bild besteht) zu aktualisieren/neu zu berechnen, wird das Bild erst nach Verarbeitung aller Aenderungen aktualisiert.


    Um auch waehrend laengerer Operationen immer ein aktuelles Bild zu haben, kann man entweder Multi-Threading anwenden, oder (der einfachere Weg), dem Nutzer-Interface-Element mitteilen, dass es sich sofort neu malen soll. Unter Visual Basic/.NET teilt man dies dem Nutzer-Interface-Element durch die Refresh() Funktion mit. Wenn also nun nach jedem Label1.Text = 'Test' ein Label1.Refresh() eingefuegt wird, sollte der Text sich direkt aktualisieren.


    Fuer die Multi-Threading Variante gibt es unter dem obigen Link ebenfalls ein Beispiel, welches mit dem System.ComponentModel.BackgroundWorker realisiert wurde. Ein Beispiel fuer diese Methode (mit scheinbar komplettem Quelltext) ist hier zu finden: http://msdn.microsoft.com/de-d…cs-lang=vb#code-snippet-3
    Ich empfehle, aber die Refresh() Methode, da diese fuer Programmier-Anfaenger leichter zu verstehen/umzusetzen ist.


    Wie kann ich den eingestellen Pfad zum downloaden der Bilder mit dem Bildnamen verbinden?
    Habe es so gemacht:
    ...
    Aber das funktioniert nur wenn ich zum Beispiel den ganzen Link zusammen eingebe, so z.B.: "http://forum.sa-mp.de/wcf/images/tumek_breadfish/logo.png"

    Enthaelt str1, denn die korrekte Zeichenfolge (http://forum.../tumek_breadfish/)? Wenn die ini-Datei erst erstellt werden musste enthaelt diese noch keine Daten. Man sollte also, bei fehlender ini-Datei die Datei mit Standard-Werten fuellen.


    Ob die korrekte Zeichenfolge enthalten ist, kann man zur Laufzeit durch Debugging herausfinden. Die einfachste Form vom Debugging ist die Textausgabe. Wenn die Applikation in Visual Studio gestartet wird, zeigt Visual Studio ein 'Output'/'Ausgabe' Fenster am unteren Bildschirmrand an. In dieses kann man mit der in System.Diagnostics.Debug enthaltenen Funktion Print(), oder einer der in der selben Klasse (Debug) enthaltenen Write* Funktionen, Text ausgeben lassen. Ansonsten kann auch eine einfache MessageBox als Textausgabe seinen Nutzen erfuellen.
    Mehr Informationen zum Debugging: http://msdn.microsoft.com/de-d…ary/vstudio/awtaffxb.aspx


    Fuer Anfaenger sicherlich ein wenig komplizierter, als das einfache Debugging durch Textausgabe ist die Nutzung des (auch in der Express Version von Visual Studio integrierten) Debuggers: http://msdn.microsoft.com/de-d…ary/vstudio/k0k771bt.aspx (Habe den Link nur der Vollstaendigkeit wegen angegeben. Kann diesen aber nach kurzem ueberfliegen einem Anfaenger nicht empfehlen. Gibt sicherlich weitaus einfacher erklaerte und auf Visual Basic zugeschnittene Tutorials zum Debugger. Weil es beim Visual Basic/.NET Debugging oft/Hauptsaechlich um die Bedienung der Oberflaeche von Visual Studio geht, bzw. das zurechtfinden in selbiger essentiell ist, sind eventuell auch Video/Bild-Tutorials an dieser Stelle nicht falsch.)

  • SBIKA: Danke dir, wieder einmal! :love:


    Das mit dem Refresh() funktioniert jetzt auch alles wie gewollt. Eine Frage allerdings noch dazu: Ist es möglich, dass die Progressbar nicht so ruckartig von % zu % geht sondern so "fährt"? Verstehst du was ich meine?


    Zu dem 2. Problem: Ja, das ist auch so wenn schon ein Pfad eingegeben wurde. Ich schaue einfach nach, ob der richtige Pfad in der Datei abgespeichert ist. Oder was wolltest du mir damit sagen?



    Gruß, Maik H.


    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    Neues Problem
    (trotzdem bitte auch altes beachten)


    Mir ist gerade noch eine Frage in den Sinn gekommen. Undzwar wollte ich fragen, ob ich auch z.B. Bilder (die ich selbst gemacht habe mit PS) als Buttons benutzen kann? Zum Beispiel mache ich mir extra ein Button-Bild mit PhotoShop und platziere das in der Form wie ein ganz normales Bild, nur eben da wo es hin soll. Und dann, wenn man dadrauf klickt wird die entsprechende Funktion ausgeführt. Geht das?



    //push :(

  • Mir ist gerade noch eine Frage in den Sinn gekommen. Undzwar wollte ich fragen, ob ich auch z.B. Bilder (die ich selbst gemacht habe mit PS) als Buttons benutzen kann? Zum Beispiel mache ich mir extra ein Button-Bild mit PhotoShop und platziere das in der Form wie ein ganz normales Bild, nur eben da wo es hin soll. Und dann, wenn man dadrauf klickt wird die entsprechende Funktion ausgeführt. Geht das?


    Du hast 2 Möglichkeiten, entweder du bindest es als Bild ein und lässt dann das entsprechnde Ereignis / Event laufen - doppelklick auf das Bild - oder du lädst das Bild als Buttonhintergrund - doppelklick darauf und das Ereignis wird hinzugefügt.

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Danke dir, @BlackAce: ! :love:


    Frage 1 besteht weiterhin:
    Das mit dem Refresh() funktioniert jetzt auch alles wie gewollt. Eine Frage allerdings noch dazu: Ist es möglich, dass die Progressbar nicht so ruckartig von % zu % geht sondern so "fährt"? Verstehst jemand was ich meine?