uygulamayı sistem tepsisine küçült


114

C # ve Visual Studio 2010 tarafından desteklenen bir Windows formları uygulamam var.

Uygulamamı sistem tepsisine (görev çubuğuna değil) küçültebilirim, ardından sistem tepsisine iki kez tıkladığımda nasıl geri getirebilirim? Herhangi bir fikir? ayrıca, sistem tepsisindeki simgede bir menüyü nasıl yapabilirim ve sağ tıkladığımda Oturum Aç, Bağlantıyı Kes, Bağlan gibi bir menü gösteriyor. Ayrıca, sistem tepsisinden çıkan bir balon gibi göstermenin herhangi bir yöntemi var mı?

Not: Zaten bir notifyIcon ekledim, ancak nasıl kullanılacağını bilmiyorum.



Formun Designer.cs dosyasına girdiğinizden ve olay işleyicisini "kaydettiğinizden" emin olmak isteyeceksiniz, aksi takdirde bunların hiçbiri çalışmayacaktır (ben anlayamadım). Bunu şöyle bir şey ekleyerek yapabilirsiniz: this.Resize + = new System.EventHandler (this.ManagementForm_Resize);
Brad

Yanıtlar:


149

Formun Yeniden Boyutlandırma olayını işleyin. Bu işleyicide, formu görev çubuğunda değil sistem tepsisinde simge durumuna küçültmek için Yeniden Boyutlandır olayının temel işlevini geçersiz kılarsınız. Bu, formunuzun Resize olay işleyicisinde aşağıdakileri yaparak yapılabilir: Formun WindowState özelliğinin FormWindowState.Minimized olarak ayarlanıp ayarlanmadığını kontrol edin. Yanıt evet ise, formunuzu gizleyin, NotifyIcon nesnesini etkinleştirin ve bazı bilgileri gösteren balon ipucunu gösterin. WindowState FormWindowState.Normal olduğunda, Visible özelliğini false olarak ayarlayarak NotifyIcon nesnesini devre dışı bırakın. Şimdi, görev çubuğundaki NotifyIcon nesnesine çift tıkladığınızda pencerenin yeniden görünmesini istiyorsunuz. Bunun için, NotifyIcon'un MouseDoubleClick olayını işleyin. Burada, Show () yöntemini kullanarak formu gösterirsiniz.

private void frmMain_Resize(object sender, EventArgs e)
{
    if (FormWindowState.Minimized == this.WindowState)
    {
       mynotifyicon.Visible = true;
       mynotifyicon.ShowBalloonTip(500);
       this.Hide();
    }

    else if (FormWindowState.Normal == this.WindowState)
    {
       mynotifyicon.Visible = false;
    }
}

5
Form.FormBorderStyle Özelliğini değiştirebilirsiniz msdn.microsoft.com/en-us/library/…
CD ..

tnx! işe yaradı .. sağ üstteki düğmeleri simge durumuna küçültme, kapatma, büyütme düğmelerini devre dışı bırakma fikriniz var mı? tnx
WantIt


tnx o da çalıştı! ayrıca, sistem tepsisindeki simgeye çift tıkladığımda, pencere diğer uygulamalarda üstte değil, görünmesi için görev çubuğundaki pencereye tıklayarak çaba göstermem gerekiyor. Bunu nasıl halledebiliriz? tnx çok fazla
WantIt


69

Bunu tüm çözümü gerçekleştirmek için buldum. Yukarıdaki cevap, pencereyi görev çubuğundan kaldıramaz.

private void ImportStatusForm_Resize(object sender, EventArgs e)
{
    if (this.WindowState == FormWindowState.Minimized)
    {
        notifyIcon.Visible = true;
        notifyIcon.ShowBalloonTip(3000);
        this.ShowInTaskbar = false;
    }
}

private void notifyIcon_MouseDoubleClick(object sender, MouseEventArgs e)
{
    this.WindowState = FormWindowState.Normal;
    this.ShowInTaskbar = true;
    notifyIcon.Visible = false;
}

Ayrıca, bildirim simgesi kontrolünün aşağıdaki özelliklerini form tasarımcısını kullanarak ayarlamak da iyidir.

this.notifyIcon.BalloonTipIcon = System.Windows.Forms.ToolTipIcon.Info; //Shows the info icon so the user doesn't think there is an error.
this.notifyIcon.BalloonTipText = "[Balloon Text when Minimized]";
this.notifyIcon.BalloonTipTitle = "[Balloon Title when Minimized]";
this.notifyIcon.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon.Icon"))); //The tray icon to use
this.notifyIcon.Text = "[Message shown when hovering over tray icon]";

7
Daha this.Show();önce this.WindowState = FormWindowState.Normal;
developerwjk

