Laden...

hide form on load

Erstellt von legio vor 16 Jahren Letzter Beitrag vor 16 Jahren 2.454 Views
L
legio Themenstarter:in
10 Beiträge seit 2007
vor 16 Jahren
hide form on load

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 😐

S
125 Beiträge seit 2005
vor 16 Jahren

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>_
*************************

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo legio,

erzeugt das Form erst, wenn du es brauchst: Vorlage für Tray-/NotifyIcon-Anwendung

herbivore

L
legio Themenstarter:in
10 Beiträge seit 2007
vor 16 Jahren

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?

S
125 Beiträge seit 2005
vor 16 Jahren

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>_
*************************

49.485 Beiträge seit 2005
vor 16 Jahren

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

L
legio Themenstarter:in
10 Beiträge seit 2007
vor 16 Jahren

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..

49.485 Beiträge seit 2005
vor 16 Jahren

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

L
legio Themenstarter:in
10 Beiträge seit 2007
vor 16 Jahren

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();
        }
    }
}