pengembangan-web-mp-pd.com

Sembunyikan Formulir Tunggal saat Memulai

Saya memiliki aplikasi dengan satu formulir di dalamnya, dan pada metode Load saya perlu menyembunyikan formulir.

Formulir akan muncul dengan sendirinya ketika memiliki kebutuhan untuk (memikirkan sepanjang gaya popup Outlook 2003), tetapi saya bisa mencari cara untuk menyembunyikan formulir pada beban tanpa sesuatu yang berantakan.

Ada saran?

72
Pondidum

Saya datang pada ini dari C #, tetapi harus sangat mirip di vb.net.

Di file program utama Anda, dalam metode Utama, Anda akan memiliki sesuatu seperti:

Application.Run(new MainForm());

Ini menciptakan formulir utama baru dan membatasi masa berlaku aplikasi hingga masa berlaku formulir utama.

Namun, jika Anda menghapus parameter ke Application.Run (), maka aplikasi akan dimulai tanpa formulir yang ditampilkan dan Anda akan bebas untuk menampilkan dan menyembunyikan formulir sebanyak yang Anda suka.

Daripada menyembunyikan formulir dalam metode Load, inisialisasi formulir sebelum memanggil Application.Run (). Saya berasumsi formulir akan memiliki NotifyIcon di atasnya untuk menampilkan ikon di task bar - ini dapat ditampilkan bahkan jika formulir itu sendiri belum terlihat. Memanggil Form.Show() atau Form.Hide() dari penangan acara NotifyIcon akan menampilkan dan menyembunyikan formulir masing-masing.

108
Grokys

Biasanya Anda hanya akan melakukan ini ketika Anda menggunakan ikon baki atau metode lain untuk menampilkan formulir nanti, tetapi itu akan berfungsi dengan baik bahkan jika Anda tidak pernah menampilkan formulir utama Anda.

Buat bool di kelas Formulir Anda yang defaultnya salah:

private bool allowshowdisplay = false;

Kemudian timpa metode SetVisibleCore

protected override void SetVisibleCore(bool value)
{            
    base.SetVisibleCore(allowshowdisplay ? value : allowshowdisplay);
}

Karena Application.Run () mengatur formulir .Visible = true setelah memuat formulir ini akan mencegat itu dan mengaturnya ke false. Dalam kasus di atas, itu akan selalu mengaturnya ke false sampai Anda mengaktifkannya dengan mengatur allowhowdisplay menjadi true.

Sekarang itu akan menjaga bentuk dari menampilkan pada startup, sekarang Anda perlu mengaktifkan kembali SetVisibleCore untuk berfungsi dengan benar dengan mengatur allowhowdisplay = true. Anda akan ingin melakukan ini pada fungsi antarmuka pengguna apa pun yang menampilkan formulir. Dalam contoh saya ini adalah acara klik kiri di objek notiyicon saya:

private void notifyIcon1_MouseClick(object sender, MouseEventArgs e)
{
    if (e.Button == System.Windows.Forms.MouseButtons.Left)
    {
        this.allowshowdisplay = true;
        this.Visible = !this.Visible;                
    }
}
94
Paul Aicher

Saya menggunakan ini:

private void MainForm_Load(object sender, EventArgs e)
{
    if (Settings.Instance.HideAtStartup)
    {
        BeginInvoke(new MethodInvoker(delegate
        {
            Hide();
        }));
    }
}

Jelas Anda harus mengubah kondisi if dengan milik Anda.

33
Matías
    protected override void OnLoad(EventArgs e)
    {
        Visible = false; // Hide form window.
        ShowInTaskbar = false; // Remove from taskbar.
        Opacity = 0;

        base.OnLoad(e);
    }
19
Chriz

Pada waktu konstruksi formulir (Desainer, program Utama, atau konstruktor Formulir, tergantung pada tujuan Anda),

 this.WindowState = FormWindowState.Minimized;
 this.ShowInTaskbar = false;

Saat Anda perlu menunjukkan formulir, mungkin pada acara dari NotifyIcon Anda, balikkan seperlunya,

 if (!this.ShowInTaskbar)
    this.ShowInTaskbar = true;

 if (this.WindowState == FormWindowState.Minimized)
    this.WindowState = FormWindowState.Normal;

Acara yang ditampilkan/sembunyikan lebih mudah dapat menggunakan properti Terlihat Formulir atau metode Perlihatkan/Sembunyikan.

14
Jeff

