myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » GUI: Windows-Forms » Wieso wird das Icon in Taskleiste nicht angezeigt, wenn ich über die Desktop-Veknüpfung starte?
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Wieso wird das Icon in Taskleiste nicht angezeigt, wenn ich über die Desktop-Veknüpfung starte?

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
WMenzel WMenzel ist männlich
myCSharp.de-Mitglied

Dabei seit: 05.03.2012
Beiträge: 20
Entwicklungsumgebung: C#, C++, Atmel-Studio, Arduino
Herkunft: Eisenhüttenstadt


WMenzel ist offline

Wieso wird das Icon in Taskleiste nicht angezeigt, wenn ich über die Desktop-Veknüpfung starte?

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,
ich habe ein C'-Programm erstellt, mit dem ein Meßsystem abgefragt wird. Wenn die Verbindung zum Messgerät und die Hardware ok sind, wird die Anwendung minimiert ausgeführt. Wenn alle Messwerte i.O. sind, soll als Icon in der Taskleiste ein großer grüner Punkt, bei Fehlern ein roter Punkt erscheinen (sieht dann aus wie eine LED). Das funktioniert in der IDE beim Debug einwandfrei, auch wenn ich .EXE direkt vom Ort starte, wo sie abgelegt ist. Starte ich dagegen über eine Desktop-Verknüpfung, erscheint nur das Standardsymbol.
Wer kann da helfen?
Danke schon mal

Gruß
Wolfgang
Neuer Beitrag 24.09.2020 07:37 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.736
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Wie zeigst du denn die Icons an (bzw. woher komme die, als Ressource oder aus einer Datei)?
Kann es sein, daß bei der Verknüpfung dann das aktuelle Arbeitsverzeichnis (working directory) nicht stimmt?

PS: Du meinst C#. ;-)

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Th69 am 24.09.2020 11:15.

Neuer Beitrag 24.09.2020 11:14 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
WMenzel WMenzel ist männlich
myCSharp.de-Mitglied

Dabei seit: 05.03.2012
Beiträge: 20
Entwicklungsumgebung: C#, C++, Atmel-Studio, Arduino
Herkunft: Eisenhüttenstadt

Themenstarter Thema begonnen von WMenzel

WMenzel ist offline

Icon in der Taskleiste

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo, ja ich meinte c# natürlich. Danke für die Korrektur.
Also ich wechsle das Icon mit "Icon = new Icon(StartPfad + "durchfluss_grünerpunkt.ico");
, wobei der Startpfad ist, wo die EXE liegt. Die Verknupfung auf dem Desktop greift doch auch auf diese Verzeichnis zu, so meine Überlegung. Leider gehts nicht.
Mit Ressource bin ich noch nicht so richtig klargekommen.

Gruß
Neuer Beitrag 24.09.2020 17:53 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
MrSparkle MrSparkle ist männlich
myCSharp.de-Team

avatar-2159.gif


Dabei seit: 16.05.2006
Beiträge: 5.457
Herkunft: Leipzig


MrSparkle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Woher kommt StartPfad? Wenn es nicht klappt, war offenbar deine Überlegung verkehrt. Verwende den Debugger, um herauszufinden, was nicht klappt:  [Artikel] Debugger: Wie verwende ich den von Visual Studio?
Du kannst dir auch den Inhalt von StartPfad ausgeben lassen, dann weißt du, welcher Pfad verwendet wird, wenn du das Programm über einen Verknüpfung startest.

Und verwende immer Path.Combine, um Pfade zu kombinieren.

In deinem Anwendungsfall würde man aber die Icons aus den Resourcen auslesen, dann hast du solche Probleme gar nicht.
Neuer Beitrag 24.09.2020 18:17 Beiträge des Benutzers | zu Buddylist hinzufügen
WMenzel WMenzel ist männlich
myCSharp.de-Mitglied

Dabei seit: 05.03.2012
Beiträge: 20
Entwicklungsumgebung: C#, C++, Atmel-Studio, Arduino
Herkunft: Eisenhüttenstadt

Themenstarter Thema begonnen von WMenzel

WMenzel ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo, StartPfad lese ich so aus:

C#-Code:
public static string GetApplicationsPath()
      {
         FileInfo fi = new FileInfo(Assembly.GetEntryAssembly().Location);
         return fi.DirectoryName;
      }

Ich habe leider noch nichts gefunden, wie ich die Dateien, wo die Icons drin sind, als Ressource einlesen kann. Gibt es da was verständliches? Das von Microsoft ist alles sehr kompliziert.

Gruß
Neuer Beitrag 25.09.2020 17:14 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 14.202
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von WMenzel:
Das von Microsoft ist alles sehr kompliziert.

Eigentlich gilt die Microsoft Dokumentation sprachübergreifend als eine der verständlichsten Dokumentationen überhaupt (außer man verwendet die maschinell übersetzte statt das englische Original).

Ansonsten ist das einbetten von Ressourcen eine recht gut dokumentiertes Thema in der Internet Welt.
Mit  Google-Suche nach c# icon as resource finde ich hunderte Treffer.

Mit Visual Studio geht das mit wenigen Klicks:
- Projekteigenschaften
- Tab Ressources
- Icon einfügen

Sofort zugreifbar über <ProjectName>.Properties.Resources.<ResourceName>;
Neuer Beitrag 25.09.2020 17:29 Beiträge des Benutzers | zu Buddylist hinzufügen
WMenzel WMenzel ist männlich
myCSharp.de-Mitglied

Dabei seit: 05.03.2012
Beiträge: 20
Entwicklungsumgebung: C#, C++, Atmel-Studio, Arduino
Herkunft: Eisenhüttenstadt

Themenstarter Thema begonnen von WMenzel

