programing

시작 시 단일 양식 숨기기

sourcejob 2023. 5. 9. 22:38
반응형

시작 시 단일 양식 숨기기

하나의 양식이 들어 있는 애플리케이션이 있는데, 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

반응형