Laden...

NotifyIcon finden (foreach)

Erstellt von Fehler vor 2 Jahren Letzter Beitrag vor 2 Jahren 575 Views
Thema geschlossen
F
Fehler Themenstarter:in
22 Beiträge seit 2022
vor 2 Jahren
NotifyIcon finden (foreach)

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.

16.834 Beiträge seit 2008
vor 2 Jahren

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.

F
Fehler Themenstarter:in
22 Beiträge seit 2022
vor 2 Jahren

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.

16.834 Beiträge seit 2008
vor 2 Jahren

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.

F
Fehler Themenstarter:in
22 Beiträge seit 2022
vor 2 Jahren

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.

16.834 Beiträge seit 2008
vor 2 Jahren

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
}

F
Fehler Themenstarter:in
22 Beiträge seit 2022
vor 2 Jahren

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.

F
Fehler Themenstarter:in
22 Beiträge seit 2022
vor 2 Jahren

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.

T
708 Beiträge seit 2008
vor 2 Jahren

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?

F
Fehler Themenstarter:in
22 Beiträge seit 2022
vor 2 Jahren

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.

4.939 Beiträge seit 2008
vor 2 Jahren

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?

16.834 Beiträge seit 2008
vor 2 Jahren

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.

F
Fehler Themenstarter:in
22 Beiträge seit 2022
vor 2 Jahren

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.

16.834 Beiträge seit 2008
vor 2 Jahren

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.

F
Fehler Themenstarter:in
22 Beiträge seit 2022
vor 2 Jahren

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.

16.834 Beiträge seit 2008
vor 2 Jahren

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.

F
Fehler Themenstarter:in
22 Beiträge seit 2022
vor 2 Jahren

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!

Sarkasmus ist die Kunst, Menschen einen Spiegel vorzuhalten. Nur merken es viele nicht.

463 Beiträge seit 2009
vor 2 Jahren

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!

F
Fehler Themenstarter:in
22 Beiträge seit 2022
vor 2 Jahren

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.

5.658 Beiträge seit 2006
vor 2 Jahren

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

Thema geschlossen