NotifyIcon.Icon anhand von Abhängigkeiten

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Yanbel.

    NotifyIcon.Icon anhand von Abhängigkeiten

    Hallo zusammen,

    bei meinem Projekt Akkuprozentanzeige in der Taskbar hakt es am finalen Schritt :S ...

    Ziel des Programmes ist dass immer die aktuelle Prozentanzeige im System Tray angezeigt wird - dafür habe ich satte 100 ICOs erstellt, jedes für den entsprechenden Akkuwert. Sicherlich nicht die schickste Lösung, aber es funktioniert ja erstmal. Abhängig vom aktuellen Akkustand, der in einer Variable zwischengespeichert wird, soll nun regelmäßig (Timer Ticks) das entsprechende ICO aus den Programmressourcen als NotifyIcon.Icon festgelegt werden. Der Pfad zu dem Bild wird aus verschiedenen Abschnitten zusammengebaut --> Der Inhalt des finalen Strings mit dem Pfad heißt dann "NameOfPercImage" und beinhaltet beispielsweise folgenden Text: "My.Resources._83" für 83% Akkustand.

    So weit, so gut. Nun lässt mich VS aber nicht diesen Pfad als "Dateinamen" verwenden. Also
    NotifyIcon.Icon = NameOfPercImage
    funktioniert nicht. (Code BC30311)

    Wie verfahre ich am besten? Ich möchte eigentlich ungerne 100 If's machen, um auf jeden Akkustand zu prüfen. Das ist ja nicht gerade schlank und kostet ja nur unnötig Rechenleistung.

    Hat da jemand ein Ass im Ärmel? :)

    Max
    Gruß, Max!
    Hi,

    zunächst natürlich vielen Dank für deine Antwort. Da ich leider C# Newbie bin und generell kein allzu erfahrener Entwickler habe ich allerdings Probleme das ganze jetzt komplett in Visual Basic.NET zu übertragen. Zumal ich diese ganzen Bilder und die vollständige Programmlogik schon fertig habe, bis eben auf diese finale Zeile wie sie oben beschrieben ist. Ich würde also erstmal gerne das so fertig stellen, bevor ich mir das andere sicherlich irgendwann auch mal konkret angucken möchte.

    Daher meine Frage nochmal generell, ob mir jemand für genau diese Situation erklären kann wie ich das oben beschriebene Problem lösen kann?

    Danke schon mal,

    Max
    Gruß, Max!
    Hier das konnte ich auf die schnelle programmieren. Ist sehr schlicht, aber funktionional, hübsch machen musst du es die selber. Über AkkuAnzeige.Value kannst du einen beliebigen Prozentwert zwischen 0 und 100 eintragen und die Anzeige passt sich an.

    PS: Nicht wundern über die unnötigen Regions und Imports im Control. Ich habe eine Standardvorlage für neue Controls und den überflüssigen Kram nicht entfernt ;)
    Dateien
    • AkkuAnzeige.zip

      (45,14 kB, 85 mal heruntergeladen, zuletzt: )


    Ein Computer wird das tun, was du programmierst - nicht das, was du willst.
    @Yanbel Machst Du Option Strict On.
    Visual Studio - Empfohlene Einstellungen
    Integer-Division in (Visual)Basic geht so: \
    Und 100% kann er mit Integer-Division nicht, das solltest Du überarbeiten.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

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

    Moin @RodFromGermany,

    bastelst du ein Convert um die Rechnung und schon ist alles tutti. Wie bereits beschrieben war das in 5 Minuten mit heißer Nadel gestrickt. Hübsch machen muss er das selbst.

    Ersetze (2x):

    VB.NET-Quellcode

    1. RectAkku = New Rectangle(2, 2 + (Height - 4) / 100 * (100 - Value), Width - 4, ((Height - 4) / 100) * Value)


    Mit (2x):

    VB.NET-Quellcode

    1. RectAkku = New Rectangle(2, CInt(2 + (Height - 4) / 100 * (100 - Value)), Width - 4, CInt(((Height - 4) / 100) * Value))


    Und lassen wir es lieber in dieser Schreibweise, dann kann jeder die Rechnung nachvollziehen. ;)


    Ein Computer wird das tun, was du programmierst - nicht das, was du willst.