Подтвердить что ты не робот

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

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

Будем очень благодарны за помощь.

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 3

Ниже приведены некоторые ориентиры...

  • Создайте форму без полей (это будет ваш заставку)
  • При запуске приложения запустите таймер (с интервалом в несколько секунд)
  • Покажите свою бланковую форму
  • В режиме Timer.Tick, таймер остановки и закрытие формы Splash - затем покажите свою основную форму заявки

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

Ответ 4

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

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

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

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

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

Примечание. Форма всплеска работает до открытия формы1

  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/

Ответ 5

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

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

Ответ 6

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

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

Ответ 7

В CodeProject есть Довольно хороший экран заставки.

Он поставляется с

  • Fade In
  • Панель выполнения
  • Значок состояния
  • Fade Out
  • Двойной щелчок для отклонения

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

Ответ 8

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

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

Ответ 9

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

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

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

Ответ 10

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

Допустим, у вас есть "splashscreen" вашей формы с анимацией и ваш "основной", который имеет весь ваш код приложения.

 [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Thread mythread;
        mythread = new Thread(new ThreadStart(ThreadLoop));
        mythread.Start();
        Application.Run(new MainForm(mythread));           
    }

    public static void ThreadLoop()
    {
        Application.Run(new SplashScreenForm());           
    }

В вашей основной форме в конструкторе:

 public MainForm(Thread splashscreenthread)
    {
        InitializeComponent();

        //add your constructor code

        splashscreenthread.Abort();            
    }

Таким образом, заставка будет длиться только для загрузки основной формы.

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

пример моего заставки:

int status = 0;
private bool IsRunning = false;
    public Form1()
    {
        InitializeComponent();
        StartAnimation();
    }

    public void StartAnimation()
    {
        backgroundWorker1.WorkerReportsProgress = false;
        backgroundWorker1.WorkerSupportsCancellation = true;
        IsRunning = true;
        backgroundWorker1.RunWorkerAsync();
    }


    public void StopAnimation()
    {
        backgroundWorker1.CancelAsync();
    }

    delegate void UpdatingThreadAnimation();
    public void UpdateAnimationFromThread()
    {

        try
        {
            if (label1.InvokeRequired == false)
            {
                UpdateAnimation();
            }
            else
            {
                UpdatingThreadAnimation d = new UpdatingThreadAnimation(UpdateAnimationFromThread);
                this.Invoke(d, new object[] { });
            }
        }
        catch(Exception e)
        {

        }
    }

 private void UpdateAnimation()
    {
    if(status ==0) 
    {
    // mypicture.image = image1
     }else if(status ==1)
     {
    // mypicture.image = image2
     }
    //doing as much as needed

      status++;
        if(status>1) //change here if you have more image, the idea is to set a cycle of images
        {
            status = 0;
        }
        this.Refresh();
    }

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
        BackgroundWorker worker = sender as BackgroundWorker;
        while (IsRunning == true)
        {
            System.Threading.Thread.Sleep(100);
            UpdateAnimationFromThread();
        }
    }

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

Ответ 11

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

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

Ответ 12

Попробуй это:

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