hallo,
private void button1_Click(object sender, EventArgs e)
{
this.Hide();
}
funktioniert wunderbar. Nur will ich nicht immer erst den Button drücken müssen um das Programm zu verstecken - soll eine Tray Anwendung sein. Wie kann ich verhindern dass das Fenster beim Start gezeichnet wird?
Gibt es eine bessere Methode als Hide()? Ich hätte ungern beim Programmstart erstmal ein Fenster, dass sich dann aber in Millisekunden wieder versteckt..
edit: ich habe versucht this.Hide(); in InitializeComponent(), im Constructor der Form und in tray_app_Load() einzubauen.. alles nutzlos 😐
Hallo.
Wenn das mit dem Tray.Icon schon läuft brauchst du nur
this.WindowState = FormWindowState.Minimized;
im Konstruktor anzugeben.
Oder halt diese Eigenschaft im Designer einstellen.
Willst du deine Anwendung nicht in der Taskleiste angezeigt haben einfach dasselbe mit
this.ShowInTaskbar = false;
versuchen.
Dann wird die Anwendung minimiert gestartet und nicht in der Taskleiste angezeigt.
Mfg
SGT_BOB
*************************
Ich bin root, ich darf das... 😜
root>_
*************************
Hallo legio,
erzeugt das Form erst, wenn du es brauchst: Vorlage für Tray-/NotifyIcon-Anwendung
herbivore
das programm soll eine form zur konfiguration bieten.. irgendwann gegen später. Wenn ich windowstate auf minimized setze ist das frame halt weg und kommt auch mit this.Show() nicht wieder. Aber vielleicht würde
this.WindowState = FormWindowState.Normal;
da weiterhelfen?
Die Vorlage habe ich gesehen.. muss ich mich mal morgen drüber meditieren und gucken ob ich das reproduzieren kann.
Wenn ich den Sinn des Snippets richtig verstehe, dann kann man mit dem Designer zwar tolle contextmenustrips machen, aber halt nur mit forms als unterlage. Und wenn man kein "basis" form möchte muss man das contextmenustrip selbst basteln, ja?
Das Öffnen von Forms ist aber über das Kontextmenü nachträglich möglich.
Gibts dafür auch irgendwo einen Hinweis?
Form newForm = new Form();
Application.Run(newForm)? Oder irgendwas mit ApplicationContext?
Zu deiner 2. Frage:
Zitat:
Das Öffnen von Forms ist aber über das Kontextmenü nachträglich möglich.Gibts dafür auch irgendwo einen Hinweis?
Form newForm = new Form();
Application.Run(newForm)? Oder irgendwas mit ApplicationContext?
Fast richtig.
Ein neues Form erstellen mit
Form form = new Form();
und mit
form.Show();
anzeigen.
Application.Run() bringt dich nicht weiter, da die Standardmeldungsschleife deiner Anwendung bereits läuft.
Mfg
SGT_BOB
*************************
Ich bin root, ich darf das... 😜
root>_
*************************
Hallo legio,
die Verwendung von Application.Run(newForm) ist gerade zu vermeiden. In dem Snippet wird absichtlich Application.Run() verwendet. Wenn du später ein Form anzeigen willst, geht das einfach mit Form newForm = new Form(); newForm.Show ();
Siehe auch Form- und Codehandling
herbivore
ja, ich meinte schon neue Forms, sonst wäre der ganze Act in der Tat umsonst 😃
Ich glaube bei codeproject.com oder so habe ich irgendwas in Zusammenhang mit Tray Applikationen und Application.Run(ApplicationContext) gelesen, daher die Verwirrung um neue Forms.
Entschuldigend muss ich auch hinzufügen dass ich mich mit Forms erst seit sehr kurzem beschäftige. Die funktionale Logik meiner Anwendung war in 2h fertig, das mit der GUI dauert inzwischen beträchtlich länger. Aber macht Spass 😃
Unklar ist mir jetzt noch wie ich den Weg zurück in den Designer finde.. wenn ich dem projekt ein neues Form hinzufüge (blank form), dort dann diverse controlls hinzufüge und schließlich in meiner Anwendung das Form initiiere...
private void testToolStripMenuItem_Click(object sender, EventArgs e)
{
Form Form1 = new Form();
Form1.Show();
}
zeigt es mir zwar das Form an, aber ohne jeglichen Inhalt 😐 Werde mir morgen mal den gelinkten Artikel anschauen.. vielleicht hat mein Problem ja was mit der "Hauptfenster" Geschichte zu tun..
Hallo legio,
Entschuldigend muss ich auch hinzufügen dass ich mich mit Forms erst seit sehr kurzem beschäftige.
naja, Grundkenntnisse der Windows-Forms-Programmierung, inbesondere des Programmaufbaus setzen wir schon voraus. Am besten du schaust dir das erstmal in Galileo <openbook>: Visual C# 2005 von Andreas Kühnel an.
herbivore
ich habe mir die trayApp anwendungsvorlage angeschaut und dementsprechend eine eigene mit anderen controls erstellt. Funktioniert soweit ganz gut. Kann man das so machen? Verbesserungsvorschläge? Irgendwelchen groben Fahrlässigkeiten die ich übersehen habe und mich heute nacht nicht schlafen lassen? 😃
edit: Beim Erstellen eines neuen ToolStripMenuItem muss - sofern man den eventhandler im konstruktor mit angeben möchte - zwangsläufig ein Image mitgeliefert werden. Ich war mal so frei da "null" reinzupacken. Funktioniert.
edit2: Jetzt ist mir doch noch eine Frage eingefallen. Ist es ohne größeren Aufwand möglich, Projektressourcen zu verwenden? Properties.Ressources.xyz? z.B. für Bilder und Icons..
using System;
using System.Windows.Forms;
using System.Drawing;
using System.ComponentModel;
using System.Diagnostics;
namespace myCSharpTrayAppModified
{
static class Program
{
// elements
private static NotifyIcon _notifyIcon;
private static ToolStripItem aktion1ToolStripMenuItem;
private static ToolStripItem aktion2ToolStripMenuItem;
private static ToolStripItem beendenToolStripMenuItem;
private static ContextMenuStrip cm;
// methods
public static void Main(string[] astrArg)
{
// create notifyicon
_notifyIcon = new NotifyIcon();
_notifyIcon.Icon = new Icon("icon.ico");
_notifyIcon.Text = "tray application!";
_notifyIcon.Visible = true;
_notifyIcon.DoubleClick += new EventHandler(NotifyIconDoubleClick);
// create new style context menu
cm = new ContextMenuStrip();
cm.SuspendLayout();
cm.Opening += new System.ComponentModel.CancelEventHandler(cm_Opening);
// create contextmenustrip items
aktion1ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem("Aktion 1", null, aktion1ToolStripMenuItem_Click);
aktion2ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem("Aktion 2", null, aktion2ToolStripMenuItem_Click);
beendenToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem("Beenden", null, beendenToolStripMenuItem_Click);
cm.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
aktion1ToolStripMenuItem, aktion2ToolStripMenuItem, beendenToolStripMenuItem}
);
// notifyicon das kontextmenü zuordnen
_notifyIcon.ContextMenuStrip = cm;
cm.ResumeLayout(false);
// run application (without opening a form)
Application.Run();
}
private static void NotifyIconDoubleClick(Object sender, EventArgs e)
{
Debug.WriteLine(">>> Doppelklick!");
}
private static void cm_Opening(object sender, CancelEventArgs e)
{
Debug.WriteLine(">>> cm opening");
}
private static void aktion1ToolStripMenuItem_Click(object sender, EventArgs e)
{
Debug.WriteLine(">>> Aktion 1!");
_notifyIcon.Icon = new Icon("green.ico");
}
private static void aktion2ToolStripMenuItem_Click(object sender, EventArgs e)
{
Debug.WriteLine(">>> Aktion 2!");
_notifyIcon.Icon = new Icon("orange.ico");
}
private static void beendenToolStripMenuItem_Click(Object sender, EventArgs e)
{
Debug.WriteLine(">>> Beenden!");
_notifyIcon.Dispose();
Application.Exit();
}
}
}