어떻게 만들까요?시스템 트레이에서만 실행되는 NET Windows Forms 응용 프로그램?
Windows Forms 응용 프로그램을 시스템 트레이에서 실행하려면 어떻게 해야 합니까?
트레이로 최소화할 수 있는 응용프로그램이 아니라 트레이에만 존재하며 다음 이상의 기능이 없는 응용프로그램입니다.
- 우상
- 공구 팁 및
- 오른쪽 클릭 메뉴
코드 프로젝트 문서 작업 트레이 응용 프로그램 만들기에서는 시스템 트레이에만 존재하는 응용 프로그램을 만드는 매우 간단한 설명과 예제를 제공합니다.
기본적으로 변경합니다.Application.Run(new Form1());
된 줄Program.cs
대신 상속받은 클래스를 시작합니다.ApplicationContext
그 에게 그고해클생의성초가합기니록다도하화자리래를 하도록 .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();
}
}
mat1t에 따르면 - 알림을 추가해야 합니다.프로그램 아이콘을 누른 후 다음 코드와 같은 코드를 사용하여 도구 설명 및 상황에 맞는 메뉴를 설정합니다.
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)));
이 코드는 시스템 트레이에만 아이콘을 표시합니다.
this.notifyIcon.Visible = true; // Shows the notify icon in the system tray
양식이 있는 경우(이유에 관계없이) 다음이 필요합니다.
this.ShowInTaskbar = false; // Removes the application from the taskbar
Hide();
상황에 맞는 메뉴를 얻으려면 오른쪽 클릭이 자동으로 처리되지만, 왼쪽 클릭에서 일부 작업을 수행하려면 클릭 핸들러를 추가해야 합니다.
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;
}
}
와함트앱작으로 작성했습니다.NET 1.1과 저는 양식이 필요하지 않았습니다.
먼저프로트시개작하설체정다니합으로 합니다.Main
모듈에 정의되어 있습니다.
다음 요소를 .NotifyIcon
그리고.ContextMenu
.
다을포야합니다를 .MenuItem
"종료" 또는 이와 유사합니다.
을 .ContextMenu
에▁NotifyIcon
.
출을 합니다.Application.Run()
.
에 MenuItem
반드시 집합을 호출합니다.NotifyIcon.Visible = False
,그리고나서Application.Exit()
필한내용에다니추합에 하세요.ContextMenu
그리고 적절하게 처리합니다 :)
- 마법사를 사용하여 새 Windows 응용 프로그램을 만듭니다.
- 제
Form1
암호에서. - .cs를 제거하고 .cs 을 합니다.
Form1
. - 을 합니다.
NotifyIcon
클래스를 선택하여 시스템 트레이 아이콘을 만듭니다(아이콘 추가). - 상황에 맞는 메뉴를 추가합니다.
- 는또반에 합니다.
NotifyIcon
마우스를 클릭하여 마우스 오른쪽 버튼과 왼쪽 버튼을 구분하여 상황에 맞는 메뉴를 설정하고 버튼(오른쪽/왼쪽)을 누를 때마다 표시합니다. Application.Run()
앱을계실위해로 을 계속Application.Exit()
그만두기 위해오라bool bRunning = true; while(bRunning){Application.DoEvents(); Thread.Sleep(10);}
다음 럼세트그를 합니다.bRunning = false;
앱을 종료합니다.
"시스템 트레이" 응용 프로그램은 일반적인 Winforms 응용 프로그램일 뿐이며, Windows 시스템 트레이 영역에 아이콘을 만듭니다.sys.tray 아이콘을 만들려면 Notify를 사용합니다.아이콘 구성 요소는 도구 상자(공통 컨트롤)에서 찾을 수 있으며 다음과 같이 속성을 수정할 수 있습니다.아이콘, 도구 팁.또한 마우스 클릭 및 더블 클릭 메시지를 처리할 수 있습니다.
그리고 한 가지 더, 모양과 느낌 또는 표준 트레이 앱을 달성하기 위해 메인 폼 쇼 이벤트에 다음 줄을 추가합니다.
private void MainForm_Shown(object sender, EventArgs e)
{
WindowState = FormWindowState.Minimized;
Hide();
}
저는 수락된 답변을 에 적용했습니다.NET Core, 사용되지 않는 클래스에 대해 권장되는 대체 기능 사용:
- 컨텍스트 메뉴 -> 컨텍스트 메뉴 스트립
- MenuItem -> ToolStripMenuItem
Program.cs
namespace TrayOnlyWinFormsDemo
{
internal static class Program
{
[STAThread]
static void Main()
{
ApplicationConfiguration.Initialize();
Application.Run(new MyCustomApplicationContext());
}
}
}
MyCustomApplicationContext.cs
using TrayOnlyWinFormsDemo.Properties; // Needed for Resources.AppIcon
namespace TrayOnlyWinFormsDemo
{
public class MyCustomApplicationContext : ApplicationContext
{
private NotifyIcon trayIcon;
public MyCustomApplicationContext()
{
trayIcon = new NotifyIcon()
{
Icon = Resources.AppIcon,
ContextMenuStrip = new ContextMenuStrip()
{
Items = { new ToolStripMenuItem("Exit", null, Exit) }
},
Visible = true
};
}
void Exit(object? sender, EventArgs e)
{
trayIcon.Visible = false;
Application.Exit();
}
}
}
제가 알기로는 여전히 양식을 사용하여 신청서를 작성해야 하지만 양식에 대한 컨트롤이 없고 표시되지도 않습니다.알림 사용응용프로그램을 작성하는 아이콘(MSDN 샘플은 여기에서 찾을 수 있음).
다음은 Visual Studio 2010을 사용한 방법입니다.NET 4
- Windows Forms 응용 프로그램 만들기, 속성에서 '단일 인스턴스 응용 프로그램 만들기' 설정
- 컨텍스트 메뉴 스트립 추가
- 상황에 맞는 메뉴 스트립에 일부 항목을 추가하고, 이 항목을 두 번 클릭하여 '종료'(두 번 클릭) -> 핸들러 -> me와 같은 핸들러를 가져옵니다.닫기()
- 알림 추가아이콘, 디자이너가 방금 만든 것으로 설정한 컨텍스트 메뉴 스트립에서 아이콘을 선택합니다(Visual Studio 폴더의 'common7...'에서 일부를 찾을 수 있습니다).
- 디자이너에서 양식의 속성을 설정합니다.FormBorderStyle:없음, ShowIcon:false, ShowInTaskbar:false, 불투명도:0%, WindowState:최소화됨
- Form1_Load 끝에 Me.Visible=false를 추가합니다. +를 사용할 때 아이콘이 숨겨집니다.
- 실행하고 필요에 따라 조정합니다.
알림 영역 응용 프로그램에 매우 친숙한 프레임워크입니다.알림을 추가하기에 충분합니다.기본 양식 및 자동 생성된 코드를 아래 코드로 변경하려면 아이콘:
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;
}
}
}
.Net 6에서 저는 다음과 같이 반에서 열심히 공부해야 했습니다.
private NotifyIcon trayIcon;
private ContextMenuStrip contextMenu1;
private ToolStripMenuItem menuItem1;
public MyCustomApplicationContext()
{
contextMenu1 = new System.Windows.Forms.ContextMenuStrip();
menuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.menuItem1.Text = "E&xit";
this.menuItem1.Click += new System.EventHandler(Exit);
this.contextMenu1.Items.AddRange(
new System.Windows.Forms.ToolStripMenuItem[] {this.menuItem1 });
trayIcon = new NotifyIcon(){Icon = Resources.AppIcon, ContextMenuStrip = this.contextMenu1, Visible = true };
}
notifyIcon1->ContextMenu = gcnew
System::Windows::Forms::ContextMenu();
System::Windows::Forms::MenuItem^ nIItem = gcnew
System::Windows::Forms::MenuItem("Open");
nIItem->Click += gcnew System::EventHandler(this, &your_class::Open_NotifyIcon);
notifyIcon1->ContextMenu->MenuItems->Add(nIItem);
양식을 작성하고 수정한 후 다음으로 전달할 수 있습니다.Application.Run
매개 변수로:
internal static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
ApplicationConfiguration.Initialize();
var form = new Form1();
form.Hide();
form.Opacity = 0;
form.ShowInTaskbar = false;
Application.Run(form);
}
}
추가할 항목NotifyIcon
그리고.ContextMenu
(필요한 경우) 일반 앱으로 설계 시 양식에 추가할 수 있습니다.다음 항목을 확인합니다.Notifyicon
이라Visible
아이콘이 연결되어 있습니다.이렇게 하면 나중에 어떤 이유로든 필요한 양식으로 작업할 수 있습니다.
간단히 추가
this.WindowState = FormWindowState.Minimized;
this.ShowInTaskbar = false;
양식 개체로 이동합니다.시스템 트레이에는 아이콘만 표시됩니다.
언급URL : https://stackoverflow.com/questions/995195/how-can-i-make-a-net-windows-forms-application-that-only-runs-in-the-system-tra
'programing' 카테고리의 다른 글
Python 3.5에서 코루틴과 미래/작업의 차이점은 무엇입니까? (0) | 2023.05.06 |
---|---|
git diff 도구, 직렬이 아닌 모든 diff 파일을 즉시 엽니다. (0) | 2023.05.06 |
mongoose를 사용하여 mongodb에서 컬렉션의 만료 시간 설정 (0) | 2023.05.06 |
파이썬 사전: u' chars 제거 (0) | 2023.05.06 |
WPF의 확인란 왼쪽에 있는 텍스트? (0) | 2023.05.06 |