Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
NotifyIcon finden (foreach)
Fehler
myCSharp.de - Member



Dabei seit:
Beiträge: 22

Themenstarter:

NotifyIcon finden (foreach)

beantworten | zitieren | melden

Moin Mahlzeit,

nach über 3 Stunden Google und rumprobieren danke ich wäre es sinnvoll mal hier im Forum zu fragen.

Ich würde gerne alle NotifyIcons über eine foreach-Schelife finden.

Mit Forms ist das auch kein Problem, hier ein Beispiel:


            foreach (System.Windows.Forms.Form frm in System.Windows.Forms.Application.OpenForms)
            {
                //frm.Name;
            }

Ich dachte also, dass muss doch auch mit Notifyicons funktionieren, nur wo mache ich den Fehler?
Es gibt ja hierfür kein NotifyIconsOpen oÄ.!


            foreach (System.Windows.Forms.NotifyIcon ni in System.Windows.Forms.NotifyIcon)
            {
                //ni.ToString();
            }


Viele Grüße
Sarkasmus ist die Kunst, Menschen einen Spiegel vorzuhalten. Nur merken es viele nicht.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16.310

beantworten | zitieren | melden

Alle NotifyIcons von was? Vom Prozess, oder alle bekannten?
Ich vermute mal vom Prozess: die Fenster aka Forms werden im Prozess von der Runtime gehalten, da diese ein Windows Handle haben, die verwaltet werden müssen.
Entsprechend gibt es by design eine "inner list" von Forms, die durch OpenForms aufgerufen werden kann.

Das gibts jedoch bei NotifyIcons nicht.
Da ist nicht die Runtime sondern Du in der Verantwortung die Ressourcen zu managen (zB offene Handles auf ein Icon).
Daher müsstest Du Dir auch selbst eine Liste bauen, um diese abrufen zu können. Von Haus aus gibts da nichts.
private Nachricht | Beiträge des Benutzers
Fehler
myCSharp.de - Member



Dabei seit:
Beiträge: 22

Themenstarter:

beantworten | zitieren | melden

Hallo Abt,

gemeint ist von der eigenen Applikation.
Ok, ich habe da schon mit gerechnet.
Gibt es irgendwo eine Anleitung oder ein Beispiel wie ich sowas bauen kann?

VG Chris
Sarkasmus ist die Kunst, Menschen einen Spiegel vorzuhalten. Nur merken es viele nicht.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16.310

beantworten | zitieren | melden

Ist ja nur ein Array (oder Liste) von Objekten.
Das ist jetz keine Raketentechnik, wofür man eigene Tutorials hätte.

Wenn man es "groß" aufziehen will, dann vermutlich als Factory-Pattern Umsetzung mit 20 Zeilen Code.
private Nachricht | Beiträge des Benutzers
Fehler
myCSharp.de - Member



Dabei seit:
Beiträge: 22

Themenstarter:

beantworten | zitieren | melden

Für dich ist das easy, für mich ist das neu.
Hast du einen Link für mich wo ich das lernen kann?
Oder nach was muss ich suchen?
Sarkasmus ist die Kunst, Menschen einen Spiegel vorzuhalten. Nur merken es viele nicht.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16.310

beantworten | zitieren | melden

