Как построить заставку в приложении windows forms?
Мне нужно показать заставку на моем запустить приложение в течение нескольких секунд. Кто-нибудь знает, как это реализовать?
будет очень признателен за помощь.
11 ответов:
во-первых, создайте свой экран-заставку в виде бескаркасной, неподвижной формы с вашим изображением на нем, установленным для первоначального отображения в центре экрана, окрашенного так, как вы хотите. Все это можно установить из конструктора; в частности, вы хотите:
- установите свойства ControlBox, MaximizeBox, MinimizeBox и ShowIcon формы в значение "False"
- установите свойство StartPosition в "CenterScreen"
- установите для свойства FormBorderStyle значение "Нет"
- установите минимальный и максимальный размер формы таким же, как и ее начальный размер.
затем вам нужно решить, где его показать, а где уволить. Эти две задачи должны происходить на противоположных сторонах основной логики запуска вашей программы. Это может быть в основной () подпрограмме вашего приложения или, возможно, в обработчике загрузки основной формы приложения; везде, где вы создаете большие дорогостоящие объекты, читаете настройки с жесткого диска и вообще требуется много времени, чтобы сделать вещи за кулисами, прежде чем появится главный экран приложения.
затем все, что вам нужно сделать, это создать экземпляр вашей формы, показать() его и сохранить ссылку на него во время инициализации запуска. После загрузки основной формы закройте ее ().
Если ваш заставка будет иметь анимированное изображение на нем, окно должно быть" двойной буферизацией", а также, и вы должны быть абсолютно уверены, что все логика инициализации происходит вне потока GUI (это означает, что вы не можете иметь свою основную логику загрузки в обработчике загрузки mainform; вам придется создать BackgroundWorker или какую-либо другую потоковую процедуру.
в приведенном ниже примере из Telerik используется элемент управления ShapedForm, однако измените его на обычную форму Windows. Это самый простой и лучший способ, который я видел.
вот некоторые шаги руководства...
- создать форму без полей (это будет ваш заставка)
- при запуске приложения запустите таймер (с интервалом в несколько секунд)
- показать форму всплеска
- На Таймер.Отметьте событие, остановите таймер и закройте форму всплеска-затем покажите свою основную форму заявки
дайте этому идти, и если вы застряли, то вернуться и задать более конкретные вопросы, касающиеся вашего проблемы
простое и легкое решение для создания заставки
- открыть новую форму использовать имя "всплеск"
- изменить фоновое изображение, что вы хотите
- выберите индикатор выполнения
- выберите таймер
теперь установите отметку таймера в таймере:
private void timer1_Tick(object sender, EventArgs e) { progressBar1.Increment(1); if (progressBar1.Value == 100) timer1.Stop(); }
добавить новую форму использовать имя "форма-1" и использовать следующую команду в форме 1.
Примечание: форма всплеска работает перед открытием form1
добавить эта библиотека
using System.Threading;
создать функции
public void splash() { Application.Run(new splash()); }
используйте следующую команду в инициализации, как показано ниже.
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(); } }
создать всплеск
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(); } } } }