Как создать заставку в приложении windows forms?

Мне нужно показать заставку при запуске приложения в течение нескольких секунд. Кто-нибудь знает, как это реализовать?

будет очень признателен за помощь.

11 ответов


во-первых, создайте заставку в виде без полей, неподвижной формы с изображением на нем, установить для первоначального отображения в центре экрана, окрашены так, как вы хотите. Все это можно установить из конструктора; в частности, вы хотите:

  • установите свойства ControlBox, MaximizeBox, MinimizeBox и ShowIcon формы в "False"
  • установить свойство StartPosition в "CenterScreen"
  • задайте для свойства FormBorderStyle значение "Нет"!--4-->
  • установите для формы MinimumSize и MaximumSize значения, совпадающие с ее начальным размером.

затем вам нужно решить, где его показать и где его отклонить. Эти две задачи должны выполняться на противоположных сторонах основной логики запуска вашей программы. Это может быть в подпрограмме main() вашего приложения или, возможно, в обработчике нагрузки вашей основной формы приложения; везде, где вы создаете большие дорогие объекты, читаете настройки с жесткого диска и вообще занимает много времени, чтобы сделать вещи за кулисами, прежде чем появится главный экран приложения.

тогда все, что вам нужно сделать, это создать экземпляр вашей формы, показать() его и сохранить ссылку на него во время инициализации запуска. После загрузки основной формы закройте ее ().

Если ваш заставка будет иметь анимированное изображение на нем, окно должно быть также "двойной буферизацией", и вы должны быть абсолютно уверены, что вся логика инициализации происходит вне потока GUI (то есть вы не можете иметь свою основную логику загрузки в обработчике загрузки mainform; вам придется создать BackgroundWorker или какую-либо другую потоковую процедуру.


образец ниже от Telerik использует однако контроль ShapedForm изменить нормальную форму Windows. Это самый простой и лучший способ, который я видел.

http://www.telerik.com/support/kb/winforms/forms-and-dialogs/details/add-splashscreen-to-your-application


вот некоторые шаги руководства...

  1. создайте форму без полей (это будет ваш заставка)
  2. при запуске приложения запустите таймер (с интервалом в несколько секунд)
  3. показать форму всплеска
  4. На Таймер.Отметьте событие, остановите таймер и закройте форму всплеска-затем покажите свою основную форму приложения

дайте этому идти, и если вы застряли, то вернуться и задать более конкретные вопросы, касающиеся вашего проблемы


простое и удобное решение для создания заставки

  1. открыть новую форму использовать имя "SPLASH"
  2. изменить фоновое изображение, что вы хотите
  3. выберите индикатор выполнения
  4. выберите таймер

теперь установите таймер ТИК в таймер:

private void timer1_Tick(object sender, EventArgs e)
{
    progressBar1.Increment(1);
    if (progressBar1.Value == 100) timer1.Stop();        
}

добавить новую форму используйте имя "форма-1" и используйте следующую команду в форме 1.

Примечание: форма всплеска работает перед открытием form1

  1. добавить эта библиотека!--5-->

    using System.Threading;
    
  2. создать функции

    public void splash()
    {     
        Application.Run(new splash());
    }
    
  3. используйте следующую команду в инициализации, как показано ниже.

    public partial class login : Form
    {     
        public login()
        {
            Thread t = new Thread(new ThreadStart(splash));
            t.Start();
            Thread.Sleep(15625);
    
            InitializeComponent();
    
            enter code here
    
            t.Abort();
        }
    }
    

http://solutions.musanitech.com/c-create-splash-screen/


создать всплеск

private void timer1_Tick(object sender, EventArgs e)
{
    counter++;
    progressBar1.Value = counter *5;
    // label2.Text = (5*counter).ToString();
    if (counter ==20)
    {
        timer1.Stop();
        this.Close();
    }
}
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.SystemColors.GradientInactiveCaption;
this.ClientSize = new System.Drawing.Size(397, 283);
this.ControlBox = false;
this.Controls.Add(this.label2);
this.Controls.Add(this.progressBar1);
this.Controls.Add(this.label1);
this.ForeColor = System.Drawing.SystemColors.ControlLightLight;
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.Name = "Splash";
this.ShowIcon = false;
this.ShowInTaskbar = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.ResumeLayout(false);
this.PerformLayout();

тогда в вашем приложении

sp = new Splash();
sp.ShowDialog();

другие ответы здесь хорошо охватывают это, но стоит знать, что в Visual Studio есть встроенная функциональность для заставок: если вы откроете свойства проекта для приложения windows form и посмотрите вкладку Приложения, внизу есть опция "заставка:". Вы просто выбираете, какую форму в вашем приложении вы хотите отобразить в качестве заставки, и она позаботится о том, чтобы показать ее при запуске приложения и скрыть ее после отображения основной формы.

вы все еще нужно настроить форму, как описано выше (с правильными границами, позиционированием,калибровкой и т. д.)


здесь Хорошая Заставка на CodeProject.

Это произошло с

  • Fade In
  • Прогресс-Бар
  • Статус
  • Затухание
  • дважды щелкните, чтобы закрыть

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


сначала вы должны создать форму С или без границы (граница-менее предпочтительна для этих вещей)

public class SplashForm : Form
{
    Form _Parent;
    BackgroundWorker worker;
    public SplashForm(Form parent)
    {
         InitializeComponent();
         BackgroundWorker worker = new BackgroundWorker();
         this.worker.DoWork += new System.ComponentModel.DoWorkEventHandler(this.worker _DoWork);
         backgroundWorker1.RunWorkerAsync();
         _Parent = parent;
    }
    private void worker _DoWork(object sender, DoWorkEventArgs e)
    {
         Thread.sleep(500);
         this.hide();
         _Parent.show();
    }     
}

в Main вы должны использовать это

   static class Program
        {
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new SplashForm());
            }
        }

Я хотел заставку, которая будет отображаться до тех пор, пока основная форма программы не будет готова к отображению, поэтому таймеры и т. д. Мне не нужны. Я также хотел, чтобы все было как можно проще. Мое приложение начинается с (сокращенно):

static void Main()
{
    Splash frmSplash = new Splash();
    frmSplash.Show();
    Application.Run(new ReportExplorer(frmSplash));
}

затем ReportExplorer имеет следующее:

public ReportExplorer(Splash frmSplash)
{
    this.frmSplash = frmSplash;
    InitializeComponent();
}

наконец, после завершения инициализации:

if (frmSplash != null) 
{
     frmSplash.Close();
     frmSplash = null;
}

может быть, я что-то пропустил, но это кажется намного проще, чем возиться с нитями и таймеры.


попробуйте этот код

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

        private void timer1_Tick(object sender, EventArgs e)
        {
            progressBar1.Increment(1);
            if (progressBar1.Value == 100)
            {
                timer1.Stop();
                this.Hide();
                Form frm = new login();
                frm.Show();
            }
        }
    }

Попробуйте Это:

namespace SplashScreen
{
    public partial class frmSplashScreen : Form
    {
        public frmSplashScreen()
        {
            InitializeComponent();
        }

        public int LeftTime { get; set; }

        private void frmSplashScreen_Load(object sender, EventArgs e)
        {
            LeftTime = 20;
            timer1.Start();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            if (LeftTime > 0)
            {
                LeftTime--;
            }
            else
            {
                timer1.Stop();
                new frmHomeScreen().Show();
                this.Hide();
            }
        }
    }
}