Hab so geantwortet, weil das "leicht" im Sinne von Grundlagen ist.
Daher könnte ich Dich da auch nur an Grundlagen von C#/.NET verweisen: also wie man mit Listen und Referenzen in C# umgeht.
Auflistungen (C#)
Also man kann da nichts spezielles "lernen" sondern nur anwenden, was man als Bausteine von C# beherrscht.

Nur als Beispiel:
Mach Dir eine Klasse, die für das Setzen/Halten/Verwalten von den Notify-Referenzen verantwortlich ist.

Man kann dafür auch eine Service-Klasse (Repository Pattern) machen, wie zB


public class NotifyIconService
{
   private List<NotifyIconsTypOderSo> NotifyIcons {get;set;}
   public IEnumerable<NotifyIconsTypOderSo> GetAllOpenNotifyIcons() => NotifyIcons;

  // hier Methoden, die das Setzen / Aufräumen übernehmen
}
private Nachricht | Beiträge des Benutzers
Fehler
myCSharp.de - Member



Dabei seit:
Beiträge: 22

Themenstarter:

beantworten | zitieren | melden

Danke, das werde ich mir morgen mal in Ruhe ansehen und versuchen umzusetzen.
Habe die Listen bisher nie genutzt.

Vg
Chris
Sarkasmus ist die Kunst, Menschen einen Spiegel vorzuhalten. Nur merken es viele nicht.
private Nachricht | Beiträge des Benutzers
Fehler
myCSharp.de - Member



Dabei seit:
Beiträge: 22

Themenstarter:

beantworten | zitieren | melden

Moin,

nach über 2 weiteren Stunden (wenigstens habe ich etwas über die Listen gelernt), gebe ich auf.
Steige hier noch nicht durch. :I

Trotzdem Danke für die Unterstützung @Abt

Viele Grüße
Chris
Sarkasmus ist die Kunst, Menschen einen Spiegel vorzuhalten. Nur merken es viele nicht.
private Nachricht | Beiträge des Benutzers
trib
myCSharp.de - Member



Dabei seit:
Beiträge: 697

beantworten | zitieren | melden

Aufgeben ist in der IT keine Option
Was ist denn genau Deine Idee mit dem Auslesen der Notifyicons? Wenn die alle in Deiner Applikation, in verschiedenen Forms liegen, hast Du diese doch bereits.
Möchtest Du die Icons von fremden Anwendungen haben, musst Du etwas anderes an die Sache herangehen.

Wo hapert es? Was klappt am Code nicht?
private Nachricht | Beiträge des Benutzers
Fehler
myCSharp.de - Member



Dabei seit:
Beiträge: 22

Themenstarter:

beantworten | zitieren | melden

Hallo trib,

naja, die Entwicklung muss ja auch im Verhältnis zum nutzen sein, auch wenn ich dir vollkommen recht gebe und deine Einstellung richtig ist.

Also ich habe ein notifyicon erzeugt in der selben Anwendung, allerdings in einer anderen .cs bzw. Namespace und will diese z.b. anhand der beschreibung .Text finden können.
Ideal wäre eine foreach für elemente und ich prüfe ob (Element.Text == NameVonNotifyicon) zutreffend ist.

Ich denke der Ansatz von Abt ist auch richtig, nur kriege ich die Liste nicht zusammengebaut...
Sarkasmus ist die Kunst, Menschen einen Spiegel vorzuhalten. Nur merken es viele nicht.
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.593

beantworten | zitieren | melden

Das ist aber, wie schon geschrieben, designtechnisch nicht zu empfehlen.

Außerden ist NotifyIcon kein Control, sondern eine Component (und dafür gibt es keine öffentliche Eigenschaft zum Auslesen), s.a. Find components on a windows form c# (not controls).

Was ist denn der genaue Grund, daß du außerhalb der Form, wo das NotifyIcon definiert ist, auf dieses zugreifen möchtest?
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16.310

beantworten | zitieren | melden

Zitat von Fehler
Ich denke der Ansatz von Abt ist auch richtig, nur kriege ich die Liste nicht zusammengebaut...
Du wirst Dich enorm schwer tun, wenn Du Dich nicht mit den Grundlagen beschäftigst - die kann man auch nicht aufgeben.
Grundlagen sind nichts, was man mit Try and Error erlernen kann.

Collections, egal ob Arrays oder deren Abstraktion Listen - sind absolut essentiell für jede:n Programmierer:in. Du wirst nicht weit kommen, wenn Du diese Dinge nicht anwenden kannst.
Wenn ich nun lese, dass Du in "cs-Dateien" denkst dann zeigt mir das auch: Du hast C# nicht verstanden.
Und wenn man eine Sprache nicht verstanden hat, dann wirds sehr sehr schwer ein noch so kleines Tool zu schreiben.

Daher: investier wirklich Zeit in die Grundlagen, nicht nur zwei Stunden.
Damit mein ich nicht, dass Du alles perfekt kannst - aber zumindest die Basis-Grundlagen.
private Nachricht | Beiträge des Benutzers
Fehler
myCSharp.de - Member



Dabei seit:
Beiträge: 22

Themenstarter:

beantworten | zitieren | melden

Ok, verstehe.
Der Grund ist, dass das Notifyicon während der Laufzeit automatisch aufgrund von bestimmten Bedingungen erstellt wird.


@Abt: Was soll ich dazu sagen, könnte man viel drüber diskutieren. Allerdings habe nicht den Eindruck das du wirklich ließt was ich schreibe.
Sarkasmus ist die Kunst, Menschen einen Spiegel vorzuhalten. Nur merken es viele nicht.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16.310

beantworten | zitieren | melden

Da kann ich nur zurück geben, dass ich den Eindruck habe, dass Du nicht verstehst, was wir schreiben - auch wenn Du es liest :-)
Deswegen versuchen wir zu helfen und Dich in die richtige Richtung zu schieben. Aber das funktioniert nur, wenn man mitarbeitet.
private Nachricht | Beiträge des Benutzers
Fehler
myCSharp.de - Member



