Задержка времени перед перенаправлением [дубликат]

Я сталкиваюсь с той же проблемой с sts 3.8.4, поэтому я попробовал разные настройки, но не повезло, я переустанавливаю jdk снова, но попытался, но такую ​​же проблему. Наконец, я скачал sts 3.8.2. Использование окон 8, 64 бит os. спасибо

50
задан Jim G. 10 December 2013 в 23:43
поделиться

11 ответов

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

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

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

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

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

66
ответ дан KeithS 15 August 2018 в 16:24
поделиться
  • 1
    Экран заставки должен также запускаться в отдельном потоке, чтобы запустить процесс в фоновом режиме, чтобы ваше приложение могло работать во время отображения (например, подключиться к вашей базе данных, загружать файлы). Он сообщает пользователю, что ваше приложение работает, и оно не теряет времени, просто оставаясь там на X секунд. – Scott Wylie 1 November 2011 в 02:40
  • 2
    +1 для деталей. Я создал всплеск здесь, используя новый цикл приложения (Application.Run) для него и одноэлементный подход, чтобы я мог создать всплеск с самого начала и закрыть его непосредственно перед отображением формы входа. – Anderson Matos 1 November 2011 в 05:47
  • 3
    @ALMMa. Я сделал практически то же самое, что и создание моей реализации заставки, в том числе возможность явно скрывать или «утка». это либо по команде, либо если определенные типы окон (ike Windows Security login dialogs) были обнаружены. – KeithS 13 February 2015 в 00:08

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

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();
2
ответ дан Andrew Barber 15 August 2018 в 16:24
поделиться

Сначала вы должны создать форму с или без границы (для этих целей предпочтительнее 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());
            }
        }
1
ответ дан Burimi 15 August 2018 в 16:24
поделиться
  • 1
    Это плохо. Это сделает вашу SplashForm, основную форму вашего приложения. Это означает, что при закрытии приложения приложение остановится – Matias Cicero 19 June 2014 в 16:16

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

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

14
ответ дан driverobject 15 August 2018 в 16:24
поделиться
  • 1
    Это на самом деле более информативный, чем принятый ответ, с образцом кода, хотя это своего рода ответ только для ссылок. – Kaitlyn 3 September 2015 в 19:18
  • 2
    Проблема у меня здесь, когда форма открыта, она открывается в этой задней части всех других окон, и я не могу понять, как перенести ее на передний план. Ничто не работает. Какие-либо предложения? – JSON 13 April 2016 в 18:09
  • 3
    Я понял это. В случае, если кто-то другой имеет такую ​​же проблему, добавьте эти две строки в конец вашего метода mainForm_Load ((Form1)) .TopMost = true; ((Form1) отправитель) .BringToFront (); – JSON 13 April 2016 в 18:19
  • 4
    @JSON - Вызов Активировать () из обработчика нагрузки основной формы, а не устанавливать TopMost = true или вызывать BringToFront (). Согласно MS, «Самые верхние формы всегда отображаются в самой высокой точке в z-порядке окон на рабочем столе», и вы не хотите этого поведения для большинства приложений. – Johnny Cee 2 October 2016 в 21:35
  • 5
    @ JSON - Хорошо, рад слышать, что вы это поняли. Я знал, что комментарий был несколько старым, но я решил, что упомянул Activate () для всех, кто сталкивается с проблемой главного окна, не выходящего на передний план после закрытия заставки. Я наткнулся на него пару дней назад. – Johnny Cee 4 October 2016 в 18:24

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

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

  • Fade In
  • Progress bar
  • Значок состояния
  • Fade Out
  • Двойной щелчок, чтобы отклонить

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

2
ответ дан jp2code 15 August 2018 в 16:24
поделиться

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

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();
            }
        }
    }
-1
ответ дан Mostafiz 15 August 2018 в 16:24
поделиться
  • 1
    Этот ответ может использовать некоторые объяснения. – Raidri 17 March 2016 в 11:48

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

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

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

6
ответ дан musefan 15 August 2018 в 16:24
поделиться

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

  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.

note: Форма всплеска работает до открытия вашей формы1

  1. Добавить эту библиотеку
    using System.Threading;
    
  2. create function
    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
ответ дан Steve 15 August 2018 в 16:24
поделиться
  • 1
    Это самый простой и лучший пример, который я нашел. Работала отлично. – Tyler Durden 13 January 2016 в 06:03
  • 2
    @TylerDurden, простейший и лучший ? Проверьте на этом вместо этого (и я бы тщательно назвал его достаточно хорошим ). – Sinatr 6 September 2016 в 12:47
  • 3
    Спасибо @Sinatr, я бы, вероятно, использовал эту реализацию в следующий раз, она выглядит намного более гибкой. Это решение было просто проще, когда я собирал c #, я изначально искал простое решение, которое не требовало делегатов и слишком много потоков. Я также узнал, что лучшее решение изменяется, когда вы изучаете новые методы;) Спасибо за обмен – Tyler Durden 7 September 2016 в 11:18

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

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

1
ответ дан tomRedox 15 August 2018 в 16:24
поделиться
  • 1
    Это звучит идеально, но я не вижу этого варианта (в VS 2013). Единственные ссылки, которые я могу найти в Интернете, доступны только для Visual Basic, поэтому, возможно, это поддерживается только для этого? – Giles 25 July 2016 в 16:26
  • 2
    Привет @Giles, это вполне может быть, я только использовал его в приложениях VB – tomRedox 25 July 2016 в 23:11
-4
ответ дан Rob 5 September 2018 в 15:30
поделиться
0
ответ дан AndrewB 28 October 2018 в 23:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: