Files
1257B_DB/LargeSquareOne/ShutdownProgressForm.cs
T
2026-08-06 09:23:30 +08:00

126 lines
4.0 KiB
C#

using Language;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace LargeSquareOne
{
public partial class ShutdownProgressForm : MultiLanguageForm
{
private Panel contentPanel;
private Label messageLabel;
private ProgressBar progressBar;
public ShutdownProgressForm()
{
// 确保先初始化组件
InitializeComponents();
}
private void InitializeComponents()
{
// 首先创建 messageLabel
messageLabel = new Label
{
Text = "正在关闭程序,请稍候...",
AutoSize = false,
TextAlign = ContentAlignment.MiddleCenter,
Dock = DockStyle.Top,
Height = 30,
Font = new Font("Microsoft YaHei", 9F, FontStyle.Regular),
BackColor = Color.Transparent
};
// 设置窗体属性
this.FormBorderStyle = FormBorderStyle.None;
this.StartPosition = FormStartPosition.CenterScreen;
this.Size = new Size(300, 100);
this.BackColor = Color.Black;
this.Opacity = 0.5;
this.ShowInTaskbar = false;
// 创建内容面板
contentPanel = new Panel
{
BackColor = Color.FromArgb(240, 240, 240),
Size = new Size(280, 80),
Dock = DockStyle.None,
Region = new Region(GetRoundedRect(new RectangleF(0, 0, 280, 80), 8))
};
contentPanel.Location = new Point(
(this.ClientSize.Width - contentPanel.Width) / 2,
(this.ClientSize.Height - contentPanel.Height) / 2
);
progressBar = new ProgressBar
{
Style = ProgressBarStyle.Marquee,
MarqueeAnimationSpeed = 30,
Height = 20,
Dock = DockStyle.None,
Width = 250
};
progressBar.Location = new Point(
(contentPanel.ClientSize.Width - progressBar.Width) / 2,
messageLabel.Bottom + 10
);
// 确保按正确的顺序添加控件
contentPanel.Controls.Add(messageLabel);
contentPanel.Controls.Add(progressBar);
this.Controls.Add(contentPanel);
this.Click += (s, e) => { };
}
private GraphicsPath GetRoundedRect(RectangleF rect, float radius)
{
GraphicsPath path = new GraphicsPath();
path.AddArc(rect.X, rect.Y, radius * 2, radius * 2, 180, 90);
path.AddArc(rect.Width - radius * 2 + rect.X, rect.Y, radius * 2, radius * 2, 270, 90);
path.AddArc(rect.Width - radius * 2 + rect.X, rect.Height - radius * 2 + rect.Y, radius * 2, radius * 2, 0, 90);
path.AddArc(rect.X, rect.Height - radius * 2 + rect.Y, radius * 2, radius * 2, 90, 90);
path.CloseFigure();
return path;
}
public void UpdateMessage(string message)
{
// 添加空值检查
if (messageLabel == null) return;
if (this.InvokeRequired)
{
this.Invoke(new Action(() => {
if (messageLabel != null) // 再次检查,以确保线程安全
messageLabel.Text = message;
}));
}
else
{
messageLabel.Text = message;
}
}
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x80000; // WS_EX_LAYERED
cp.ExStyle |= 0x20; // WS_EX_TRANSPARENT
return cp;
}
}
}
}