diff --git a/IOB-MAN/AutoClosingMessageBox.Designer.cs b/IOB-MAN/AutoClosingMessageBox.Designer.cs new file mode 100644 index 0000000..033f3af --- /dev/null +++ b/IOB-MAN/AutoClosingMessageBox.Designer.cs @@ -0,0 +1,45 @@ +namespace IOB_MAN +{ + partial class AutoClosingMessageBox + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + SuspendLayout(); + // + // AutoClosingMessageBox + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(800, 450); + Name = "AutoClosingMessageBox"; + Text = "AutoClosingMessageBox"; + ResumeLayout(false); + } + + #endregion + } +} \ No newline at end of file diff --git a/IOB-MAN/AutoClosingMessageBox.cs b/IOB-MAN/AutoClosingMessageBox.cs new file mode 100644 index 0000000..668407d --- /dev/null +++ b/IOB-MAN/AutoClosingMessageBox.cs @@ -0,0 +1,81 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace IOB_MAN +{ + public partial class AutoClosingMessageBox : Form + { + #region Public Constructors + + public AutoClosingMessageBox(string message, string caption, int timeoutSeconds) + { + _baseMessage = message; + _secondsRemaining = timeoutSeconds; + + // Configurazione Form + this.Text = caption; + this.Size = new Size(450, 200); + this.FormBorderStyle = FormBorderStyle.FixedDialog; + this.StartPosition = FormStartPosition.CenterScreen; + this.MaximizeBox = false; + this.MinimizeBox = false; + + // Configurazione Label (Testo Grande) + _lblMessage = new Label(); + _lblMessage.Dock = DockStyle.Fill; + _lblMessage.TextAlign = ContentAlignment.MiddleCenter; + _lblMessage.Font = new Font("Segoe UI", 12F, FontStyle.Regular); // Testo più grande + _lblMessage.Padding = new Padding(10); + this.Controls.Add(_lblMessage); + + UpdateLabelText(); + + // Configurazione Timer (scatta ogni secondo) + _timer = new System.Windows.Forms.Timer(); + _timer.Interval = 1000; + _timer.Tick += Timer_Tick; + _timer.Start(); + } + + #endregion Public Constructors + + #region Private Fields + + private string _baseMessage; + private Label _lblMessage; + private int _secondsRemaining; + private System.Windows.Forms.Timer _timer; + + #endregion Private Fields + + #region Private Methods + + private void Timer_Tick(object sender, EventArgs e) + { + _secondsRemaining--; + if (_secondsRemaining <= 0) + { + _timer.Stop(); + this.Close(); + } + else + { + UpdateLabelText(); + } + } + + private void UpdateLabelText() + { + _lblMessage.Text = $"{_baseMessage}\n\nQuesta finestra si chiuderà tra {_secondsRemaining} secondi."; + } + + #endregion Private Methods + } +} \ No newline at end of file diff --git a/IOB-MAN/AutoClosingMessageBox.resx b/IOB-MAN/AutoClosingMessageBox.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/IOB-MAN/AutoClosingMessageBox.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/IOB-MAN/IOB-MAN.csproj b/IOB-MAN/IOB-MAN.csproj index e17821f..5212542 100644 --- a/IOB-MAN/IOB-MAN.csproj +++ b/IOB-MAN/IOB-MAN.csproj @@ -8,7 +8,7 @@ enable true enable - 4.0.2512.1607 + 4.0.2512.2011 Debug;Release;Remote_DEBUG false diff --git a/IOB-MAN/Program.cs b/IOB-MAN/Program.cs index 3888d21..22c9418 100644 --- a/IOB-MAN/Program.cs +++ b/IOB-MAN/Program.cs @@ -20,23 +20,35 @@ namespace IOB_MAN [STAThread] static void Main() { + using (Mutex mutex = new Mutex(false, "Global\\" + appGuid)) { + // Se non otteniamo il possesso entro 500ms... if (!mutex.WaitOne(500, false)) { - MessageBox.Show("Impossibile avviare: un altra copia del programma già in esecuzione! ", "EgalWare IOB-MAN", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); - return; + // Inizializziamo il framework per mostrare la form custom + ApplicationConfiguration.Initialize(); + + // Mostriamo la nostra form invece della MessageBox standard + var popup = new AutoClosingMessageBox( + "Un'altra copia del programma è già in esecuzione!", + "EgalWare IOB-MAN", + 10 // Secondi di countdown + ); + + Application.Run(popup); + return; // Usciamo dall'applicazione } - // To customize application configuration such as set high DPI settings or default - // font, see https://aka.ms/applicationconfiguration. + // --- Avvio normale dell'applicazione --- ApplicationConfiguration.Initialize(); - // valutare se necessari... Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.SetHighDpiMode(HighDpiMode.SystemAware); + Application.Run(new BlazorForm()); } + } } } \ No newline at end of file