Update Benachrichtigung Nur Anzeigen wenn ein neues Update verfügbar ist

  • VB.NET
  • .NET 4.5

Es gibt 41 Antworten in diesem Thema. Der letzte Beitrag () ist von Akanel.

    Wenn der obige Vergleich nicht klappt, dann behaupte ich, ist entweder CurrentVersion oder NewsText kein String. Setze doch mal einen Haltepunkt auf die Zeile und gucke, was in den beiden Variablen drin steht.
    Btw. Panel3.Visible ist ein boolean und der Vergleich CurrentVersion <> NewsText ergibt auch einen Boolean. Du kannst auch Panel3.Visible = 3<>“3“ vergleichen, das ergibt auch einen Boolean und Panel3 ist dann Visible = False.
    "Hier könnte Ihre Werbung stehen..."
    Dann habe ich mich Falsch ausgedrückt.

    Nein es geht hier nicht um einen Updater, oder teil code eines Updaters!
    Mit dem Code:

    VB.NET-Quellcode

    1. MessageBox.Show("derzeitiger Versionsstring: »" & CurrentVersion & "«, Versionsstring auf dem Server: »" & NewsTxt & "«. Diese beiden Strings sind" & If(CurrentVersion = NewsTxt, "", " NICHT") & " gleich.")

    Kommt:


    :) Die Abfrage Klappt, jetzt muss das eben statt in eine msgbox in ein panel untergebracht werden, welches NUR Visible ist wenn die Versionen (Strings) ungleich sind.

    PS: Sorry ja ich habe Den Code der Form1 wieder entfernt, war nicht Provokant, nur hätten wir uns dann wieder in den Haaren bei dingen die nicht relevant sind :-|
    Was meinst du mit Code Block richtig Instanzieren? Visual Studio 2019 Möchte mittlerweile Bezeichner mit Großen Anfangsbuchstaben. Me. und My Kann man sogar ganz weglassen. Die werden bei mir anders wie hier nicht Blau Angezeigt, sondern Grau mit einer Grünen Linie, (Überflüssig). Genau wie IO. Wenn ich ein älteres VBS verwende hast du Recht. Da hätte ich mit Top Most Arbeiten können. aus btn wird Btn usw..

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Andy2002“ ()

    Andy2002 schrieb:

    Die Abfrage Klappt, jetzt muss das eben statt in eine msgbox in ein panel untergebracht werden, welches NUR Visible ist wenn die Versionen (Strings) ungleich sind.

    Ja und? das haben wir ja bereits mehrfach gezeigt....

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim CurrentVersion As String = "03.01.09.05"
    3. Dim OldVersion As String = "03.01.09.04"
    4. 'Strings sind NICHT gleich
    5. Panel1.Visible = CurrentVersion <> OldVersion
    6. 'Strings sind gleich
    7. Panel2.Visible = CurrentVersion = OldVersion
    8. End Sub


    Hänge Dir ein Beispiel an... verändere die Strings und du siehst das es klappt!
    Dateien
    • WindowsApp100.zip

      (11,72 kB, 16 mal heruntergeladen, zuletzt: )
    "Hier könnte Ihre Werbung stehen..."
    Ich sagte nix von

    Andy2002 schrieb:

    Code Block richtig Instanzieren
    , sondern von Dialoge richtig instanziieren. Updater.Show ist so, wie Du es zeigst, ein no go. Das steht auch in dem Thread namens "Dialoge richtig instanziieren", der in Post#20 blau markiert und als Link hinterlegt ist. Aber das ist nur eine weitere Baustelle. Schau einfach da mal rein, sobald Du den Kopf dafür hast. Dann weißt Du, was ich meine.

    btw: Wie kann es sein, dass auf dem Server eine ältere Version (3.01.09.05) als auf dem Client ist (3.01.09.06)?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    @VaporiZed Ja das schau ich mir mal an, sobald wie Möglich. Aber warum ist das ein Nogo? Das wird so in der Schule genau so vermittelt. Neue Form = Show() Label Panel, entweder Hide und Show oder Visible True und False

    Das mit den Unterschiedlichen Versionen also das auf dem Server die ältere liegt, liegt einfach daran, weil ich die neue Version an der ich ja noch Arbeite noch gar nicht Fertig habe. (Wegen nen Panel mach ich kein Update) :)
    @'MichaHo Es ist einfach Unglaublich, meine Blockade hat selbst das einfachste nicht zugelassen.

    VB.NET-Quellcode

    1. Dim CurrentVersion As String
    2. Dim NewsTxt As String
    3. 'Strings sind NICHT gleich
    4. Panel3.Visible = CurrentVersion <> OldVersion
    5. 'Strings sind gleich
    6. Panel3.Visible = CurrentVersion = OldVersion = False
    7. Label18.Text= CurrentVersion
    8. Label20.Text= NewsTxt


    So hab ich es nun, und es Funktioniert. Einfach Effizent, ohne Schnickschnack.

    Vielen dank an euch beiden. Und wegen den Dialogen schau ich mir den Post noch mal genauer an. Auf Buch und Lehrer ist wohl kein verlass.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Andy2002“ ()

    Auauau. Wenn es in der Schule vermittelt wird, dann zweifel ich jetzt schon an den Lehrenden. Updater.Show() ist eine Abwärtskompatibilität für VB6-Nutzer, der sich ein Einsteiger nicht bewusst ist. Und wenn man es dann auch noch falsch beigebracht bekommt, dann ist's es aus. Das Problem ist, dass Updater.Show() 1. Zugriff auf etwas nimmt, von dem man nicht erwartet, dass es das ist, was man glaubt und 2. es einem einen Aufruf erlaubt, der mit anderen Objekten nicht möglich ist. Denn Updater an sich ist der Name einer Klasse, also effektiv ein Bauplan. Und mit dem Bauplan eines Autos kann man schlecht durch die Gegend fahren. Man muss erstmal anhand des Bauplans ein Auto erbauen lassen. Mit dem kann man dann fahren. Dass Du mit Updater.Show() arbeiten kannst, liegt - wie gesagt - an Abwärtskompatibilität zu VB6. Hab ich alles hier zusammengefasst: Warum »Form1.Show« und Co. einem irgendwann ins Bein schießen. Jetzt könntest Du natürlich sagen: Who cares? Aber so arbeitest Du mit falsch beigebrachten Dingen, von denen Du weder weißt, warum sie funktionieren, noch wie man es richtig macht. Aber wie gesagt: Das ist eine andere Baustelle und Deine eigene Wahl.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Achso weil ich der Form den Namen Updater gegeben habe, könnte dies zu Problemen führen?

    Edit: Ja das mit Threads da hatte ich genau das was du im Link im Post 26 Beschreibst. :) Hab nun auch Buttons und Labels unbenannt, Auch aus Updater.show hab ich nun My.Forms.UpManager.Show gemacht. Also Name und Aufruf geändert.
    Wobei mir VBS 2019 hier wieder sagt das My.Forms nicht notwendig ist und diese Ausgraut.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Andy2002“ ()

    Andy2002 schrieb:

    Panel3.Visible = CurrentVersion = OldVersion = False


    Ähhh what? nochmal,

    Das Panel3.Visible wartet auf einen boolean Wert, den übergibst Du mit deinem Vergleich, wenn Du nun CurrentVersion = NewsTxt übergibst, gibt es 2 Möglichkeiten, die beiden Strings stimmern überein, dann kommt True zurück und wird Panel3.Visible zugwiesen oder es kommt False zurück wenn sie NICHT übereinstimmen.

    Von daher reicht:

    VB.NET-Quellcode

    1. Dim CurrentVersion As String = "der Text"
    2. Dim NewsTxt As String = "der Text"
    3. Panel3.Visible = CurrentVersion = NewsTxt 'Panel3 wird angezeigt
    4. Label18.Text= CurrentVersion
    5. Label20.Text= NewsTxt
    6. CurrentVersion = "neuer Text"
    7. Panel3.Visible = CurrentVersion = NewsTxt 'Panel3 wird NICHT angezeigt
    "Hier könnte Ihre Werbung stehen..."
    Ich will nicht zu sehr vom eigentlichen Thema weggehen, aber das kann ich nicht so stehen lassen:

    Andy2002 schrieb:

    Auch aus Updater.show hab ich nun My.Forms.UpManager.Show gemacht.
    Der Compiler hat schon recht, das My.Forms. kannst Du weglassen. Denn beides ist effektiv nur die VB6-Variante. Aber was ich meine, steht bei "Dialoge richtig instanziieren" drin, ich werde jetzt nicht schreiben, wie es richtig geht. Das wäre redundant.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Ja das hab ich mir schon gedacht, Du hattest sicherlich Update.Show und Anschließend Me.Close im Auge,
    Aus

    VB.NET-Quellcode

    1. Update.Show()
    2. Me.Close()

    wurde nun

    VB.NET-Quellcode

    1. UpManager.Show(Me)[s]
    2. [/s]

    Me.Close() wurde entfernt.

    VB.NET-Quellcode

    1. @'MichaHo'
    2. Was ich bei deinen Beispiel verwirrend finde ist
    3. [vbnet]
    4. Dim CurrentVersion As String = "der Text"
    5. Dim NewsTxt As String = "der Text"

    Denn ="der Text" ist überflüssig. Da CurrentVersion und NewsTxt bereits den "Text" beinhalten.
    Und was soll

    VB.NET-Quellcode

    1. CurrentVersion = "neuer Text"

    Bedeuten??
    CurrentVersion kommt aus My.Ressorces.Version (version.txt) und NewsTxt kommt vom Webserver, ebenfalls version.txt, nur das dort eben die neue Version als String drin steht.CurrentVersion = "neuer Text"


    Also hier mal die Komplette Sub damit man es besser versteht, wie die Lösung nun aussieht, und Funktioniert.

    VB.NET-Quellcode

    1. Private Sub Startparameter()
    2. Dim NewsTxt As String = Nothing
    3. Dim CurrentVersion As String
    4. Using web = New WebClient() With {.Proxy = Nothing}
    5. NewsTxt = web.DownloadString("http://andy2002.de/user/AndyNET/Locales/version.txt")
    6. End Using
    7. CurrentVersion = My.Resources.version
    8. 'Strings sind NICHT gleich
    9. Panel3.Visible = CurrentVersion <> NewsTxt
    10. 'Strings sind gleich
    11. Panel3.Visible = CurrentVersion = NewsTxt = False 'Lasse ich das False weg wird doch nirgends dem Panel gesagt wann es Visible=False sein soll oder irre ich mich da?
    12. Label18.Text = CurrentVersion
    13. Label20.Text = NewsTxt
    14. GC.Collect()
    15. End Sub


    *Vollzitat entfernt* ~NoFear23m

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „Nofear23m“ ()

    Das war ein Beispiel um zu verdeutlichen wie ein StringVergleich ein Panel ein oder ausblenden kann.
    wenn ich solche Tips bekomme, erstelle ich ein neues Projekt, füge es dort ein und teste es durch, dann geht mir meist ein Licht dabei auf!

    an deinem Code oben sieht man nämlich das du es nicht verstanden hast, genauso wie die Hinweise zu FromWieAuchImmer.Show()

    erstelle eine neue Instanz von deiner Form und rufe DIESE Instanz auf, DAS ist das, was dir alle hier sagen wollten!

    und auf die Gefahr hin, das ich mich wiederhole, Panel3.Visible = CurrentVersion = NewsTxt ist die einzige Zuweisung die du benötigst! Denn abhängig vom Vergleich CurrentVersion = NewsTxt wird das Panel entweder angezeigt oder eben nicht
    "Hier könnte Ihre Werbung stehen..."
    Hi, nein ein neues Projekt hab ich Natürlich Nicht erstellt. Das wird hart direkt im Aktiven Problem getestet. :)
    Hmm instanz meinst du so was Me.Form1 As New Form1 bla bla oder was? -> Ne im Ernst da muss ich mich noch rein Lesen, im Moment macht das ja VBS für mich, und wenn das Programm keine Instanzen Anlegt, werden diese auch nicht Benötigt. (Meine Meinung)

    Zum Panel3 Vergleich. Also Wenn Panel3.Visible gleich ist also deren inhalt wird dies Automatisch Ausgeblendet? Bzw Panel3.Visible =Inhalt =Inhalt 2 dann weiß das Panel Automatisch das es nicht Angezeigt werden soll.. Hab das False raus genommen! Aber die Funktionsweise WARUM das so klappt erschließt sich mir nicht, wie kann ein Panel wissen wann es Visible ist und wann nicht?
    Denn ob der verglichene Inhalt ungleich oder gleich ist, sollte ein Panel doch gar nicht Interessieren. (Kurios)
    Schau dir doch den Typ von Visible mal an, dann kommst du drauf (ich hatte es aber paar posts vorher schon geschriebn)

    Panel3.Visible erwartet einen Boolean, also Panel3.Visible = False oder True, weil Visible heißt Sichtbar.
    Ein String Vergleich gibt einen Boolean zurück, der direkt an Panel3.Visible übergeben wird, daher weis das Panel ob es sichtbar sein soll oder nicht.

    Edit:
    Vielleicht wird es hiermit deutlicher:

    VB.NET-Quellcode

    1. 'Langschreibweise
    2. Dim SichtBar As Boolean
    3. If CurrentVersion = NewsTxt Then
    4. Sichtbar = True
    5. Else
    6. Sichtbar = False
    7. End If
    8. Panel3.Visible = SichtBar
    9. 'Kurzschreibweise
    10. Panel3.Visible = CurrentVersion = NewsTxt
    "Hier könnte Ihre Werbung stehen..."

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „MichaHo“ ()

    MichaHo schrieb:

    Panel3.Visible = CurrentVersion = NewsTxt
    Ist in VB.Net für Anfänger vielleicht etwas schwer zu verstehen.
    Die beiden = machen nicht dasselbe.
    Das erste ist eine Zuweisung und das zweite ist ein Vergleichs-Operator.

    In C# ist das sichtbarer gelöst:
    Panel3.Visible = (CurrentVersion == NewsTxt);.
    Da sind es verschiedene Operatoren.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Wieso nicht einfach direkt die Version Klasse von .NET verwenden? Das macht das vergleichen doch viel leichter.

    C#-Quellcode

    1. string newsTxt = String.Empty;
    2. using (var web = new WebClient())
    3. {
    4. web.Proxy = null;
    5. newsTxt = web.DownloadString("http://andy2002.de/user/AndyNET/Locales/version.txt"); // Hier liegt die Datei
    6. }
    7. if(!String.IsNullOrEmpty(newsTxt))
    8. {
    9. Version latestVersion = new Version(newsTxt);
    10. Version installedVersion = new Version(Application.ProductVersion);
    11. if(installedVersion < latestVersion)
    12. {
    13. // POP UP ANZEIGEN
    14. }
    15. }


    LG
    Das Lustige ist wenn ich

    VB.NET-Quellcode

    1. Panel3.Visible = CurrentVersion = NewsTxt

    Schreibe BLEIBT das Panel Sichtbar, obwohl es nach den Erläuterungen ja nicht sichtbar sein sollte. ( Gerade mal getestet, gestern keine Zeit mehr dafür gehabt.)
    Schreibe ich hingegen:

    VB.NET-Quellcode

    1. Panel3.Visible = CurrentVersion = NewsTxt = False

    Bleibt es Unsichtbar und zeigt sich wie gewünscht nur wenn

    VB.NET-Quellcode

    1. Panel3.Visible = CurrentVersion <> NewsTxt

    Eintritt.
    Mein wohl letzter Beitrag - ich sag nur Grundlagen der Programmierung. Und eigentlich hat das MichaHo in Post#33 schon genau erklärt. Aber anscheinend ist es nicht angekommen.

    VB.NET-Quellcode

    1. Panel3.Visible = CurrentVersion = NewsTxt = False

    ist das gleiche wie

    VB.NET-Quellcode

    1. Panel3.Visible = CurrentVersion <> NewsTxt

    Zur Erläuterung: Es soll festgelegt werden, ob Panel3 angezeigt werden soll oder nicht. Das wird festgelegt durch das Setzen von Panel3.Visible. Das kann entweder True oder False sein. Also wahr (das Panel ist sichtbar) oder falsch ("Panel3 ist sichtbar ist falsch"), also effektiv unsichtbar. Welchen Zustand die Panel-Sichtbarkeit hat, wird durch den ganzen Gesums rechts vom (ersten) = festgelegt.
    Steht da also nur True, ist das Panel sichtbar. Steht da nur False, dann ist es unsichtbar. Steht da was anderes, wird das von links nach rechts ausgewertet. Und am Ende ergibt sich als Gesamtergebnis ein True oder False.

    VB.NET-Quellcode

    1. Panel3.Visible = CurrentVersion <> NewsTxt
    Die Sichtbarkeit von Panel3 ergibt sich aus der Aussage, ob CurrentVersion <> NewsTxt wahr oder falsch ist. Wenn beide Strings gleich sind, also CurrentVersion enthält den Wert "3.01.09.19" und NewsTxt auch "3.01.09.19", dann sind beide Strings gleich. Da aber der Code heißt Panel3.Visible = CurrentVersion <> NewsTxt, ergibt die Aussage CurrentVersion <> NewsTxt ein False, daher ist Panel3 nicht sichtbar. Wären beide Strings nicht gleich, wäre die Aussage CurrentVersion <> NewsTxt korrekt, ergibt also wahr und diese Endaussage wird für den Panel-Sichtbarkeitszustand hergenommen. Panel3 wird dann also sichtbar, wenn beide Strings ungleich sind.
    Nun zu

    VB.NET-Quellcode

    1. Panel3.Visible = CurrentVersion = NewsTxt = False
    Zuerst wird geschaut, was die Aussage CurrentVersion = NewsTxt ergibt. Wenn beide Strings gleich sind, ergibt das ein True. Danach wird diese Aussage für den nächsten Teil hergenommen. Aus CurrentVersion = NewsTxt wird bei gleichen Strings ein True und effektiv steht dann: Panel3.Visible = True = False. Es wird also jetzt geschaut, ob True das gleiche wie False ist. Ist es nicht. Die Aussage True = False ist falsch, ergibt also False Und das ist das "Endergebnis" für die Panel3-Sichtbarkeit. Sind beide Strings aber nicht gleich, ergibt im ersten Schritt für Panel3.Visible = CurrentVersion = NewsTxt = False das CurrentVersion = NewsTxt ein False, danach wird dieses False mit dem 2. False verglichen, also aus Panel3.Visible = CurrentVersion = NewsTxt = False macht der Compiler als Zwischenschritt: Panel3.Visible = False = False. Und dann wird die Aussage ausgewertet: False = False. Da diese Aussage wahr ist, wird aus False = False ein True. Und das ist dann das Endergebnis für die Panelsichtbarkeit. Es wird sichtbar.

    Ich bin so dreist und fordere: Durchlesen, verstehen, anwenden können. Und fertig. Weitere Nachfragen sehe ich dann schon als Trollalarm.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.