Migliora UI: finestra aggiornamento indice, barra nav wizard, fase Verifica
- ProgressForm: gerarchia visiva, contrasto testo, barra piatta blu al posto della ProgressBar nativa verde, footer separato dal bottone Annulla. - Barra Avanti/Indietro: footer separato con linea, padding allineato ai pannelli di ogni fase, riordinata sopra la barra di stato come convenzione standard invece che sotto. - Fase 5 (Verifica completezza): bottone principale reso primario, lista file .asm passata da griglia di icone troncate a lista a riga singola leggibile. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
5c9661eb12
commit
9ecdccb6bb
3 files changed
+131
-41
No files matched your search
+46
-17
@@ -91,15 +91,23 @@ public partial class Form1 : Form
|
|||||||
_lblFase.Font = new Font(Font, FontStyle.Bold);
|
_lblFase.Font = new Font(Font, FontStyle.Bold);
|
||||||
headerPanel.Controls.Add(_lblFase);
|
headerPanel.Controls.Add(_lblFase);
|
||||||
|
|
||||||
|
// Barra di navigazione come footer separato dal contenuto (stesso pattern di
|
||||||
|
// ProgressForm): linea sottile in cima + sfondo bianco, invece dei bottoni appoggiati
|
||||||
|
// direttamente sul contenuto/sulla barra di stato senza alcuna divisione visiva.
|
||||||
|
// Padding destro = 16, lo stesso usato dai pannelli di ogni fase (Padding(16)): prima
|
||||||
|
// era 12, quindi "Avanti" sporgeva 4px oltre il margine destro del contenuto sopra.
|
||||||
|
var navContainer = new Panel { Dock = DockStyle.Bottom, Height = 64, BackColor = Color.White };
|
||||||
|
var navSeparatore = new Panel
|
||||||
|
{
|
||||||
|
Dock = DockStyle.Top,
|
||||||
|
Height = 1,
|
||||||
|
BackColor = Color.FromArgb(220, 220, 220),
|
||||||
|
};
|
||||||
var navPanel = new FlowLayoutPanel
|
var navPanel = new FlowLayoutPanel
|
||||||
{
|
{
|
||||||
Dock = DockStyle.Bottom,
|
Dock = DockStyle.Fill,
|
||||||
// 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,
|
FlowDirection = FlowDirection.RightToLeft,
|
||||||
Padding = new Padding(12, 10, 12, 10),
|
Padding = new Padding(16, 14, 16, 14),
|
||||||
};
|
};
|
||||||
_btnAvanti.Text = "Avanti ›";
|
_btnAvanti.Text = "Avanti ›";
|
||||||
UiStile.Primario(_btnAvanti);
|
UiStile.Primario(_btnAvanti);
|
||||||
@@ -113,6 +121,8 @@ public partial class Form1 : Form
|
|||||||
UiStile.Arrotonda(_btnIndietro);
|
UiStile.Arrotonda(_btnIndietro);
|
||||||
_btnIndietro.Click += (_, _) => VaiAllaFase(_faseAttuale - 1);
|
_btnIndietro.Click += (_, _) => VaiAllaFase(_faseAttuale - 1);
|
||||||
navPanel.Controls.Add(_btnIndietro);
|
navPanel.Controls.Add(_btnIndietro);
|
||||||
|
navContainer.Controls.Add(navPanel);
|
||||||
|
navContainer.Controls.Add(navSeparatore);
|
||||||
|
|
||||||
var statusPanel = new Panel { Dock = DockStyle.Bottom, Height = 28, BackColor = SystemColors.ControlLight };
|
var statusPanel = new Panel { Dock = DockStyle.Bottom, Height = 28, BackColor = SystemColors.ControlLight };
|
||||||
_lblStatus.Dock = DockStyle.Fill;
|
_lblStatus.Dock = DockStyle.Fill;
|
||||||
@@ -133,9 +143,12 @@ public partial class Form1 : Form
|
|||||||
_faseContainer.Controls.Add(panel);
|
_faseContainer.Controls.Add(panel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Ordine dei Dock.Bottom: l'ultimo aggiunto è il più esterno (il vero bordo inferiore
|
||||||
|
// della finestra). La barra di stato va tra contenuto e azioni; i bottoni Avanti/Indietro
|
||||||
|
// restano il footer più esterno, come in ogni wizard/dialog standard di Windows.
|
||||||
Controls.Add(_faseContainer);
|
Controls.Add(_faseContainer);
|
||||||
Controls.Add(navPanel);
|
|
||||||
Controls.Add(statusPanel);
|
Controls.Add(statusPanel);
|
||||||
|
Controls.Add(navContainer);
|
||||||
Controls.Add(headerPanel);
|
Controls.Add(headerPanel);
|
||||||
|
|
||||||
DragEnter += (_, e) =>
|
DragEnter += (_, e) =>
|
||||||
@@ -180,7 +193,7 @@ public partial class Form1 : Form
|
|||||||
private void AggiornaAnteprimaAsm()
|
private void AggiornaAnteprimaAsm()
|
||||||
{
|
{
|
||||||
_lstAnteprimaAsm.Items.Clear();
|
_lstAnteprimaAsm.Items.Clear();
|
||||||
_lstAnteprimaAsm.LargeImageList!.Images.Clear();
|
_lstAnteprimaAsm.SmallImageList!.Images.Clear();
|
||||||
if (_ultimaCartellaRaw is null || !Directory.Exists(_ultimaCartellaRaw) || _righeCorrenti is null)
|
if (_ultimaCartellaRaw is null || !Directory.Exists(_ultimaCartellaRaw) || _righeCorrenti is null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -204,8 +217,8 @@ public partial class Form1 : Form
|
|||||||
// ponytail: file irraggiungibile (share offline) -> icona generica, non blocca gli altri
|
// ponytail: file irraggiungibile (share offline) -> icona generica, non blocca gli altri
|
||||||
}
|
}
|
||||||
|
|
||||||
int indice = _lstAnteprimaAsm.LargeImageList.Images.Count;
|
int indice = _lstAnteprimaAsm.SmallImageList.Images.Count;
|
||||||
_lstAnteprimaAsm.LargeImageList.Images.Add(icona?.ToBitmap() ?? SystemIcons.WinLogo.ToBitmap());
|
_lstAnteprimaAsm.SmallImageList.Images.Add(icona?.ToBitmap() ?? SystemIcons.WinLogo.ToBitmap());
|
||||||
icona?.Dispose();
|
icona?.Dispose();
|
||||||
_lstAnteprimaAsm.Items.Add(new ListViewItem(Path.GetFileName(percorso), indice) { Tag = percorso });
|
_lstAnteprimaAsm.Items.Add(new ListViewItem(Path.GetFileName(percorso), indice) { Tag = percorso });
|
||||||
}
|
}
|
||||||
@@ -515,9 +528,12 @@ public partial class Form1 : Form
|
|||||||
};
|
};
|
||||||
top.Controls.Add(lblIstruzioniCompletezza);
|
top.Controls.Add(lblIstruzioniCompletezza);
|
||||||
|
|
||||||
|
// Primario: è l'azione principale di questa fase, non una scelta secondaria — prima
|
||||||
|
// era uno stile grigio che si confondeva con lo sfondo.
|
||||||
_btnCompletezza.Text = "Verifica completezza assiemi";
|
_btnCompletezza.Text = "Verifica completezza assiemi";
|
||||||
_btnCompletezza.Margin = new Padding(0, 0, 0, 12);
|
_btnCompletezza.Margin = new Padding(0, 0, 0, 12);
|
||||||
UiStile.Secondario(_btnCompletezza);
|
UiStile.Primario(_btnCompletezza);
|
||||||
|
UiStile.Arrotonda(_btnCompletezza);
|
||||||
_btnCompletezza.Click += (_, _) => VerificaCompletezzaAssiemi();
|
_btnCompletezza.Click += (_, _) => VerificaCompletezzaAssiemi();
|
||||||
top.Controls.Add(_btnCompletezza);
|
top.Controls.Add(_btnCompletezza);
|
||||||
|
|
||||||
@@ -530,15 +546,28 @@ public partial class Form1 : Form
|
|||||||
};
|
};
|
||||||
top.Controls.Add(lblAnteprimaAsm);
|
top.Controls.Add(lblAnteprimaAsm);
|
||||||
|
|
||||||
// Dock=Fill invece di una Size fissa: la lista occupa tutto lo spazio verticale
|
// View.Details invece di LargeIcon: con codici Pro-E lunghi e simili tra loro
|
||||||
// rimasto sotto le istruzioni, così si vedono più file .asm senza scroll anche a
|
// ("9244218...", "9244228..."), le icone in griglia troncavano tutti i nomi allo stesso
|
||||||
// finestra ingrandita, invece dei ~160px fissi di prima.
|
// modo (illeggibili, indistinguibili) e lasciavano un grande vuoto sotto le poche righe.
|
||||||
_lstAnteprimaAsm.View = View.LargeIcon;
|
// Una lista a riga singola mostra il nome per intero, in linea con lo stile delle altre
|
||||||
|
// griglie dell'app (_gridImport/_gridRaw), restando comunque trascinabile.
|
||||||
|
_lstAnteprimaAsm.View = View.Details;
|
||||||
_lstAnteprimaAsm.MultiSelect = true;
|
_lstAnteprimaAsm.MultiSelect = true;
|
||||||
_lstAnteprimaAsm.LargeImageList = new ImageList { ImageSize = new Size(32, 32) };
|
_lstAnteprimaAsm.FullRowSelect = true;
|
||||||
|
_lstAnteprimaAsm.GridLines = false;
|
||||||
|
_lstAnteprimaAsm.HeaderStyle = ColumnHeaderStyle.Nonclickable;
|
||||||
|
_lstAnteprimaAsm.SmallImageList = new ImageList { ImageSize = new Size(20, 20) };
|
||||||
|
_lstAnteprimaAsm.Columns.Add("File .asm", -2);
|
||||||
_lstAnteprimaAsm.Dock = DockStyle.Fill;
|
_lstAnteprimaAsm.Dock = DockStyle.Fill;
|
||||||
_lstAnteprimaAsm.Margin = new Padding(0, 4, 0, 12);
|
_lstAnteprimaAsm.Margin = new Padding(0, 4, 0, 12);
|
||||||
_lstAnteprimaAsm.BorderStyle = BorderStyle.FixedSingle;
|
_lstAnteprimaAsm.BorderStyle = BorderStyle.None;
|
||||||
|
// La colonna unica segue sempre la larghezza disponibile (niente scroll orizzontale
|
||||||
|
// né spazio sprecato a destra quando la finestra viene ingrandita).
|
||||||
|
_lstAnteprimaAsm.Resize += (_, _) =>
|
||||||
|
{
|
||||||
|
if (_lstAnteprimaAsm.Columns.Count > 0)
|
||||||
|
_lstAnteprimaAsm.Columns[0].Width = _lstAnteprimaAsm.ClientSize.Width;
|
||||||
|
};
|
||||||
_lstAnteprimaAsm.ItemDrag += (_, e) =>
|
_lstAnteprimaAsm.ItemDrag += (_, e) =>
|
||||||
{
|
{
|
||||||
var percorsi = _lstAnteprimaAsm.SelectedItems.Cast<ListViewItem>()
|
var percorsi = _lstAnteprimaAsm.SelectedItems.Cast<ListViewItem>()
|
||||||
|
|||||||
+80
-23
@@ -2,80 +2,137 @@ namespace PrepStep;
|
|||||||
|
|
||||||
public sealed class ProgressForm : Form
|
public sealed class ProgressForm : Form
|
||||||
{
|
{
|
||||||
|
private readonly Label _lblTitolo = new();
|
||||||
private readonly Label _lblCartella = new();
|
private readonly Label _lblCartella = new();
|
||||||
private readonly ProgressBar _progressBar = new();
|
private readonly Panel _barraTraccia = new();
|
||||||
|
private readonly Panel _barraRiempimento = new();
|
||||||
|
private readonly Label _lblPercentuale = new();
|
||||||
private readonly Label _lblConteggio = new();
|
private readonly Label _lblConteggio = new();
|
||||||
private readonly Label _lblDettaglio = new();
|
private readonly Label _lblDettaglio = new();
|
||||||
private readonly Label _lblEta = new();
|
private readonly Label _lblEta = new();
|
||||||
private readonly Button _btnAnnulla = new();
|
private readonly Button _btnAnnulla = new();
|
||||||
|
private readonly Panel _separatore = new();
|
||||||
|
private readonly Panel _piePagina = new();
|
||||||
private readonly ToolTip _tipCartella = new();
|
private readonly ToolTip _tipCartella = new();
|
||||||
|
|
||||||
|
private const int Margine = 24;
|
||||||
|
// SystemColors.GrayText (~3.9:1 su bianco) è sotto la soglia WCAG AA 4.5:1 per testo
|
||||||
|
// normale: usiamo un grigio più scuro, leggibile ma comunque secondario.
|
||||||
|
private static readonly Color GrigioTesto = Color.FromArgb(90, 90, 90);
|
||||||
|
|
||||||
public event EventHandler? Annullato;
|
public event EventHandler? Annullato;
|
||||||
|
|
||||||
public ProgressForm()
|
public ProgressForm()
|
||||||
{
|
{
|
||||||
Text = "Aggiornamento indice in corso...";
|
Text = "Aggiornamento indice";
|
||||||
FormBorderStyle = FormBorderStyle.FixedDialog;
|
FormBorderStyle = FormBorderStyle.FixedDialog;
|
||||||
StartPosition = FormStartPosition.CenterParent;
|
StartPosition = FormStartPosition.CenterParent;
|
||||||
MinimizeBox = false;
|
MinimizeBox = false;
|
||||||
MaximizeBox = false;
|
MaximizeBox = false;
|
||||||
ControlBox = false;
|
ControlBox = false;
|
||||||
ClientSize = new Size(460, 190);
|
BackColor = Color.White;
|
||||||
|
ClientSize = new Size(480, 270);
|
||||||
|
|
||||||
|
_lblTitolo.Text = "Aggiornamento indice in corso...";
|
||||||
|
_lblTitolo.Location = new Point(Margine, 22);
|
||||||
|
_lblTitolo.AutoSize = true;
|
||||||
|
_lblTitolo.Font = new Font(Font.FontFamily, 11f, FontStyle.Bold);
|
||||||
|
|
||||||
_lblCartella.Text = "Preparazione...";
|
_lblCartella.Text = "Preparazione...";
|
||||||
_lblCartella.Location = new Point(16, 16);
|
_lblCartella.Location = new Point(Margine, 52);
|
||||||
// AutoSize=false + AutoEllipsis: un percorso lungo (share di rete) va troncato con "..."
|
// AutoSize=false + AutoEllipsis: un percorso lungo (share di rete) va troncato con "..."
|
||||||
// invece di sforare il bordo del dialog, che è FixedDialog e non si può allargare.
|
// invece di sforare il bordo del dialog, che è FixedDialog e non si può allargare.
|
||||||
// Il testo completo resta disponibile nel tooltip (stesso pattern di Form1._lblImportStatus).
|
// Il testo completo resta disponibile nel tooltip (stesso pattern di Form1._lblImportStatus).
|
||||||
_lblCartella.AutoSize = false;
|
_lblCartella.AutoSize = false;
|
||||||
_lblCartella.AutoEllipsis = true;
|
_lblCartella.AutoEllipsis = true;
|
||||||
_lblCartella.Size = new Size(428, 20);
|
_lblCartella.Size = new Size(ClientSize.Width - Margine * 2, 20);
|
||||||
_lblCartella.Font = new Font(Font, FontStyle.Bold);
|
_lblCartella.ForeColor = GrigioTesto;
|
||||||
|
|
||||||
_progressBar.Location = new Point(16, 44);
|
// Barra piatta disegnata a mano (traccia grigia + riempimento) invece della ProgressBar
|
||||||
_progressBar.Size = new Size(428, 24);
|
// nativa: quella di Windows è verde e in stile "a blocchi", stona con il blu del resto
|
||||||
_progressBar.Minimum = 0;
|
// dell'app (UiStile.Primario). Larghezza = margine destro reale meno lo spazio per
|
||||||
_progressBar.Maximum = 1000;
|
// "100%" in grassetto, così barra+percentuale rispettano lo stesso margine destro del
|
||||||
_progressBar.Style = ProgressBarStyle.Marquee;
|
// resto del contenuto (prima finivano ~25px prima, sbilanciate rispetto al margine
|
||||||
|
// sinistro di 24px).
|
||||||
|
_barraTraccia.Location = new Point(Margine, 90);
|
||||||
|
_barraTraccia.Size = new Size(ClientSize.Width - Margine * 2 - 46, 10);
|
||||||
|
_barraTraccia.BackColor = Color.FromArgb(230, 230, 230);
|
||||||
|
_barraRiempimento.Location = Point.Empty;
|
||||||
|
_barraRiempimento.Size = new Size(0, _barraTraccia.Height);
|
||||||
|
_barraRiempimento.BackColor = UiStile.ColorePrimario;
|
||||||
|
_barraTraccia.Controls.Add(_barraRiempimento);
|
||||||
|
|
||||||
_lblConteggio.Location = new Point(16, 80);
|
_lblPercentuale.AutoSize = true;
|
||||||
|
_lblPercentuale.Font = new Font(Font, FontStyle.Bold);
|
||||||
|
_lblPercentuale.TextAlign = ContentAlignment.MiddleRight;
|
||||||
|
|
||||||
|
_lblConteggio.Location = new Point(Margine, 122);
|
||||||
_lblConteggio.AutoSize = true;
|
_lblConteggio.AutoSize = true;
|
||||||
|
|
||||||
_lblDettaglio.Location = new Point(16, 104);
|
_lblDettaglio.Location = new Point(Margine, 146);
|
||||||
_lblDettaglio.AutoSize = true;
|
_lblDettaglio.AutoSize = true;
|
||||||
_lblDettaglio.ForeColor = SystemColors.GrayText;
|
_lblDettaglio.ForeColor = GrigioTesto;
|
||||||
|
|
||||||
_lblEta.Location = new Point(16, 128);
|
_lblEta.Location = new Point(Margine, 174);
|
||||||
_lblEta.AutoSize = true;
|
_lblEta.AutoSize = true;
|
||||||
_lblEta.Font = new Font(Font, FontStyle.Bold);
|
|
||||||
|
// Footer separato dal contenuto (linea + sfondo leggermente diverso) invece del
|
||||||
|
// bottone appiccicato al bordo inferiore del dialog: ancorato in basso, quindi la
|
||||||
|
// spaziatura sopra/sotto resta corretta anche se la ClientSize cambia. Altezza footer
|
||||||
|
// 60px e ClientSize 270 scelti per lasciare sotto l'ultima riga (eta, Bottom≈189) lo
|
||||||
|
// stesso margine (~20px) usato sopra il titolo, invece dei ~7px sbilanciati di prima.
|
||||||
|
_separatore.BackColor = Color.FromArgb(230, 230, 230);
|
||||||
|
_separatore.Size = new Size(ClientSize.Width, 1);
|
||||||
|
_separatore.Location = new Point(0, ClientSize.Height - 60);
|
||||||
|
_separatore.Anchor = AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Bottom;
|
||||||
|
|
||||||
|
_piePagina.BackColor = Color.FromArgb(247, 247, 248);
|
||||||
|
_piePagina.Size = new Size(ClientSize.Width, 59);
|
||||||
|
_piePagina.Location = new Point(0, ClientSize.Height - 59);
|
||||||
|
_piePagina.Anchor = AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Bottom;
|
||||||
|
|
||||||
_btnAnnulla.Text = "Annulla";
|
_btnAnnulla.Text = "Annulla";
|
||||||
_btnAnnulla.Location = new Point(354, 152);
|
|
||||||
_btnAnnulla.Size = new Size(90, 28);
|
|
||||||
UiStile.Secondario(_btnAnnulla);
|
UiStile.Secondario(_btnAnnulla);
|
||||||
|
UiStile.Arrotonda(_btnAnnulla);
|
||||||
_btnAnnulla.Click += (_, e) => Annullato?.Invoke(this, e);
|
_btnAnnulla.Click += (_, e) => Annullato?.Invoke(this, e);
|
||||||
|
_piePagina.Controls.Add(_btnAnnulla);
|
||||||
|
|
||||||
Controls.AddRange(new Control[]
|
Controls.AddRange(new Control[]
|
||||||
{
|
{
|
||||||
_lblCartella, _progressBar, _lblConteggio, _lblDettaglio, _lblEta, _btnAnnulla
|
_lblTitolo, _lblCartella, _barraTraccia, _lblPercentuale,
|
||||||
|
_lblConteggio, _lblDettaglio, _lblEta, _separatore, _piePagina
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Posizionato dopo l'aggiunta ai Controls: con AutoSize il Width vero si conosce
|
||||||
|
// solo a layout avvenuto, non subito dopo la creazione del bottone.
|
||||||
|
_btnAnnulla.Location = new Point(_piePagina.Width - Margine - _btnAnnulla.Width,
|
||||||
|
(_piePagina.Height - _btnAnnulla.Height) / 2);
|
||||||
|
_btnAnnulla.Anchor = AnchorStyles.Right | AnchorStyles.Top;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Aggiorna(ScanProgress p)
|
public void Aggiorna(ScanProgress p)
|
||||||
{
|
{
|
||||||
_lblCartella.Text = $"Scansione {p.Cartella}...";
|
_lblCartella.Text = $"Scansione: {p.Cartella}";
|
||||||
_tipCartella.SetToolTip(_lblCartella, _lblCartella.Text);
|
_tipCartella.SetToolTip(_lblCartella, _lblCartella.Text);
|
||||||
|
|
||||||
if (p.PrevistiTotali > 0)
|
if (p.PrevistiTotali > 0)
|
||||||
{
|
{
|
||||||
_progressBar.Style = ProgressBarStyle.Continuous;
|
|
||||||
double frazione = Math.Min(1.0, (double)p.FattiTotali / p.PrevistiTotali);
|
double frazione = Math.Min(1.0, (double)p.FattiTotali / p.PrevistiTotali);
|
||||||
_progressBar.Value = (int)(frazione * _progressBar.Maximum);
|
_barraRiempimento.Width = (int)(frazione * _barraTraccia.Width);
|
||||||
|
_lblPercentuale.Text = $"{frazione * 100:0}%";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_progressBar.Style = ProgressBarStyle.Marquee;
|
// ponytail: prima del conteggio totale (poco probabile: richiede la scansione
|
||||||
|
// precedente salvata nel DB) la barra resta vuota invece di un'animazione
|
||||||
|
// indeterminata — se serve, aggiungere un Timer che pulsa _barraRiempimento.
|
||||||
|
_barraRiempimento.Width = 0;
|
||||||
|
_lblPercentuale.Text = "";
|
||||||
}
|
}
|
||||||
|
// Riallineato al margine destro reale ogni volta: AutoSize aggiorna Width non appena
|
||||||
|
// Text cambia, quindi la Location va ricalcolata qui (non solo una volta nel costruttore).
|
||||||
|
_lblPercentuale.Location = new Point(
|
||||||
|
ClientSize.Width - Margine - _lblPercentuale.Width, _barraTraccia.Top - 3);
|
||||||
|
|
||||||
_lblConteggio.Text = p.PrevistiTotali > 0
|
_lblConteggio.Text = p.PrevistiTotali > 0
|
||||||
? $"{p.FattiTotali:N0} / ~{p.PrevistiTotali:N0} file"
|
? $"{p.FattiTotali:N0} / ~{p.PrevistiTotali:N0} file"
|
||||||
|
|||||||
+5
-1
@@ -7,6 +7,10 @@ namespace PrepStep;
|
|||||||
/// (blu pieno) sia per le azioni secondarie, al posto del bottone grigio di default.</summary>
|
/// (blu pieno) sia per le azioni secondarie, al posto del bottone grigio di default.</summary>
|
||||||
internal static class UiStile
|
internal static class UiStile
|
||||||
{
|
{
|
||||||
|
/// <summary>Blu del bottone primario, esposto qui per essere riusato anche da elementi
|
||||||
|
/// non-bottone (es. la barra di avanzamento di ProgressForm) invece di duplicare l'RGB.</summary>
|
||||||
|
public static readonly Color ColorePrimario = Color.FromArgb(0, 99, 177);
|
||||||
|
|
||||||
// AutoSize+Padding invece di una Size fissa in pixel: il bottone si dimensiona sempre
|
// AutoSize+Padding invece di una Size fissa in pixel: il bottone si dimensiona sempre
|
||||||
// al proprio testo (a qualunque lunghezza/font), niente più testo che va a capo e viene
|
// al proprio testo (a qualunque lunghezza/font), niente più testo che va a capo e viene
|
||||||
// tagliato in verticale quando non ci sta nella larghezza indovinata a mano.
|
// tagliato in verticale quando non ci sta nella larghezza indovinata a mano.
|
||||||
@@ -25,7 +29,7 @@ internal static class UiStile
|
|||||||
b.FlatAppearance.BorderSize = 0;
|
b.FlatAppearance.BorderSize = 0;
|
||||||
b.FlatAppearance.MouseOverBackColor = Color.FromArgb(0, 84, 152);
|
b.FlatAppearance.MouseOverBackColor = Color.FromArgb(0, 84, 152);
|
||||||
b.FlatAppearance.MouseDownBackColor = Color.FromArgb(0, 70, 130);
|
b.FlatAppearance.MouseDownBackColor = Color.FromArgb(0, 70, 130);
|
||||||
b.BackColor = Color.FromArgb(0, 99, 177);
|
b.BackColor = ColorePrimario;
|
||||||
b.ForeColor = Color.White;
|
b.ForeColor = Color.White;
|
||||||
b.Font = new Font(b.Font, FontStyle.Bold);
|
b.Font = new Font(b.Font, FontStyle.Bold);
|
||||||
b.Cursor = Cursors.Hand;
|
b.Cursor = Cursors.Hand;
|
||||||
|
|||||||
Reference in new issue
Block a user