Sulla base di @ pinkfloydx33 risposta e la modifica che ho fatto su di esso, ho creato un'estensione metodo che rende ancora più facile, basta creare una public static class
come questo:
public static class GuiExtensionMethods
{
public static void Enable(this Control con, bool enable)
{
if (con != null)
{
foreach (Control c in con.Controls)
{
c.Enable(enable);
}
try
{
con.Invoke((MethodInvoker)(() => con.Enabled = enable));
}
catch
{
}
}
}
}
Ora, per attivare o disattivare un controllo, forma, menu, subcontrols, ecc basta fare:
this.Enable(true); //Will enable all the controls and sub controls for this form
this.Enable(false);//Will disable all the controls and sub controls for this form
Button1.Enable(true); //Will enable only the Button1
Allora, cosa avrei fatto, simile a quella di @ pinkfloydx33 risposta:
private void Form1_Load(object sender, EventArgs e)
{
this.Enable(false);
Button1.Enable(true);
}
Mi piace metodi di estensione, perché sono statici e si può usare ovunque senza creare istanze (manualmente), ed è molto più chiara almeno per me.
Se si inserisce il pulsante in un modulo separato? – SLaks
Non è possibile eseguire il ciclo di tutti i controlli del modulo, impostando la proprietà Abilitato su ciascuno? Nel tuo ciclo, ignora il pulsante usando il suo ID/nome. Oppure, vai avanti e disabilita tutto nel ciclo, quindi subito dopo attiva il pulsante. –