WMenzel ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich habe mir gerade mal den Pfad zum Icon angeschaut, also das stimmt alles. Eigenartigerweise geht es in der IDE aber nicht mit der Verknüpfung zur exe
Neuer Beitrag 25.09.2020 17:39 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 14.202
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Es gibt unter Windows einen Unterschied zwischen Application Directory (in welchen Folder die Anwendung physikalisch liegt) und Working Directory (aus welchem Folder die Applikation ausgefüht wurde).
Oft sind diese nicht identisch; und wenn man das nicht beachtet, dann werden Pfade nicht gefunden.

Verwende gerade für Icons und Co einfach die Ressourcen.

Der Code Ausschnitt kann für Dein Problem nicht die maßgebliche Ursache sein.
Ps: Du kannst einfach schreiben: Path.GetDirectoryName() - dann sparst Du die zusätzlichen Zugriffe aufs Dateisystem, die FileInfo verursacht.
Neuer Beitrag 25.09.2020 17:46 Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.736
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Unter WinForms gibt es für den Startpfad extra  Application.StartupPath.
Neuer Beitrag 25.09.2020 18:34 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
WMenzel WMenzel ist männlich
myCSharp.de-Mitglied

Dabei seit: 05.03.2012
Beiträge: 20
Entwicklungsumgebung: C#, C++, Atmel-Studio, Arduino
Herkunft: Eisenhüttenstadt

Themenstarter Thema begonnen von WMenzel

WMenzel ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich bin ja fast am verzweifeln.
So habe ich es jetzt gelöst, verwende die Ressources:

C#-Code:
     private void IconTausch(string Farbe)
      {
         switch (Farbe)
         {
            case "gn":
               Icon = Properties.Resources.Durchfluss_gnPunkt;
               break;
            case "rt":
               Icon = Properties.Resources.Durchfluss_rtPunkt;
               break;
         }
      }

In der Form wird alles richtig angezeigt, aber in der Taskleiste bleibt nur das Standard-Icon stehen und läßt sich auch nicht ändern.
Irgendwas stimmt noch nicht.
Neuer Beitrag 25.09.2020 20:03 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.736
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

In deinem Code änderst du bisher nur das Form-Icon (ich gehe mal davon aus, daß die Methode in der Main-Form-Klasse steht).

Von welchem Icon sprichst du genau? Vom sog. Tray-Icon (unten rechts in der Taskleiste, links neben dem Datum) oder vom Icon auf dem Anwendungsbutton?

Ersteres wird über  NotifyIcon.Icon gesetzt und letzteres entspricht dem Anwendungssymbol ( Vorgehensweise: Angeben eines Anwendungssymbols ) und kann nachträglich nicht mehr geändert werden.
Neuer Beitrag Gestern, 12:01 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 14.202
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Und mach doch bitte Deine Farbänderung nicht über strings...

C#-Code:
public enum MyIconState
{
    Red,
    Green
}

private void IconTausch(MyIconState state)
      {
         switch (state)
         {
            case MyIconState.Green:
               Icon = Properties.Resources.Durchfluss_gnPunkt;
               break;
            case MyIconState.Red:
               Icon = Properties.Resources.Durchfluss_rtPunkt;
               break;
         }
      }
Neuer Beitrag Gestern, 12:52 Beiträge des Benutzers | zu Buddylist hinzufügen
MrSparkle MrSparkle ist männlich
myCSharp.de-Team

avatar-2159.gif


Dabei seit: 16.05.2006
Beiträge: 5.457
Herkunft: Leipzig


MrSparkle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von WMenzel:
In der Form wird alles richtig angezeigt, aber in der Taskleiste bleibt nur das Standard-Icon stehen

Ich glaube, jetzt verstehe ich dein Problem! Du änderst das Icon des Fensters, aber das Icon der Anwendung in der Taskleiste ändert sich nicht?

In der Taskleiste wird normalerweise das Icon der Anwendung angezeigt, aber das ist ein anderes, als das des Fensters. Und das Icon der Anwendung ist read-only.

Unter Windows 10 scheint es aber trotzdem zu funktionieren, da wird wohl das Fenster-Icon in der Taskbar angezeigt. Aber es wird anscheinend nicht aktualisiert, wenn man die Anwendung über eine Verknüpfung aufruft. Scheint irgendwas damit zu tun zu haben, daß Windows einen Chache für die Icons verwendet. Hier gibt es ein paar Infos dazu:  Change icon displayed in taskbar at runtime

Für deine Zwecke (Benachrichtigungen, Status-Infos) würde man eher ein Icon in der TrayBar (rechts von der Taskleiste) anzeigen:  How to: Add Application Icons to the TaskBar with the Windows Forms NotifyIcon Component
Neuer Beitrag Gestern, 18:06 Beiträge des Benutzers | zu Buddylist hinzufügen
WMenzel WMenzel ist männlich
myCSharp.de-Mitglied

Dabei seit: 05.03.2012
Beiträge: 20
Entwicklungsumgebung: C#, C++, Atmel-Studio, Arduino
Herkunft: Eisenhüttenstadt

Themenstarter Thema begonnen von WMenzel

WMenzel ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo, danke für die Hinweise, die ich natürlich alle gerne ausprobiere und befolge.
Ich habe jetzt eine Lösung gefunden. Wenn ich in den Takleisten-Einstellungen den Punkt "Schaltflächen der Taskleiste gruppieren" auf "Nie" stelle, dann funktioniert es. Es gibt auch einen entsprechenden Registry-Eintrag dazu, Computer\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explor
er\Advanced/TaskbarGlomLevel auf 1 oder 2 setzen.
Natürlich werde ich das mit NotifyIcon noch testen.

Gruß
Wolfgane
Neuer Beitrag Gestern, 21:10 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 27.09.2020 15:38