Jak mogę zrobić a.NET aplikacja Windows Forms, która działa tylko w zasobniku systemowym?
Co muszę zrobić, aby aplikacja Windows Forms działała w zasobniku systemowym?
Nie aplikacja, która może zminimalizować do zasobnika, ale taka, która istnieje tylko w zasobniku, z niczym więcej niż ikoną, podpowiedzią i menu "prawym przyciskiem myszy".
10 answers
Podstawowa odpowiedź korzystania z NotifyIcon jest poprawna, ale, jak wiele rzeczy. NET, jest wiele subtelności zaangażowanych w to right. W samouczku wspomnianym przez Brada można zapoznać się z podstawami, ale nie odnosi się do żadnej z nich: [3]}
- czy zamknięcie aplikacji z zasobnika systemowego prawidłowo zamyka otwarte formularze potomne?
- czy aplikacja wymusza uruchamianie tylko jednej instancji (dotyczy większości, choć nie wszystkich, aplikacji w tray) ?
- jak w razie potrzeby otworzyć okna potomne WPF oraz okna potomne WinForms.
- Jak obsługiwać dynamiczne menu kontekstowe.
- Standardowy NotifyIcon istnieje w przestrzeni WinForms; Czy Mogę zrobić czyste rozwiązanie WPF? (Tak, możesz!)
Właśnie opublikowałem artykuł na Simple-Talk.com to odnosi się do tych punktów i bardziej szczegółowo, zapewniając ramę aplikacji tray, które można natychmiast użyć, plus kompletny, rzeczywisty przykład aplikacji do pokazania wszystko w praktyce. Zobacz Creating Tray Applications in. NET: A Practical Guide, published November, 2010.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-05 16:57:13
Artykuł projektu kodu Tworzenie aplikacji Taskray daje bardzo proste wyjaśnienie i przykład tworzenia aplikacji, która zawsze istnieje tylko w zasobniku systemowym.
Zasadniczo Zmień linię Application.Run(new Form1());
w Program.cs
, aby zamiast tego uruchomić klasę, która dziedziczy z ApplicationContext
, i mieć konstruktor dla tej klasy initialize a NotifyIcon
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MyCustomApplicationContext());
}
}
public class MyCustomApplicationContext : ApplicationContext
{
private NotifyIcon trayIcon;
public MyCustomApplicationContext ()
{
// Initialize Tray Icon
trayIcon = new NotifyIcon()
{
Icon = Resources.AppIcon,
ContextMenu = new ContextMenu(new MenuItem[] {
new MenuItem("Exit", Exit)
}),
Visible = true
};
}
void Exit(object sender, EventArgs e)
{
// Hide tray icon, otherwise it will remain shown until user mouses over it
trayIcon.Visible = false;
Application.Exit();
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-27 11:53:01
Jak mówi mat1t-musisz dodać NotifyIcon do swojej aplikacji, a następnie użyć czegoś takiego jak poniższy kod, aby ustawić tooltip i menu kontekstowe:
this.notifyIcon.Text = "This is the tooltip";
this.notifyIcon.ContextMenu = new ContextMenu();
this.notifyIcon.ContextMenu.MenuItems.Add(new MenuItem("Option 1", new EventHandler(handler_method)));
Ten kod pokazuje tylko ikonę w zasobniku systemowym:
this.notifyIcon.Visible = true; // Shows the notify icon in the system tray
Następujące będą potrzebne, jeśli masz formularz (z jakiegokolwiek powodu):
this.ShowInTaskbar = false; // Removes the application from the taskbar
Hide();
Kliknięcie prawym przyciskiem myszy, aby uzyskać menu kontekstowe, jest obsługiwane automatycznie, ale jeśli chcesz wykonać jakąś akcję lewym przyciskiem myszy, musisz dodać obsługę kliknięć:
private void notifyIcon_Click(object sender, EventArgs e)
{
var eventArgs = e as MouseEventArgs;
switch (eventArgs.Button)
{
// Left click to reactivate
case MouseButtons.Left:
// Do your stuff
break;
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-15 12:32:36
Napisałem aplikację traybar z. NET 1.1 i nie potrzebowałem formularza.
Przede wszystkim Ustaw obiekt startowy projektu jako Sub Main
, zdefiniowany w module.
Następnie utwórz programowo komponenty: NotifyIcon
i ContextMenu
.
Pamiętaj, aby dołączyć MenuItem
" Quit " lub podobne.
Połącz ContextMenu
z NotifyIcon
.
Invoke Application.Run()
.
W obsłudze zdarzenia dla Quit MenuItem
należy wywołać set NotifyIcon.Visible = False
, a następnie Application.Exit()
.
Dodaj to, czego potrzebujesz do ContextMenu
i obsłuż się poprawnie:)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-21 12:23:28
- Utwórz nową aplikację Windows za pomocą Kreatora.
- Usuń
Form1
z kodu. - Usuń kod w programie.cs startuje
Form1
. - Użyj klasy
NotifyIcon
, aby utworzyć ikonę w tacce systemowej(Przypisz do niej ikonę). - Dodaj do niego contextmenu.
- lub react to
NotifyIcon
'S mouseclick and differenciate between Right and Left click, setting your contextmenu and showing it for which ever button (right/left) was Press. -
Application.Run()
Aby zachować aplikacja uruchomiona zApplication.Exit()
, aby zakończyć. Lubwhile(bRunning){Application.DoEvents;Thread.Sleep(10);}
. Następnie UstawbRunning = false
, aby zamknąć aplikację.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-21 12:20:25
Aplikacja "System tray" jest zwykłą aplikacją win forms, jedyną różnicą jest to, że tworzy ikonę w obszarze paska zadań systemu windows. W celu utworzenia sys.ikona w tacce użyj komponentu NotifyIcon, możesz go znaleźć w Toolbox (wspólne kontrolki) i zmodyfikować jego właściwości: ikona, podpowiedź. Umożliwia również obsługę kliknięć myszką i podwójnych kliknięć.
I jeszcze jedno, aby uzyskać wygląd i odczucia lub standardową aplikację tray. dodaj linie followinf do głównego formularza Zdarzenie:
private void MainForm_Shown(object sender, EventArgs e)
{
WindowState = FormWindowState.Minimized;
Hide();
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-15 09:44:57
Z tego, co wiem, musisz nadal pisać aplikację za pomocą formularza, ale nie masz kontroli nad formularzem i nigdy nie ustawiaj go jako widoczny. Użyj NotifyIcon (którego próbkę MSDN można znaleźć tutaj), aby napisać swoją aplikację.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-15 09:31:52
Oto Jak to zrobiłem z Visual Studio 2010 ,. NET 4
- Utwórz aplikację Windows Forms, Ustaw "Make single instance application" we właściwościach
- Dodaj ContextMenuStrip
- dodaj kilka wpisów do paska menu kontekstowego, kliknij na nie dwukrotnie, aby uzyskać programy obsługi, na przykład 'exit '(podwójne kliknięcie) - > handler - > me.Close ()
- Dodaj NotifyIcon, w designer set contextMenuStrip do tego, który właśnie stworzyłeś, wybierz ikonę (możesz znaleźć ją w Folder VisualStudio pod ' common7...')
- ustaw właściwości formularza w Projektancie: FormBorderStyle:none, ShowIcon:false, ShowInTaskbar:false, krycie:0%, WindowState: Minimalized Dodaj Mnie.Visible=false na końcu Form1_Load, spowoduje to ukrycie ikony, gdy użycie Ctrl + Tab
- Uruchom i dostosuj w razie potrzeby.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-27 19:37:34
Jest to bardzo przyjazny framework dla aplikacji obszaru powiadomień... wystarczy dodać NotificationIcon do formularza bazowego i zmienić automatycznie wygenerowany kod na kod poniżej:
public partial class Form1 : Form
{
private bool hidden = false;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
this.ShowInTaskbar = false;
//this.WindowState = FormWindowState.Minimized;
this.Hide();
hidden = true;
}
private void notifyIcon1_Click(object sender, EventArgs e)
{
if (hidden) // this.WindowState == FormWindowState.Minimized)
{
// this.WindowState = FormWindowState.Normal;
this.Show();
hidden = false;
}
else
{
// this.WindowState = FormWindowState.Minimized;
this.Hide();
hidden = true;
}
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-18 11:57:41
Po prostu dodaj
this.WindowState = FormWindowState.Minimized;
this.ShowInTaskbar = false;
Do obiektu formularza. Zobaczysz tylko ikonę na pasku zadań.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-01 15:39:53