1
"Kullanıcı bir şey yapmaz" yazım hatası. ;)
Andrew

1
@developerwjk, aramadığı için kayıp değil Hide(). Ancak bu yaklaşımla ilgili sorun, Alt-Tab tuşuna bastığınızda pencerenin hala görünmesidir. Ben aramayı tercih ederim Hide()ve bu şekilde ShowInTaskbarmülkü kullanmak zorunda kalmazsınız .
Andrew

@Andrew Show()ve kullanırken sorun yaşıyorum Hide(); sakladıktan, gösterdikten ve sonra sakladıktan sonra bir daha gösterilmez.
newbieguy

@newbieguy, sanırım yeni bir soru oluşturmanız gerekiyor, çünkü probleminiz bir cevaba yorum yapmak için uygun değil. Kullandığınız kod olarak daha fazla bilgi vermeniz gerekecektir. Kullanmaya çalıştığınız cevaba bir bağlantı ekleyebilirsiniz.
Andrew

17

İle giderdim

private void Form1_Resize(object sender, EventArgs e)
{
     if (FormWindowState.Minimized == this.WindowState)
     {
          notifyIcon1.Visible = true;
          notifyIcon1.ShowBalloonTip(500);
          this.Hide();    
     }
     else if (FormWindowState.Normal == this.WindowState)
     {
          notifyIcon1.Visible = false;
     }
}

private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
{
     this.Show();
     this.WindowState = FormWindowState.Normal;
}

17

notifyIcon'unuza simge dosyası eklemeyi unutmayın, yoksa tepside görünmez.


konunun en çok ihtiyaç duyulan kısmı. Biraz daha bilgi ekleyebilir misiniz, varsayılan simgeyi kullanmaya nasıl zorlayabilirsiniz?
T.Todua

12

bunu dene

 private void Form1_Load(object sender, EventArgs e)
    {
        notifyIcon1.BalloonTipText = "Application Minimized.";
        notifyIcon1.BalloonTipTitle = "test";
    }

    private void Form1_Resize(object sender, EventArgs e)
    {
        if (WindowState == FormWindowState.Minimized)
        {
            ShowInTaskbar = false;
            notifyIcon1.Visible = true;
            notifyIcon1.ShowBalloonTip(1000);
        }
    }

    private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
    {
        ShowInTaskbar = true;
        notifyIcon1.Visible = false;
        WindowState = FormWindowState.Normal;
    }

1
Arama yapmak yerine yalnızca görev çubuğundan gizlenirseniz, this.Hide()Alt-Tab yaparken pencere yine de görünür.
Andrew

3

Uygulamalarımda kullandığım yöntem bu, oldukça basit ve açıklayıcı ama yorumlarınıza cevap olarak daha fazla ayrıntı vermekten memnuniyet duyarım.

    public Form1()
    {
        InitializeComponent();

        // When window state changed, trigger state update.
        this.Resize += SetMinimizeState;

        // When tray icon clicked, trigger window state change.       
        systemTrayIcon.Click += ToggleMinimizeState;
    }      

    // Toggle state between Normal and Minimized.
    private void ToggleMinimizeState(object sender, EventArgs e)
    {    
        bool isMinimized = this.WindowState == FormWindowState.Minimized;
        this.WindowState = (isMinimized) ? FormWindowState.Normal : FormWindowState.Minimized;
    }

    // Show/Hide window and tray icon to match window state.
    private void SetMinimizeState(object sender, EventArgs e)
    {    
        bool isMinimized = this.WindowState == FormWindowState.Minimized;

        this.ShowInTaskbar = !isMinimized;           
        systemTrayIcon.Visible = isMinimized;
        if (isMinimized) systemTrayIcon.ShowBalloonTip(500, "Application", "Application minimized to tray.", ToolTipIcon.Info);
    }

2
Bu ve diğer çözümlerin bir sorunu vardır: Form diğer pencerelerin altında gizlenmişse, kullanıcı büyük olasılıkla simgeye tıkladığında bunu küçültmek istemez. Bunun yerine odaklanılmalıdır. Soruma buradan bakın: stackoverflow.com/questions/36797442/…
maf-soft

1

Sistem tepsisindeki görüntüye tıkladığınızda, çerçevenin görünür olup olmadığını doğrulayabilir ve ardından Visible = true veya false ayarını yapmanız gerekir.


1

... ve sağ tıklama bildirim menünüz için forma bir bağlam menüsü ekleyin ve düzenleyin ve her bağlam menüsü için fare tıklama olaylarını çift tıklayarak ayarlayın ve ardından notifyicon'daki ContextMenuStrip öğesini seçerek notifyicon1'e ekleyin.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.