Tôi cần hiển thị màn hình giật gân khi khởi động ứng dụng trong vài giây. Có ai biết làm thế nào để thực hiện điều này?Làm thế nào để xây dựng màn hình giật gân trong ứng dụng biểu mẫu cửa sổ?
Sẽ được nhiều người đánh giá cao vì sự trợ giúp.
Tôi cần hiển thị màn hình giật gân khi khởi động ứng dụng trong vài giây. Có ai biết làm thế nào để thực hiện điều này?Làm thế nào để xây dựng màn hình giật gân trong ứng dụng biểu mẫu cửa sổ?
Sẽ được nhiều người đánh giá cao vì sự trợ giúp.
Đầu tiên, tạo màn hình giật gân dưới dạng không biên giới, bất động với hình ảnh của bạn trên đó trung tâm của màn hình, tô màu theo cách bạn muốn. Tất cả điều này có thể được thiết lập từ bên trong nhà thiết kế; Cụ thể, bạn muốn:
Sau đó, bạn cần quyết định vị trí hiển thị địa điểm và vị trí loại bỏ nó. Hai nhiệm vụ này cần phải xảy ra ở các mặt đối diện của logic khởi động chính của chương trình của bạn. Điều này có thể nằm trong thủ tục chính của ứng dụng() của bạn, hoặc có thể trong trình xử lý tải của biểu mẫu ứng dụng chính của bạn; bất cứ nơi nào bạn đang tạo ra các đối tượng đắt tiền, đọc cài đặt từ ổ cứng và thường mất nhiều thời gian để thực hiện các công cụ đằng sau hậu trường trước khi màn hình ứng dụng chính hiển thị.
Sau đó, tất cả những gì bạn phải làm là tạo một thể hiện biểu mẫu của bạn, Hiển thị() và giữ tham chiếu đến nó trong khi bạn khởi tạo khởi động. Khi biểu mẫu chính của bạn đã được tải, hãy đóng() nó.
Nếu màn hình giật gân của bạn sẽ có một hình ảnh động trên đó, cửa sổ sẽ cần phải được "đệm đôi" và bạn sẽ cần phải chắc chắn rằng tất cả logic khởi tạo xảy ra bên ngoài luồng GUI (có nghĩa là bạn không thể có logic tải chính của bạn trong trình xử lý tải của biểu mẫu chính, bạn sẽ phải tạo một BackgroundWorker hoặc một số thường trình luồng khác.
Màn hình giật gân cũng nên chạy trên một chuỗi riêng biệt để có một tiến trình chạy ẩn để ứng dụng của bạn có thể làm việc trong khi được hiển thị (ví dụ: kết nối vào cơ sở dữ liệu của bạn, tải các tệp). Nó cho người dùng biết rằng ứng dụng của bạn đang chạy và nó không lãng phí thời gian của họ bằng cách chỉ ở đó cho X số giây. –
+1 để biết chi tiết. Tôi đã tạo ra một giật gân ở đây bằng cách sử dụng một vòng lặp ứng dụng mới (Application.Run) cho nó và một cách tiếp cận singleton để tôi có thể tạo giật gân ngay từ đầu và đóng nó ngay trước khi biểu mẫu đăng nhập được hiển thị. –
@ALMMa - Tôi thực tế cũng giống như việc xây dựng màn hình giật gân, bao gồm khả năng ẩn hoặc "vịt" một cách rõ ràng bằng lệnh hoặc nếu một số loại cửa sổ nhất định (ike Windows Security dialog dialog) được phát hiện. – KeithS
Dưới đây là một số bước hướng dẫn ...
Hãy thử điều này và nếu bạn gặp khó khăn, hãy quay trở lại và hỏi thêm các câu hỏi cụ thể liên quan đến vấn đề của bạn
Trước tiên, bạn nên tạo một hình thức có hoặc không có biên giới (cửa ít được ưa thích cho những việc này)
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();
}
}
Tại Main bạn nên sử dụng mà
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new SplashForm());
}
}
Điều này thật tệ. Điều này sẽ làm cho SplashForm của bạn, Biểu mẫu chính của ứng dụng của bạn. Điều này có nghĩa là khi bạn đóng ứng dụng, ứng dụng sẽ dừng lại –
tạo giật gân
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();
Sau đó, trong đơn đăng ký
của bạnsp = new Splash();
sp.ShowDialog();
Các câu trả lời khác ở đây bao gồm điều này, nhưng nó là giá trị biết rằng có được xây dựng trong chức năng cho màn hình giật gân trong Visual Studio: Nếu bạn mở các thuộc tính dự án cho các ứng dụng hình thức cửa sổ và nhìn vào tab ứng dụng, có là một tùy chọn "Splash screen:" ở phía dưới. Bạn chỉ cần chọn biểu mẫu nào trong ứng dụng bạn muốn hiển thị dưới dạng màn hình giật gân và nó sẽ chú ý hiển thị nó khi ứng dụng bắt đầu và ẩn nó khi biểu mẫu chính của bạn được hiển thị.
Bạn vẫn cần phải thiết lập hình thức như đã mô tả ở trên (với biên giới đúng, vị trí, kích thước, vv)
Điều này nghe có vẻ lý tưởng, nhưng tôi không thể thấy tùy chọn này (trong VS 2013). Các tài liệu tham khảo duy nhất tôi có thể tìm thấy trực tuyến chỉ dành cho Visual Basic, vì vậy có lẽ nó chỉ được hỗ trợ cho điều đó? – Giles
Hi @Giles, điều đó cũng có thể là trường hợp, tôi chỉ sử dụng nó trên các ứng dụng VB – tomRedox
Có A Pretty Good Splash Screen qua trên CodeProject.
Nó đi kèm với
Tác giả gần đây đã trải qua và đã cập nhật mã. Nó thực sự là một phần công việc và là sự hợp tác giữa nhiều nhà phát triển khác nhau với những ý tưởng hay.
Mẫu bên dưới từ Telerik sử dụng điều khiển Định dạng hình dạng tuy nhiên thay đổi thành dạng Windows thông thường. Đây là cách dễ nhất và tốt nhất mà tôi từng thấy.
Điều này thực sự là nhiều thông tin hơn câu trả lời được chấp nhận, với mã mẫu, mặc dù nó là một câu trả lời chỉ liên kết. – Kaitlyn
Vấn đề tôi có ở đây là khi biểu mẫu được mở ra, nó được mở ở phía sau của tất cả các cửa sổ khác và tôi dường như không thể tìm ra cách để đưa nó ra phía trước. Không có gì có vẻ hiệu quả. Bất kỳ đề xuất? – JSON
Tôi đã tìm ra điều đó. Trong trường hợp bất kỳ ai khác đang gặp vấn đề tương tự, hãy thêm hai dòng này vào cuối phương thức mainForm_Load ((Form1)) .TopMost = true; ((Form1) người gửi) .BringToFront(); – JSON
đơn giản và giải pháp dễ dàng để tạo ra màn hình splash
bây giờ thiết lập bộ đếm thời gian đánh dấu trong timer:
private void timer1_Tick(object sender, EventArgs e)
{
progressBar1.Increment(1);
if (progressBar1.Value == 100) timer1.Stop();
}
thêm mới tên sử dụng hình thức "MẪU-1" và sử dụng lệnh trong MẪU 1 sau.
lưu ý: hình thức Splash làm việc trước khi mở Form1 bạn
thêm thư viện này
using System.Threading;
tạo chức năng
public void splash()
{
Application.Run(new splash());
}
sử dụng lệnh sau đây trong phần khởi tạo như dưới đây.
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();
}
}
Đây là ví dụ đơn giản và tốt nhất mà tôi đã tìm thấy. Làm việc hoàn hảo. –
@TylerDurden, * đơn giản nhất * và * tốt nhất *? Kiểm tra [this one] (http://stackoverflow.com/a/15836105/1997232) thay vào đó (và tôi cẩn thận gọi nó * đủ tốt * bản thân mình). – Sinatr
Cảm ơn @Sinatr, tôi có lẽ sẽ sử dụng triển khai lần sau, có vẻ linh hoạt hơn nhiều. Giải pháp này đơn giản hơn khi tôi chọn C#, ban đầu tôi tìm kiếm một giải pháp đơn giản, không yêu cầu các đại biểu và quá nhiều luồng. Tôi cũng đã học được rằng _best solution_ thay đổi khi bạn học các phương pháp mới;) Cảm ơn bạn đã chia sẻ –
Hãy thử mã này
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();
}
}
}
Câu trả lời này có thể sử dụng một số giải thích. – Raidri
+1 vì không có ví dụ REAL của một splash tốt cho đến nay. Tôi đã tham gia vào một triển khai lộn xộn từ các blog và trang web khác nhau nhưng một trang web tốt đã xuất hiện sau nhiều rắc rối. Câu hỏi là rất tốt. –
Có một tùy chọn khác không yêu cầu bạn sử dụng bộ hẹn giờ hoặc giữ tham chiếu biểu mẫu giật gân trong biểu mẫu chính hoặc ngược lại: http://stackoverflow.com/questions/7963275 – Veldmuis
bản sao có thể có của [Ví dụ về màn hình giật gân] (http://stackoverflow.com/questions/2455703/splash-screen-example) –