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