Dabei seit:
Beiträge: 22

Themenstarter:

beantworten | zitieren | melden

Wäre schön wenn du die Kritik nicht persönlich nimmst und direkt trotzig wirst, das war nicht Böse gemeint.
Sarkasmus ist die Kunst, Menschen einen Spiegel vorzuhalten. Nur merken es viele nicht.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16.310

beantworten | zitieren | melden

Erkenne keinerlei Trotz.
Es war lediglich ein dezenter Wink mit dem Zaunpfahl, dass Du a) auf die Fragen der Helfer eingehst (zB Th69, das der Sinn des "globalen Zugriffs des Icons sein soll) und b) eben Dich mit den Grundlagen beschäftigen muss; sonst wirds halt schwer, entsprechende Tipps verstehen und anwenden zu können.
private Nachricht | Beiträge des Benutzers
Fehler
myCSharp.de - Member



Dabei seit:
Beiträge: 22

Themenstarter:

beantworten | zitieren | melden

Sag mal sind wir hier im Kindergarten?
Jetzt bleib mal Sachlich und auf dem Boden.
Wenn du nur beleidigen und kritisieren kannst dann mach das bitte in einem anderen Thread und lass mich nun in ruhe mit deinem widersprüchlichen aussagen!
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Fehler am .
Sarkasmus ist die Kunst, Menschen einen Spiegel vorzuhalten. Nur merken es viele nicht.
private Nachricht | Beiträge des Benutzers
Stefan.Haegele
myCSharp.de - Member

Avatar #avatar-3068.jpg


Dabei seit:
Beiträge: 462
Herkunft: Untermeitingen

beantworten | zitieren | melden

Ich glaube der einzige der jetzt ganz schnell ruhig bleiben sollte bist du. Lies dir doch die Antworten durch und vor allem - verstehe sie auch und handle dann danach! Mit deiner Art wirst du dir hier keine Freunde machen!
private Nachricht | Beiträge des Benutzers
Fehler
myCSharp.de - Member



Dabei seit:
Beiträge: 22

Themenstarter:

beantworten | zitieren | melden

Lieber Stefan, wieso soll ich ruhig sein, ich diskutiere hier nicht. Seit ihr beiden befeeundet dass du ihn verteidigen musst oder was?
Bitte beim Thema bleiben oder einfach mal nichts sagen, danke.
Sarkasmus ist die Kunst, Menschen einen Spiegel vorzuhalten. Nur merken es viele nicht.
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5.655
Herkunft: Leipzig

beantworten | zitieren | melden

Diese Diskussion führt zu nichts. Die Helfer haben dir zu deinem Problem geantwortet. Deine Reaktion ist völlig unnötig. Daher ist jetzt hier zu. Bitte beachte zukünftig [Hinweis] Wie poste ich richtig?
Weeks of programming can save you hours of planning
private Nachricht | Beiträge des Benutzers