Fix overflowing/clipped UI text and give buttons a consistent flat style

Instruction and status labels used AutoSize/fixed widths with no wrap
constraint, so long Italian paragraphs and network paths ran past the
window edge or got clipped instead of wrapping. Report dialogs had
fixed-height labels that clipped multi-line text. ProgressForm's folder
label could overflow its non-resizable dialog.

- Labels now wrap responsively (TableLayoutPanel column at 100% + Dock=Top)
  instead of a fixed pixel cap, so they reflow when the window is resized.
- Report dialog labels switched from fixed Height to AutoSize.
- ProgressForm's folder label truncates with ellipsis + tooltip, matching
  the existing pattern used by the import status label.
- Added ApplicationHighDpiMode=PerMonitorV2 to fix control proportions on
  scaled displays.
- Added UiStile.cs: shared flat button style (primary/secondary), rounded
  corners for the wizard nav buttons, and AutoSize+padding on all buttons
  so button size always matches its text (fixes text getting clipped when
  a hardcoded Size was too narrow for the label).
- Fase 5's drag&drop .asm list now fills available vertical space instead
  of a fixed 680x160 box.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
davideandClaude Sonnet 5 committed 2026-09-21 10:40:32 +02:00
1 parent 6511d58b01
commit ba18d682f3
8 files changed
+166 -64

No files matched your search

+79 -55
View File
@@ -89,23 +89,23 @@ public partial class Form1 : Form
var navPanel = new FlowLayoutPanel
{
Dock = DockStyle.Bottom,
Height = 48,
// I bottoni si auto-dimensionano al testo (UiStile): l'altezza qui deve stare
// comoda sopra al loro MinimumSize (32) più il padding, altrimenti vengono
// tagliati sul fondo della barra invece di restarci dentro.
Height = 56,
FlowDirection = FlowDirection.RightToLeft,
Padding = new Padding(12, 8, 12, 8),
Padding = new Padding(12, 10, 12, 10),
};
_btnAvanti.Text = "Avanti >";
_btnAvanti.Size = new Size(110, 32);
_btnAvanti.FlatStyle = FlatStyle.Flat;
_btnAvanti.FlatAppearance.BorderSize = 0;
_btnAvanti.BackColor = ColorePrimario;
_btnAvanti.ForeColor = Color.White;
_btnAvanti.Font = new Font(Font, FontStyle.Bold);
_btnAvanti.Text = "Avanti ›";
UiStile.Primario(_btnAvanti);
UiStile.Arrotonda(_btnAvanti);
_btnAvanti.Click += (_, _) => VaiAllaFase(_faseAttuale + 1);
navPanel.Controls.Add(_btnAvanti);
_btnIndietro.Text = "< Indietro";
_btnIndietro.Size = new Size(110, 32);
_btnIndietro.Text = "‹ Indietro";
_btnIndietro.Margin = new Padding(8, 0, 0, 0);
UiStile.Secondario(_btnIndietro);
UiStile.Arrotonda(_btnIndietro);
_btnIndietro.Click += (_, _) => VaiAllaFase(_faseAttuale - 1);
navPanel.Controls.Add(_btnIndietro);
@@ -228,9 +228,13 @@ public partial class Form1 : Form
ColumnCount = 1,
Padding = new Padding(16),
};
// Colonna al 100%: le label sotto (Dock=Top) vanno a capo sulla larghezza reale della
// finestra invece che su un limite fisso in pixel, e si riadattano se viene ridimensionata.
contenuto.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100));
var lblIstruzioni = new Label
{
Dock = DockStyle.Top,
AutoSize = true,
ForeColor = SystemColors.GrayText,
Margin = new Padding(0, 0, 0, 12),
@@ -240,9 +244,8 @@ public partial class Form1 : Form
};
contenuto.Controls.Add(lblIstruzioni);
_lblDb.Dock = DockStyle.Top;
_lblDb.AutoSize = true;
_lblDb.AutoEllipsis = true;
_lblDb.MaximumSize = new Size(900, 0);
_lblDb.ForeColor = SystemColors.GrayText;
_lblDb.Margin = new Padding(0, 0, 0, 4);
contenuto.Controls.Add(_lblDb);
@@ -255,13 +258,13 @@ public partial class Form1 : Form
var bottoni = new FlowLayoutPanel { AutoSize = true, FlowDirection = FlowDirection.LeftToRight };
_btnApriDb.Text = "Apri DB...";
_btnApriDb.Size = new Size(120, 32);
_btnApriDb.Margin = new Padding(0, 0, 8, 0);
UiStile.Secondario(_btnApriDb);
_btnApriDb.Click += (_, _) => ScegliDatabase();
bottoni.Controls.Add(_btnApriDb);
_btnAggiorna.Text = "Aggiorna indice";
_btnAggiorna.Size = new Size(120, 32);
UiStile.Secondario(_btnAggiorna);
_btnAggiorna.Click += (_, _) => AggiornaIndice();
bottoni.Controls.Add(_btnAggiorna);
@@ -269,6 +272,7 @@ public partial class Form1 : Form
var lblManutenzione = new Label
{
Dock = DockStyle.Top,
AutoSize = true,
ForeColor = SystemColors.GrayText,
Margin = new Padding(0, 20, 0, 8),
@@ -278,7 +282,7 @@ public partial class Form1 : Form
contenuto.Controls.Add(lblManutenzione);
_btnPulisci.Text = "Pulisci raw e step";
_btnPulisci.Size = new Size(200, 30);
UiStile.Secondario(_btnPulisci);
_btnPulisci.Click += (_, _) => PulisciRawEStep();
contenuto.Controls.Add(_btnPulisci);
@@ -297,9 +301,11 @@ public partial class Form1 : Form
ColumnCount = 1,
Padding = new Padding(16),
};
contenuto.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100));
var lblIstruzioni = new Label
{
Dock = DockStyle.Top,
AutoSize = true,
ForeColor = SystemColors.GrayText,
Margin = new Padding(0, 0, 0, 8),
@@ -312,22 +318,22 @@ public partial class Form1 : Form
var btnSfoglia = new Button
{
Text = "Scegli file distinta...",
Size = new Size(220, 32),
Margin = new Padding(0, 0, 0, 8),
};
UiStile.Secondario(btnSfoglia);
btnSfoglia.Click += (_, _) => ScegliFileDistinta();
contenuto.Controls.Add(btnSfoglia);
_btnVerifica.Text = "Verifica presenza nel DB";
_btnVerifica.Size = new Size(220, 32);
_btnVerifica.Text = "Verifica presenza";
_btnVerifica.Margin = new Padding(0, 0, 0, 8);
UiStile.Secondario(_btnVerifica);
_btnVerifica.Click += (_, _) => VerificaCodiciNelDb();
contenuto.Controls.Add(_btnVerifica);
_lblImportStatus.Dock = DockStyle.Top;
_lblImportStatus.AutoSize = false;
_lblImportStatus.AutoEllipsis = true;
_lblImportStatus.Height = 24;
_lblImportStatus.Width = 900;
_lblImportStatus.ForeColor = SystemColors.GrayText;
contenuto.Controls.Add(_lblImportStatus);
@@ -370,9 +376,11 @@ public partial class Form1 : Form
ColumnCount = 1,
Padding = new Padding(16),
};
contenuto.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100));
var lblIstruzioni = new Label
{
Dock = DockStyle.Top,
AutoSize = true,
ForeColor = SystemColors.GrayText,
Margin = new Padding(0, 0, 0, 8),
@@ -382,13 +390,8 @@ public partial class Form1 : Form
contenuto.Controls.Add(lblIstruzioni);
_btnCreaRaw.Text = "Crea cartella raw";
_btnCreaRaw.Size = new Size(220, 36);
_btnCreaRaw.Margin = new Padding(0, 0, 0, 12);
_btnCreaRaw.FlatStyle = FlatStyle.Flat;
_btnCreaRaw.FlatAppearance.BorderSize = 0;
_btnCreaRaw.BackColor = ColorePrimario;
_btnCreaRaw.ForeColor = Color.White;
_btnCreaRaw.Font = new Font(Font, FontStyle.Bold);
UiStile.Primario(_btnCreaRaw);
_btnCreaRaw.Click += (_, _) => CreaCartellaRaw();
contenuto.Controls.Add(_btnCreaRaw);
@@ -431,9 +434,11 @@ public partial class Form1 : Form
ColumnCount = 1,
Padding = new Padding(16),
};
contenuto.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100));
var lblIstruzioni = new Label
{
Dock = DockStyle.Top,
AutoSize = true,
ForeColor = SystemColors.GrayText,
Margin = new Padding(0, 0, 0, 12),
@@ -445,7 +450,7 @@ public partial class Form1 : Form
contenuto.Controls.Add(lblIstruzioni);
_btnTrovaPrt.Text = "Trova componenti referenziati";
_btnTrovaPrt.Size = new Size(220, 32);
UiStile.Secondario(_btnTrovaPrt);
_btnTrovaPrt.Click += (_, _) => TrovaPrtReferenziati();
contenuto.Controls.Add(_btnTrovaPrt);
@@ -456,17 +461,22 @@ public partial class Form1 : Form
private Panel BuildFaseVerifica()
{
var contenuto = new TableLayoutPanel
// Padding qui invece che su ogni sotto-pannello: si applica uniformemente a top/fill/bottom
// (il layout docked usa il DisplayRectangle del contenitore, già ridotto dal Padding).
var panel = new Panel { Padding = new Padding(16) };
var top = new TableLayoutPanel
{
Dock = DockStyle.Top,
AutoSize = true,
AutoSizeMode = AutoSizeMode.GrowAndShrink,
ColumnCount = 1,
Padding = new Padding(16),
};
top.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100));
var lblIstruzioniCompletezza = new Label
{
Dock = DockStyle.Top,
AutoSize = true,
ForeColor = SystemColors.GrayText,
Margin = new Padding(0, 0, 0, 8),
@@ -474,13 +484,13 @@ public partial class Form1 : Form
+ "(ricorsivamente fino ai PRT) sono nell'indice. Nota: la scansione dei .asm "
+ "è euristica, quindi qualche falso 'incompleto' è possibile.",
};
contenuto.Controls.Add(lblIstruzioniCompletezza);
top.Controls.Add(lblIstruzioniCompletezza);
_btnCompletezza.Text = "Verifica completezza assiemi";
_btnCompletezza.Size = new Size(220, 32);
_btnCompletezza.Margin = new Padding(0, 0, 0, 8);
_btnCompletezza.Margin = new Padding(0, 0, 0, 12);
UiStile.Secondario(_btnCompletezza);
_btnCompletezza.Click += (_, _) => VerificaCompletezzaAssiemi();
contenuto.Controls.Add(_btnCompletezza);
top.Controls.Add(_btnCompletezza);
var lblAnteprimaAsm = new Label
{
@@ -489,13 +499,43 @@ public partial class Form1 : Form
Margin = new Padding(0, 0, 0, 4),
Text = "File .asm della distinta trovati nell'indice (trascinali su Creo/Esplora risorse):",
};
contenuto.Controls.Add(lblAnteprimaAsm);
top.Controls.Add(lblAnteprimaAsm);
var bottom = new TableLayoutPanel
{
Dock = DockStyle.Bottom,
AutoSize = true,
AutoSizeMode = AutoSizeMode.GrowAndShrink,
ColumnCount = 1,
};
bottom.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100));
var lblIstruzioniStep = new Label
{
Dock = DockStyle.Top,
AutoSize = true,
ForeColor = SystemColors.GrayText,
Margin = new Padding(12, 0, 0, 8),
Text = "Dopo aver esportato gli STEP con Creo, premi qui per confrontare i componenti "
+ "della distinta (e i sotto-componenti trovati in fase 4) con i file .stp presenti "
+ "in 'step', copiare quelli trovati in 'step_finali' e vedere quali mancano ancora.",
};
bottom.Controls.Add(lblIstruzioniStep);
_btnReport.Text = "Crea cartella step_finali";
UiStile.Secondario(_btnReport);
_btnReport.Click += (_, _) => GeneraReportStep();
bottom.Controls.Add(_btnReport);
// Dock=Fill invece di una Size fissa: la lista occupa tutto lo spazio verticale
// rimasto tra le istruzioni sopra e sotto, così si vedono più file .asm senza scroll
// anche a finestra ingrandita, invece dei ~160px fissi di prima.
_lstAnteprimaAsm.View = View.LargeIcon;
_lstAnteprimaAsm.MultiSelect = true;
_lstAnteprimaAsm.LargeImageList = new ImageList { ImageSize = new Size(32, 32) };
_lstAnteprimaAsm.Size = new Size(680, 160);
_lstAnteprimaAsm.Margin = new Padding(0, 0, 0, 20);
_lstAnteprimaAsm.Dock = DockStyle.Fill;
_lstAnteprimaAsm.Margin = new Padding(0, 4, 0, 12);
_lstAnteprimaAsm.BorderStyle = BorderStyle.FixedSingle;
_lstAnteprimaAsm.ItemDrag += (_, e) =>
{
var percorsi = _lstAnteprimaAsm.SelectedItems.Cast<ListViewItem>()
@@ -504,26 +544,10 @@ public partial class Form1 : Form
if (percorsi.Length > 0)
_lstAnteprimaAsm.DoDragDrop(new DataObject(DataFormats.FileDrop, percorsi), DragDropEffects.Copy);
};
contenuto.Controls.Add(_lstAnteprimaAsm);
var lblIstruzioniStep = new Label
{
AutoSize = true,
ForeColor = SystemColors.GrayText,
Margin = new Padding(0, 0, 0, 8),
Text = "Dopo aver esportato gli STEP con Creo, premi qui per confrontare i componenti "
+ "della distinta (e i sotto-componenti trovati in fase 4) con i file .stp presenti "
+ "in 'step', copiare quelli trovati in 'step_finali' e vedere quali mancano ancora.",
};
contenuto.Controls.Add(lblIstruzioniStep);
_btnReport.Text = "Crea cartella step_finali";
_btnReport.Size = new Size(220, 32);
_btnReport.Click += (_, _) => GeneraReportStep();
contenuto.Controls.Add(_btnReport);
var panel = new Panel();
panel.Controls.Add(contenuto);
panel.Controls.Add(_lstAnteprimaAsm);
panel.Controls.Add(bottom);
panel.Controls.Add(top);
return panel;
}