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