[.NET] C# Dynamische Kontextmenüeinträge

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von CHied, 17. Juni 2008 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 17. Juni 2008
    C# Dynamische Kontextmenüeinträge

    Hallo zusammen

    Ich möchte gerne eine Applikation programmieren, mit welcher man Standard-Windows-Programme schnell und einfach aus der Traybar starten kann.
    Dazu habe ich mir folgendes überlegt:
    Im eigentlichen Form gibt man in ein Textfeld einen Wert ein (z.b. "mspaint","cmd",...).
    Dieser Wert wird per Knopfdruck in eine Listbox geschrieben.
    Zusätzlich wird mit demselben Knopfdruck ein Kontextmenü um den Wert erweitert:
    Code:
    contextMenuStrip1.Items.Add(programm);
    Nun kann das Form minimiert und in der Traybar abgelegt werden.
    Mittels Rechtsklick auf das TrayIcon öffnet sich das Kontextmenü.

    Nun würde ich gerne wissen, wie ich es schaffe, dass wenn ich z.b. auf den Eintrag "mspaint" klicke, die richtige Anweisung ausgeführt wird? Statisch wäre es kein Problem: Da doppelklicke ich auf das Item im contextMenuStrip und schreibe eine Anweisung beim betreffenden Item.

    Hoffe auf eine baldige Hilfe, intressiert mich brennend

    Gruss
    chied
     
  2. 17. Juni 2008
    AW: C# Dynamische Kontextmenüeinträge

    Ich verstehe dein Problem nicht ganz.
    Du hast bereits dein Kontextmenü offen, und da steht dann z.B. "mspaint". Wenn man dann draufdrückt, soll sich also Paint öffnen, oder?

    Dieser Eintrag im Kontextmenü wird per Textbox vorher festgelegt?

    Starten eines Programmes aus C#.NET
    Code:
    Process nPad = new Process();
     nPad.StartInfo.FileName = "notepad";
     nPad.Start();

    Hilft dir das? Habe ich das richtig verstanden??

    - - -
    Tanya
     
  3. 17. Juni 2008
    AW: C# Dynamische Kontextmenüeinträge

    Hi Tanya

    "mspaint" steht da noch nicht. Indem ich die Items der Listbox und dem Kontextmenü hinzufüge, erscheinen diese erst dann. Am Anfang ist das Kontextmenü leer.
    Aber an sich ists richtig, dass sich dann Paint öffnen müsste.

    Gruss
     
  4. 18. Juni 2008
    AW: C# Dynamische Kontextmenüeinträge

    Erkenntnis:
    Gut, dann steht jetzt also in deinem Kontextmenü ein neuer Eintrag, beispielsweise "mspaint".

    Vorgehensweise:
    Wenn du diesen Eintrag in das Kontextmenü einhängst, dann solltest du auch gleich noch einen Eventhandler an das Click-Ereignis dieses Kontextmenü-eintrags hängen.
    Zusätzlich müsstest du irgendwo den genauen Befehl hinterlegen. Möglicherweise nimmst du ja als Eintragnamen den Befehl, der ausgeführt werden soll.

    Beim Draufklicken auf den Eintrag sollte deine On "Click"-Funktion aufgerufen werden. Dort bekommst du als Object den "Button", der gedrückt wurde.
    Dieser heißt nun zufällig genau so, wie (angenommen: name=befehl) der Befehl und du könnest ihn wie 'oben' erwähnt ausführen.

    - - -
    Tanya
     
  5. 18. Juni 2008
    AW: C# Dynamische Kontextmenüeinträge

    Ich bin dir so dankbar, dass du mir hilfst!
    In der Theorie habe ich das irgendwie verstanden. Das in die Praxis umzusetzen scheint mir jedoch unmöglich. Ich habe noch nie etwas bewusst mit EventHandlern gemacht und kenne mich da überhaupt nicht aus.

    Ich habe das bis jetzt irgendwie so gemacht, komme aber nicht wirklich weiter:

    das Programm habe ich "host" genannt...
    Code:
     private void btn_add_Click(object sender, EventArgs e)
     {
     string host = txt_host.Text;
    
     lbx_Hosts.Items.Add(host);
     
     contextMenuStrip1.Items.Add(host);
     this.contextMenuStrip1.Click += new EventHandler(contextMenuStrip1_Click); //<-- ??
     }
    Könntest du mir vielleicht gleich an meinem Beispiel weiterhelfen?

    Vielen Dank & Gruss
     
  6. 18. Juni 2008
    AW: C# Dynamische Kontextmenüeinträge

    Ich nehme jetzt einfach den einfachsten Fall an:

    Hinzufügen zum Kontextmenü
    Du fügst dem Kontextmenü den Befehl direkt hinzu (Klick auf Button):
    Code:
     // Annahme: in textBox1 steht der zu verwendende Befehl
     contextMenuStrip1.Items.Add(textBox1.Text);
    
    Hinzufügen des EventHandlers
    Du benötigst noch einen EventHandlers, welcher eine Aktion ausführen soll, wenn auf irgendein Element dieses Kontextmenüs geklickt wird (im Konstruktor möglich).
    Diesen muss du natürlich zuerst hinzufügen (kannst du auch im Designer machen):
    Code:
     contextMenuStrip1.ItemClicked += new ToolStripItemClickedEventHandler(contextMenuStrip1_ItemClicked);
    Der EventHandler an sich
    In dem zweiten Argument (e) stehen nützliche Informationen - also auch der Name des draufgeklickten Objektes. Da dieser unseren Befehl widerspiegelt, können wir diesen gleich verwenden:
    Code:
    void contextMenuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
     {
     string command = e.ClickedItem.Text;
     StarteBefehl(command);
     }
    In StarteBefehl() steht dann dein Code zum Ausführen des Befehls (wie oben gepostet möglich).


    Hilft dir das weiter?

    - - -
    Tanya
     
  7. 19. Juni 2008
    AW: C# Dynamische Kontextmenüeinträge

    Ich komm' aus dem Staunen nicht mehr raus
    Vielen, vielen, vielen, vielen, vielen, vielen Dank!!

    Nun funktioniert mein Progrämmchen perfekt.

    /closed
     
  8. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.