2015-03-26 4 views
1

Каков наилучший способ скрыть основную форму при запуске приложения, чтобы показать ее позже?Каков наилучший способ скрыть основную форму при запуске приложения

Если я просто позвоню в Hide методе в событии Load этого вида, это дает страшную вспышку в течение некоторого времени, прежде чем ее действительно спрятать.

Заранее спасибо.

+0

Самый простой способ - установить 'Opacity = 0' в конструкторе. – TaW

+1

Здесь есть много ответов, которые, вероятно, помогут вам, но я просто спрашиваю об этом из любопытства: почему вы скрываете главный форма и как долго в запуске приложения будет отображаться основная форма? Если это просто из-за загрузки данных, то метод заставки - лучший способ пойти, но мне просто интересно узнать о конечной игре здесь. – JNYRanger

ответ

2

Самый простой способ - установить Opacity = 0 в дизайнере. Конечно, вы хотите, чтобы установить его в 100 в какой-то момент позже ..

Или вы можете использовать экранную заставку, может быть, как это:

static class Program 
{ 
    /// <summary> 
    /// Der Haupteinstiegspunkt für die Anwendung. 
    /// </summary> 
    [STAThread] 
    static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Splash splash = new Splash(); 
     splash.Show(); 
     Application.Run(); 
    } 
} 

С заставках:

public partial class Splash : Form 
{ 
    public Splash() 
    { 
     InitializeComponent(); 
    } 

    Form1 form1 = new Form1(); 

    private void Splash_Load(object sender, EventArgs e) 
    { 

     form1.WindowState = FormWindowState.Minimized; 
     form1.Hide(); 
    } 

} 

Вы можете показать это, например, когда экран выплеска закрыт:

private void Splash_FormClosed(object sender, FormClosedEventArgs e) 
{ 
    form1.Show(); 
    form1.WindowState = FormWindowState.Normal; 
} 

Что будет происходить всякий раз, когда вы хотите, или, может быть, через какое-то время:

public Splash() 
{ 
    InitializeComponent(); 
    Timer timer = new Timer(); 
    timer.Interval = 5000; 
    timer.Enabled = true; 
    timer.Tick += (s,e) =>{ this.Close();}; 
} 

Поскольку программа не смотрит формы, чтобы закрыть нам также нужно добавить это закрытое мероприятие главной формы:

private void Form1_FormClosed(object sender, FormClosedEventArgs e) 
{ 
    Application.Exit(); 
} 

Если вы не хотите, чтобы заставка быть видимым на все, что вы можете скрыть это так:

public Splash() 
{ 
    InitializeComponent(); 
    this.Opacity = 0; 

Но, пожалуйста, убедитесь, что вы не оставите пользователей в слепую: Когда я начинаю программу я хочу immediat ответ!

0

Вы можете продолжить так:

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

Альтернативный способ может быть использование метода Application.Run(Form). Вы можете создать основную форму с свойством Visible, изначально установленным на false, и не давайте аргументов Application.Run() в основном цикле.

+0

Если я просто вызываю метод 'Hide' в событии' Load' этой формы, он на некоторое время дает страшную вспышку, прежде чем скрывать ее – FrozenHeart

+0

@FrozenHeart: - Я добавил еще один альтернативный метод. Проверьте, что –

+0

В этом случае событие 'Load' никогда не будет вызываться. Как я могу поймать его, чтобы сделать что-то? – FrozenHeart

0

Измените класс программы - это то, где создается и отображается форма:

static class Program { 
    /// <summary> 
    /// The main entry point for the application. 
    /// </summary> 
    [STAThread] 
    static void Main() { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Form1 frm = new Form1(); 
     frm.Visible = false; 
     Application.Run(); 
    } 
} 

Надеюсь, ваши добавления какой-то пользовательский интерфейс?

+0

В этом случае событие 'Load' никогда не будет вызываться.Как я могу поймать его, чтобы сделать что-то? – FrozenHeart

+0

Это зависит от того, что вы хотите сделать. Я не вижу использования для приложения форм Windows без формы, но вы знаете, что вы делаете ... попробуйте установить windowstate для минимизации, а свойство showInTaskbar - false. Просто заметил, что вы приняли ответ, который делает что-то еще полностью ... Я все равно оставлю это здесь ... –

Смежные вопросы