시작 시 단일 양식 숨기기
하나의 양식이 들어 있는 애플리케이션이 있는데, Load 방법에서는 양식을 숨겨야 합니다.
아웃룩 2003 스타일 팝업의 줄을 따라 생각해야 할 때 폼이 자동으로 표시되지만, 적재 시 지저분한 것 없이 폼을 숨기는 방법을 찾을 수 없습니다.
좋은 의견이라도 있나?
일반적으로 이 작업은 나중에 양식을 표시하기 위해 트레이 아이콘이나 다른 방법을 사용할 때만 수행되지만 기본 양식을 표시하지 않더라도 잘 수행됩니다.
Form 클래스에 false로 기본 설정된 boolean을 만듭니다.
private bool allowshowdisplay = false;
그런 다음 SetVisibleCore 메서드를 재정의합니다.
protected override void SetVisibleCore(bool value)
{
base.SetVisibleCore(allowshowdisplay ? value : allowshowdisplay);
}
애플리케이션 때문에.Run()은 양식을 설정합니다.Visible = true는 폼을 로드한 후 이를 가로채 false로 설정합니다.위의 경우 show display를 true로 설정하여 활성화할 때까지 항상 false로 설정됩니다.
이제 시작할 때 폼이 표시되지 않도록 하려면 allow show display = true를 설정하여 SetVisibleCore를 다시 활성화해야 합니다.양식을 표시하는 모든 사용자 인터페이스 기능에서 이 작업을 수행할 수 있습니다.예를 들어, 내 Notiicon 객체의 왼쪽 클릭 이벤트입니다.
private void notifyIcon1_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
this.allowshowdisplay = true;
this.Visible = !this.Visible;
}
}
저는 C#에서 이것을 시도하고 있지만, vb.net 에서도 매우 비슷할 것입니다.
메인 프로그램 파일의 메인 메소드에는 다음과 같은 것이 있습니다.
Application.Run(new MainForm());
그러면 새 기본 양식이 생성되고 응용프로그램의 수명이 기본 양식의 수명으로 제한됩니다.
그러나 Application에 대한 매개 변수를 제거하는 경우.실행()하면 양식이 표시되지 않고 응용프로그램이 시작되고 원하는 만큼 양식을 표시하거나 숨길 수 있습니다.
Load 메서드에서 양식을 숨기는 대신 Application을 호출하기 전에 양식을 초기화합니다.에 알림 ()이 으로 예상됩니다. 양식에 알림 메시지가 있을 것입니다.아이콘을 눌러 작업 표시줄에 아이콘을 표시합니다. 양식 자체가 아직 보이지 않더라도 표시할 수 있습니다.하기 르기Form.Show()또는Form.Hide()알림 처리기에서아이콘 이벤트는 양식을 각각 표시하고 숨깁니다.
사용자:
private void MainForm_Load(object sender, EventArgs e)
{
if (Settings.Instance.HideAtStartup)
{
BeginInvoke(new MethodInvoker(delegate
{
Hide();
}));
}
}
분명히 당신은 당신의 조건으로 if 조건을 변경해야 합니다.
protected override void OnLoad(EventArgs e)
{
Visible = false; // Hide form window.
ShowInTaskbar = false; // Remove from taskbar.
Opacity = 0;
base.OnLoad(e);
}
양식 구축 시간(목표에 따라 디자이너, 프로그램 메인 또는 양식 생성자),
this.WindowState = FormWindowState.Minimized;
this.ShowInTaskbar = false;
양식을 표시해야 하는 경우(예: 알림 이벤트에서)아이콘, 필요에 따라 역방향으로 이동합니다.
if (!this.ShowInTaskbar)
this.ShowInTaskbar = true;
if (this.WindowState == FormWindowState.Minimized)
this.WindowState = FormWindowState.Normal;
연속적인 표시/숨기기 이벤트는 양식의 표시 속성 또는 표시/숨기기 메서드를 더 간단하게 사용할 수 있습니다.
작업 표시줄에서도 앱을 숨기십시오.
그러기 위해서는 이 코드를 사용하십시오.
protected override void OnLoad(EventArgs e)
{
Visible = false; // Hide form window.
ShowInTaskbar = false; // Remove from taskbar.
Opacity = 0;
base.OnLoad(e);
}
감사합니다. Ruhul.
다음을 사용하여 기본 양식을 확장합니다.
using System.Windows.Forms;
namespace HideWindows
{
public class HideForm : Form
{
public HideForm()
{
Opacity = 0;
ShowInTaskbar = false;
}
public new void Show()
{
Opacity = 100;
ShowInTaskbar = true;
Show(this);
}
}
}
예:
namespace HideWindows
{
public partial class Form1 : HideForm
{
public Form1()
{
InitializeComponent();
}
}
}
이 기사의 자세한 내용(스페인어):
http://codelogik.net/2008/12/30/primer-form-oculto/
저는 이 문제로 많은 어려움을 겪었고 해결책은 생각보다 훨씬 간단합니다.저는 처음에 여기서 모든 제안을 시도했지만, 그 후 결과에 만족하지 못하고 조금 더 조사했습니다.다음 항목을 추가하면 다음과 같습니다.
this.visible=false;
/* to the InitializeComponent() code just before the */
this.Load += new System.EventHandler(this.DebugOnOff_Load);
잘 작동하고 있습니다. 하지만 저는 더 간단한 해결책을 원했고, 당신이 다음을 추가하면 된다는 것이 밝혀냈습니다.
this.visible=false;
/* to the start of the load event, you get a
simple perfect working solution :) */
private void
DebugOnOff_Load(object sender, EventArgs e)
{
this.Visible = false;
}
창 상태를 최소화로 설정하고 작업 표시줄에 거짓으로 표시합니다.그런 다음 양식 끝에 창 상태를 최대화로 로드하고 작업 표시줄에 true로 표시
public frmMain()
{
Program.MainForm = this;
InitializeComponent();
this.WindowState = FormWindowState.Minimized;
this.ShowInTaskbar = false;
}
private void frmMain_Load(object sender, EventArgs e)
{
//Do heavy things here
//At the end do this
this.WindowState = FormWindowState.Maximized;
this.ShowInTaskbar = true;
}
이것을 Program.cs 에 저장합니다.
FormName FormName = new FormName ();
FormName.ShowInTaskbar = false;
FormName.Opacity = 0;
FormName.Show();
FormName.Hide();
양식을 표시할 때 사용합니다.
var principalForm = Application.OpenForms.OfType<FormName>().Single();
principalForm.ShowInTaskbar = true;
principalForm.Opacity = 100;
principalForm.Show();
이것은 저에게 완벽하게 효과가 있습니다.
[STAThread]
static void Main()
{
try
{
frmBase frm = new frmBase();
Application.Run();
}
프로젝트를 시작할 때 작업 표시줄에 표시할 필요가 없는 한 모든 것이 숨겨졌습니다.
변경된 양식에 대해 표시 시 재정의
protected override void OnVisibleChanged(EventArgs e)
{
this.Visible = false;
base.OnVisibleChanged(e);
}
어느 시점에 트리거를 표시해야 할 경우 트리거를 추가할 수 있습니다.
public partial class MainForm : Form
{
public bool hideForm = true;
...
public MainForm (bool hideForm)
{
this.hideForm = hideForm;
InitializeComponent();
}
...
protected override void OnVisibleChanged(EventArgs e)
{
if (this.hideForm)
this.Visible = false;
base.OnVisibleChanged(e);
}
...
}
양식 없이 앱을 실행한다는 것은 응용 프로그램 시작/종료를 직접 관리해야 한다는 것을 의미합니다.
보이지 않는 형태로 시작하는 것이 더 나은 옵션입니다.
이 예는 알림만 지원할 뿐만 아니라 전체적인 보이지 않음을 지원합니다.시스템 트레이에서 아이콘을 클릭하지 않고 클릭할 수 없습니다.
더 많은 정보: http://code.msdn.microsoft.com/TheNotifyIconExample
Groky의 응답을 보완하기 위해 (제가 보기에는 최고의 응답입니다) ApplicationContext 클래스를 언급할 수도 있습니다. 이 클래스를 사용하면 응용프로그램 시작 시 두 개 이상의 양식을 열 수 있고 모든 양식으로 응용프로그램 수명을 제어할 수도 있습니다.
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
MainUIForm mainUiForm = new MainUIForm();
mainUiForm.Visible = false;
Application.Run();
}
폼 로드 이벤트에서 폼을 숨기기 위한 코드가 로드되기 전에 실행되어 폼 로드가 완료되기 전에 Hide() 메서드가 실패하는 포스터와 유사한 문제가 있었습니다.
다른 답변은 훌륭하고 효과적이지만 일반적으로 form_Load 이벤트에는 이러한 문제가 자주 발생하며 여기에 넣을 내용은 생성자 또는 form_Show 이벤트에 쉽게 포함될 수 있습니다.
어쨌든, 제가 몇 가지를 확인한 다음 필요하지 않을 때 양식을 숨긴 동일한 코드를 이동했을 때(싱글 사인이 실패할 때 로그인 양식). 예상대로 작동했습니다.
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form1 form1 = new Form1();
form1.Visible = false;
Application.Run();
}
private void ExitToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Close();
Application.Exit();
}
간단한 접근 방식은 다음과 같습니다.
C#에 있습니다(현재 VB 컴파일러가 없습니다).
public Form1()
{
InitializeComponent();
Hide(); // Also Visible = false can be used
}
private void Form1_Load(object sender, EventArgs e)
{
Thread.Sleep(10000);
Show(); // Or visible = true;
}
디자이너에서 양식의 표시 속성을 false로 설정합니다.그런 다음 필요할 때까지 Show()를 호출하지 마십시오.
더 나은 패러다임은 필요할 때까지 양식의 인스턴스를 만들지 않는 것입니다.
다양한 제안을 바탕으로 제가 해야 할 일은 다음과 같습니다.
양식 숨기기
Me.Opacity = 0
Me.ShowInTaskbar = false
양식 표시하기
Me.Opacity = 100
Me.ShowInTaskbar = true
왜 그런 걸 좋아할까요?
콘솔 앱처럼 시작하여 필요할 때 양식을 보여주는 것이 어떻습니까?콘솔 앱과 양식 앱을 구분하는 몇 가지 참조 자료 외에는 없습니다.
양식이 필요하지 않을 때 양식에 필요한 메모리를 가져 갈 필요가 없습니다.
저는 이렇게 합니다 - 제 관점에서 가장 쉬운 방법은:
양식의 '시작 위치'를 '수동'으로 설정하고 양식의 설계자에 추가합니다.
Private Sub InitializeComponent()
.
.
.
Me.Location=New Point(-2000,-2000)
.
.
.
End Sub
위치가 화면 크기를 벗어나거나 아래로 설정되어 있는지 확인합니다.나중에 양식을 표시하려면 위치를 화면의 치수 내에 있는 위치로 설정합니다.
언급URL : https://stackoverflow.com/questions/70272/single-form-hide-on-startup
'programing' 카테고리의 다른 글
| 생성자와 ngOnInit의 차이점 (0) | 2023.05.09 |
|---|---|
| 왜 그럴까요?수집이 null인 경우 각 루프 스로우 NullRefException에 대한 NET? (0) | 2023.05.09 |
| 문자열의 마지막 단어 바꾸기 - C# (0) | 2023.05.09 |
| C#에서 여러 공간을 단일 공간으로 대체하려면 어떻게 해야 합니까? (0) | 2023.05.09 |
| PEM 인코딩 인증서에서 SSL 인증서 만료 날짜를 확인하는 방법은 무엇입니까? (0) | 2023.05.09 |