Come disabilitereste i controlli di .net Winforms senza modificarne l’aspetto?

Diciamo che ho un controllo e voglio impedirne la modifica.

L’impostazione della proprietà Enabled del controllo su False funzionerà, ma l’aspetto del controllo cambierà di conseguenza, in genere in un carattere nero su grigio di difficile lettura. Quando la leggibilità è ancora importante, questo è un problema reale.

Per un TextBox, ci sono alcune correzioni ovvie:

Textbox1.BackColor = Color.White; 

o

 Textbox1.ReadOnly= true; // instead of setting Enabled to false 

ma sfortunatamente questo non funzionerà per tutti i controlli (es. pulsanti radio)

Un’altra soluzione è lasciare intatta la proprietà Enabled e iscriversi all’evento focus come questo (ma questa non è una soluzione davvero elegante)

  this.Textbox1.Enter += new System.EventHandler(this.Textbox1_Enter); private void Textbox1_Enter(object sender, EventArgs e) { Textbox1.FindForm().ActiveControl = null; } 

Hai visto altri modi per affrontare questo problema? (e intendo le soluzioni del mondo reale, ovviamente puoi catturare uno screenshot del controllo e visualizzare la copia sul controllo …: p)

C’è un argomento che interferire con il comportamento standard di Windows è confuso per l’utente, ma a parte questo ho visto questo fatto prima, anche se più comunemente in C ++. Puoi sottoclass il controllo e gestisci autonomamente i messaggi di colore. Quando il controllo è abilitato, è sufficiente debind il disegno alla class base. Quando il controllo è disabilitato puoi lasciare che la class di base si disegna da solo e quindi fare un disegno personalizzato sopra l’alto o puoi semplicemente disegnare tutto da solo. Consiglio vivamente la prima di queste opzioni.

Alcuni controlli possono essere impostati su ReadOnly che li lascia abilitati, ma non possono essere modificati. Questo potrebbe essere quello che stai cercando.

Detto questo, probabilmente ti sentirai un mondo di dolore quando i tuoi utenti cominceranno a venire confusi perché sembra che dovrebbero essere in grado di modificare i controlli, ma non possono farlo. C’è un motivo per cui cambiano il loro aspetto visivo: è comunicare lo stato del sistema all’utente. Pasticcia con quello e possono finire molto confusi.

Se un controllo è disabilitato / di sola lettura, allora ha davvero bisogno di apparire disabilitato / di sola lettura. Altrimenti, confonderai completamente l’utente.

Ci sono ottime ragioni per cui i controlli di Windows si comportano come loro e si vuole davvero rimanere coerenti con le altre interfacce Windows. Quando qualcuno usa un’applicazione Windows, ha certe aspettative su come dovrebbe apparire e agire.

Se ti allontani da queste aspettative, molto spesso l’utente penserà che il tuo software sia un pezzo di spazzatura.

Normalmente, Sì, non voglio cambiare il comportamento predefinito di Windows.

Ma ho un caso in cui sto disabilitando molti controlli su una pagina, di solito per meno di un secondo, per evitare alcuni problemi di cross-threading in un’applicazione multi-thread. Ciò causa grossi problemi di sfarfallio durante il passaggio di un utente, ad esempio una vista ad albero o una casella di riepilogo. NON cambiare il loro aspetto in questo caso è una cosa desiderabile.

Tuttavia, quando i controlli sono disabilitati per altri motivi, desidero che il loro aspetto rifletta il loro stato abilitato / disabilitato.

Lo sfarfallio degli stati abilitati / disabilitati nel caso in cui si tratti solo di una cosa momentanea porta in realtà a una percezione molto più negativa del software più che alla soppressione del cambiamento di aspetto per i controlli disabilitati per evitare di lampeggiare in molte parti della forma .