Cobalah untuk menyembunyikan aplikasi dari bilah tugas juga.

Untuk melakukannya, silakan gunakan kode ini.

  protected override void OnLoad(EventArgs e)
  {
   Visible = false; // Hide form window.
   ShowInTaskbar = false; // Remove from taskbar.
   Opacity = 0;

   base.OnLoad(e);
   }

Terima kasih. Ruhul

5

Saya telah banyak berjuang dengan masalah ini dan solusinya jauh lebih sederhana daripada saya. Saya pertama kali mencoba semua saran di sini, tetapi kemudian saya tidak puas dengan hasilnya dan menyelidiki lebih sedikit. Saya menemukan bahwa jika saya menambahkan:

 this.visible=false;
 /* to the InitializeComponent() code just before the */
 this.Load += new System.EventHandler(this.DebugOnOff_Load);

Ini bekerja dengan baik. tapi saya ingin solusi yang lebih sederhana dan ternyata jika Anda menambahkan:

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

Anda akan ingin mengatur status jendela untuk diminimalkan, dan menunjukkan di taskbar menjadi false. Kemudian pada akhir form Anda, Load set state window untuk dimaksimalkan dan tampil di taskbar menjadi 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;
    }
3
George

Masukkan ini ke dalam Program.cs Anda:

FormName FormName = new FormName ();

FormName.ShowInTaskbar = false;
FormName.Opacity = 0;
FormName.Show();
FormName.Hide();

Gunakan ini ketika Anda ingin menampilkan formulir:

var principalForm = Application.OpenForms.OfType<FormName>().Single();
principalForm.ShowInTaskbar = true;
principalForm.Opacity = 100;
principalForm.Show();
3
Ben Yousaf

Override OnVisibleChanged in Form

protected override void OnVisibleChanged(EventArgs e)
{
    this.Visible = false;

    base.OnVisibleChanged(e);
}

Anda dapat menambahkan pemicu jika Anda mungkin perlu menunjukkannya di beberapa titik

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);
    }
...
}
1
LKane

Ini bekerja dengan baik untuk saya:

[STAThread]
    static void Main()
    {
        try
        {
            frmBase frm = new frmBase();               
            Application.Run();
        }

Ketika saya meluncurkan proyek, semuanya disembunyikan termasuk di taskbar kecuali saya perlu menunjukkannya ..

0
Willy David Jr

Meluncurkan aplikasi tanpa formulir berarti Anda harus mengelola sendiri startup aplikasi/shutdown.

Memulai formulir dari tak terlihat adalah opsi yang lebih baik.

0
Roger Willcocks
static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    MainUIForm mainUiForm = new MainUIForm();
    mainUiForm.Visible = false;
    Application.Run();
}
0
kilsek

Berikut ini adalah pendekatan sederhana:
Ini dalam C # (Saya tidak punya VB kompiler saat ini)

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;
}
0
aku
    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();
        }

Saya memiliki masalah yang mirip dengan poster di mana kode untuk menyembunyikan formulir dalam acara form_Load dinyalakan sebelum formulir selesai memuat, membuat metode Sembunyikan () gagal (tidak menabrak, hanya tidak berfungsi seperti yang diharapkan).

Jawaban lainnya bagus dan berfungsi, tetapi saya telah menemukan bahwa secara umum, acara form_Load sering memiliki masalah seperti itu dan apa yang ingin Anda masukkan di sana dapat dengan mudah masuk ke konstruktor atau acara form_Shown.

Ngomong-ngomong, ketika saya memindahkan kode yang sama yang memeriksa beberapa hal kemudian menyembunyikan formulir ketika itu tidak diperlukan (formulir masuk ketika satu masuk gagal), itu berfungsi seperti yang diharapkan.

0
blind Skwirl

Contoh ini mendukung tembus pandang total dan juga hanya NotifyIcon di baki Sistem dan tidak ada klik dan banyak lagi.

Lebih lanjut di sini: http://code.msdn.Microsoft.com/TheNotifyIconExample

0
TheUberOverLord

Sebagai pelengkap untuk tanggapan Groky (yang sebenarnya merupakan tanggapan terbaik sejauh ini dalam perspektif saya) kami juga dapat menyebutkan kelas ApplicationContext , yang memungkinkan juga (seperti yang ditunjukkan dalam sampel artikel) kemampuan untuk membuka dua (atau bahkan lebih) Formulir pada startup aplikasi, dan mengontrol masa pakai aplikasi dengan semuanya.

0
Eugenio Miró