perkecil aplikasi ke baki sistem

114

Saya memiliki aplikasi formulir Windows yang didukung oleh C # dan Visual Studio 2010.

Bagaimana cara meminimalkan aplikasi saya ke baki sistem (bukan bilah tugas), lalu mengembalikannya saat klik dua kali di baki sistem? ada ide? juga, bagaimana saya bisa membuat beberapa menu di icon di system tray dan ketika saya klik kanan, itu menunjukkan menu seperti Login, Disconnect, Connect, sesuatu seperti itu. Selain itu, apakah ada metode untuk ditampilkan seperti balon yang muncul dari baki sistem?

PS: Saya sudah menambahkan notifyIcon, tapi saya tidak tahu bagaimana cara menggunakannya.

Ingin
sumber
Di sini Anda dapat mengunduh kode contoh yang bagus simple-talk.com/dotnet/.net-framework/…
Pengembang
Anda akan ingin memastikan untuk masuk ke formulir Designer.cs dan "mendaftarkan" event handler atau tidak satupun dari ini akan bekerja (saya tidak bisa memahaminya). Anda dapat melakukan ini dengan menambahkan sesuatu seperti ini: this.Resize + = new System.EventHandler (this.ManagementForm_Resize);
Brad

Jawaban:

149

Tangani acara Ubah ukuran formulir. Dalam penangan ini, Anda mengesampingkan fungsionalitas dasar acara Ubah Ukuran untuk meminimalkan formulir ke baki sistem dan bukan ke bilah tugas. Ini dapat dilakukan dengan melakukan hal berikut di pengendali kejadian Resize formulir Anda: Periksa apakah properti WindowState formulir disetel ke FormWindowState.Minimized. Jika ya, sembunyikan formulir Anda, aktifkan objek NotifyIcon, dan tunjukkan ujung balon yang menunjukkan beberapa informasi. Setelah WindowState menjadi FormWindowState.Normal, nonaktifkan objek NotifyIcon dengan menyetel properti Visible menjadi false. Sekarang, Anda ingin jendela muncul kembali ketika Anda mengklik dua kali pada objek NotifyIcon di taskbar. Untuk ini, tangani acara MouseDoubleClick NotifyIcon. Di sini, Anda menampilkan formulir menggunakan metode Show ().

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;
    }
}
CD..
sumber
5
Anda dapat mengubah Properti Form.FormBorderStyle msdn.microsoft.com/en-us/library/…
CD ..
tnx! berhasil .. juga ada ide untuk menonaktifkan tombol meminimalkan, menutup, memaksimalkan di kanan atas? tnx
WantIt
tnx itu berhasil juga! juga, ketika saya mengklik dua kali ikon di system tray, jendela tidak di atas dengan aplikasi lain, saya harus berusaha dengan mengklik jendela di taskbar untuk muncul. Bagaimana kita bisa menangani ini? tnx begitu banyak
WantIt
69

Saya menemukan ini untuk menyelesaikan seluruh solusi. Jawaban di atas gagal untuk menghapus jendela dari bilah tugas.

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

Juga bagus untuk mengatur properti berikut dari kontrol ikon beri tahu menggunakan desainer formulir.

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]";
Ben Gripka
sumber
7
Anda hilang this.Show();sebelumnyathis.WindowState = FormWindowState.Normal;
developerwjk
1
Salah ketik dalam "pengguna tidak berpikir". ;)
Andrew
1
@developerwjk, tidak ada yang hilang karena dia tidak menelepon Hide(). Tetapi masalah dengan pendekatan itu adalah jendela masih muncul saat Anda menekan Alt-Tab. Saya lebih suka menelepon Hide()dan dengan begitu Anda tidak perlu menggunakan ShowInTaskbarproperti sama sekali.
Andrew
@Andrew Saya mengalami masalah saat menggunakan Show()dan Hide(); setelah menyembunyikan, menampilkan, dan kemudian bersembunyi, itu tidak akan muncul lagi.
newbieguy
@newbieguy, saya rasa Anda perlu membuat pertanyaan baru, karena masalah Anda tidak cocok untuk mengomentari jawaban. Anda perlu memberikan lebih banyak informasi, sebagai kode yang Anda gunakan. Anda dapat menyertakan link ke jawaban yang Anda coba gunakan.
Andrew
17

Saya akan pergi dengan

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;
}
Alejandro del Río
sumber
17

jangan lupa untuk menambahkan file ikon ke notifyIcon Anda atau tidak akan muncul di tray.

ewwink
sumber
bagian yang paling dibutuhkan dalam topik tersebut. Bisakah Anda menambahkan lebih banyak info, bagaimana cara memaksanya menggunakan ikon default?
T.Todua
12

coba ini

 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;
    }
Tanmay Nehete
sumber
1
Jika Anda hanya bersembunyi dari taskbar alih-alih menelepon this.Hide(), jendela masih muncul saat melakukan Alt-Tab.
Andrew
3

Ini adalah metode yang saya gunakan dalam aplikasi saya, ini cukup sederhana dan cukup jelas tetapi saya senang memberikan lebih banyak detail sebagai jawaban atas komentar Anda.

    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);
    }
Tawon
sumber
2
Solusi ini dan lainnya memiliki satu masalah: jika formulir disembunyikan di bawah jendela lain, kemungkinan besar pengguna tidak ingin meminimalkannya saat mengklik ikon. Sebaliknya itu harus difokuskan. Lihat pertanyaan saya di sini: stackoverflow.com/questions/36797442/…
maf-soft
1

Di klik pada gambar di baki Sistem, Anda dapat memverifikasi apakah bingkai terlihat dan kemudian Anda harus mengatur Visible = true atau false

Lorenzo Sogliani
sumber
1

... dan untuk menu pemberitahuan klik kanan Anda, tambahkan menu konteks ke formulir dan edit dan setel peristiwa klik-mouse untuk setiap menu konteks dengan mengklik dua kali menu tersebut lalu lampirkan ke ikon pemberitahuan1 dengan memilih ContextMenuStrip di properti ikon pemberitahuan.

Ryu
sumber
-2

this.WindowState = FormWindowState.Minimized;

Hasala Senevirathne
sumber