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


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

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

11 51

11 ответов:

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

  • установите свойства ControlBox, MaximizeBox, MinimizeBox и ShowIcon формы в значение "False"
  • установите свойство StartPosition в "CenterScreen"
  • установите для свойства FormBorderStyle значение "Нет"
  • установите минимальный и максимальный размер формы таким же, как и ее начальный размер.

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

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

Если ваш заставка будет иметь анимированное изображение на нем, окно должно быть" двойной буферизацией", а также, и вы должны быть абсолютно уверены, что все логика инициализации происходит вне потока 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. открыть новую форму использовать имя "всплеск"
  2. изменить фоновое изображение, что вы хотите
  3. выберите индикатор выполнения
  4. выберите таймер

теперь установите отметку таймера в таймере:

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

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

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

  1. добавить эта библиотека

    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
  • Прогресс-Бар
  • Статус
  • Fade Out
  • дважды щелкните, чтобы закрыть

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

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

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