2009-01-27 17 views
6

Diciamo che ho un controllo e voglio impedirne la modifica.Come si disabilitano i controlli .net Winforms senza modificarne l'aspetto?

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 evidenti:

Textbox1.BackColor = Color.White; 

o

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

ma purtroppo questo non funziona per ogni controllo (ad esempio pulsanti radio)

altro la soluzione è di lasciare intatta la proprietà Enabled e di 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 mi riferisco soluzioni del mondo reale, naturalmente è possibile catturare uno screenshot del controllo e visualizzare la copia per il controllo ...: p)

risposta

3

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 sottoclasse il controllo e gestisci autonomamente i messaggi di colore. Quando il controllo è abilitato, è sufficiente delegare il disegno alla classe base. Quando il controllo è disabilitato puoi lasciare che la classe 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.

0

Alcuni controlli possono essere impostati a sola lettura che lascia loro abilitati, ma incapace di essere cambiato. Questo potrebbe essere quello che stai cercando.

Detto questo, probabilmente sarai un mondo di dolore quando i tuoi utenti cominceranno a confondersi perché sembra che dovrebbero essere in grado di modificare i controlli, ma non possono. 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.

+0

Ho postato prima che la domanda fosse effettivamente terminata. –

+1

ahah! Ancora un altro cecchino della reputazione :) – Brann

0

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 desidera rimanere coerenti con altre interfacce Windows. Quando qualcuno usa un'applicazione Windows, ha certe aspettative su come dovrebbe apparire e agire.

Se si devia da queste aspettative, molto spesso l'utente penserà che il proprio software è un pezzo di spazzatura.

+1

Sono globalmente d'accordo con il tuo punto, MA in alcuni casi vuoi veramente disabilitare il controllo senza alterarne l'aspetto (soprattutto perché l'aspetto "disabilitato" è spesso difficile da leggere). Ecco perché la proprietà ReadOnly è integrata nel framework per alcuni controlli, non è vero? – Brann

+1

Sì, e la proprietà di sola lettura provoca anche una modifica visiva del controllo: è solo una diversa modifica visiva. –

0

Normalmente, Sì, non si desidera modificare 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 sia solo una cosa momentanea determina in realtà una percezione molto più negativa del software rispetto alla soppressione del cambio di aspetto per i controlli disabilitati per evitare di lampeggiare molte parti della forma sarebbe.

Problemi correlati