2009-07-13 17 views
9

Bei der Bearbeitung von Steuerelementen auf einem .NET-Windows-Formular Welche der folgenden Vorgehensweisen ist empfehlenswert und warum?Soll ein Steuerelement deaktiviert und versteckt oder nur versteckt werden?

//Hide control from user and stop control form being useable 
oControl.Enabled = false; 
oControl.Visible = false; 

oder

//Hide control from user and stop control form being useable 
oControl.Visible = false; 

Ich habe den ersten Fall wurde verwenden und immer eine Kontrolle zu deaktivieren, wenn es versteckt, aber ich habe gehört, dass diese falsch ist und dass ich nur sein es verstecken. Ich erinnere mich vage daran, irgendwo gelesen zu haben, dass, wenn Sie nicht ausdrücklich eine Kontrolle ausschließen, diese weiterhin mit dem Benutzer interagieren kann.

Jede Erleuchtung würde geschätzt werden.

Antwort

11

Enabled bezeichnet, ob oder ob nicht der Benutzer mit der Steuerung zusammenwirken kann (dh, wenn die Steuer abgeblendet ist oder nicht)

Visible bezieht sich auf wehether oder nicht, wird die Steuerung (in der Regel dann angezeigt, wenn dies die Steuerung falsch ist wird überhaupt nicht wiedergegeben, jedoch nicht die ganze Zeit anscheinend - siehe die Kommentare dieses Posts).

Wenn das Steuerelement nicht gerendert wird, hat der Wert der aktivierten Eigenschaft keine Auswirkungen.

+4

Dies ist nicht immer der Fall; Siehe meinen Kommentar zu ToolStripMenuItem unter der Antwort von ChrisF. –

8

Von dem MSDN:

Elemente, wo Sichtbarkeit nicht Sichtbar ist nicht teilnehmen Eingang Ereignisse (oder Befehle), hat keinen Einfluss auf entweder die Maßnahme oder Vereinbaren geht von Layout, sind nicht in eine Tab-Sequenz, und wird nicht in Treffer Tests gemeldet werden.

Also ich denke, Sie können davon ausgehen, dass die Einstellung .Enabled = false unnötig ist.

UPDATE

Ich habe die .Visibitydocumentation on the MSDN geprüft, aber leider hat es nichts darüber sagen, ob das Steuerelement deaktiviert ist oder nicht.

+9

Beachten Sie, dass sich die Dokumentation, die Sie verknüpften, auf WPF und nicht auf WinForms bezieht. Ein ToolStripMenuItem, dem eine Tastenkombination zugewiesen wurde, Visible = False und Enabled = True, ruft beispielsweise bei Betätigung der Tastenkombination das Click-Ereignis auf, obwohl es ausgeblendet ist. –

+1

Entschuldigung - ich dachte, ich würde den WinForms-Baum durchbohren.Ich muss irgendwo die falsche Verbindung gefunden haben. – ChrisF

2

Es sei denn, dies ist ein spezielles Steuerelement, das den Fokus erhalten kann, auch wenn es unsichtbar ist, ich glaube nicht, dass Sie es explizit deaktivieren müssen. Das Deaktivieren der Sichtbarkeit sollte ausreichen, um zu verhindern, dass der Benutzer mit dem Steuerelement interagiert.

Ich würde nicht sagen, dass es "falsch" ist, jedoch. Ich würde es als "Overkill" beschreiben.

5

Ein Schnelltest zeigt, dass die Einstellung Visible auf false auch die Zugriffstasten für dieses Steuerelement deaktiviert.

Unter Win32 (dh dies gilt nicht für Windows Forms), accelerators remain enabled, wenn das Steuerelement ausgeblendet, aber nicht deaktiviert ist. Ich nehme an, dass dies die Referenz ist, an die Sie gedacht haben.

3

Für grundlegende Steuerelemente wie Etiketten oder Textfelder, ich glaube nicht, dass es tatsächlich einen Unterschied macht, welche Methode Sie verwenden.

Aber betrachten Sie eine komplexere Steuerung, die einen Timer enthält, um zu prüfen, ob neue Daten angezeigt werden sollen; Durch Deaktivieren der Steuerung wird auch der Timer deaktiviert.

Wenn Sie es unsichtbar machen, ohne es zu deaktivieren, löst der Timer immer noch Ereignisse aus und alle neuen Daten werden noch verarbeitet. Wenn Sie es auch deaktivieren, werden neue Daten nicht verarbeitet. Es hängt von dem spezifischen Fall ab, welches der beiden Verhaltensweisen Sie möchten.

FWIW, stimme ich nicht mit der Person, die Ihnen gesagt, dass es falsch zu verstecken und zu deaktivieren war. Ich denke, dass es in den meisten Fällen unnötig ist.

1

Nicht sicher über .NET, aber ActionScript/Flex hat drei verschiedene Eigenschaften für Steuerelemente, die boolesche Werte verwenden.

aktiviert

sichtbar

includeInLayout

Einstellen der sichtbaren Eigenschaft falsch es um hält und das Layout bewirken kann. Es wird weiterhin vom Display-Renderer gezeichnet. Durch das Festlegen der includeInLayout-Eigenschaft wird verhindert, dass sie zusammen wiedergegeben wird. Oft finde ich es nützlich, alle Eigenschaften in Abhängigkeit davon, was ich mit der Steuerung und meiner Ansicht machen möchte, einzubeziehen. Es kann eine ähnliche Eigenschaft in .NET geben. Aber ich bin mir nicht sicher.

3

Wenn Sie auch Fragen zur Benutzerfreundlichkeit und nicht nur zu technischen Fragen stellen, empfehle ich Ihnen nicht, Dinge zu verstecken (es sei denn, Sie ändern vollständig die aktuelle "Ansicht" Ihrer Anwendung), weil es normalerweise weniger nervig ist Kontrolle deaktiviert (es gibt Ihnen eine Rückmeldung über die Aktion, die Sie tun möchten, ist noch nicht bereit) als ein paar Sekunden zu verbringen, um es zu suchen, nur um nach einer Weile zu erkennen, dass es deaktiviert sein muss, weil die Voraussetzungen dafür nicht erfüllt sind.

Wenn Sie dies bereits bekannt sind, einfach ignorieren :-p es

8

Ob Sie Enabled = false einstellen müssen, wenn eine Kontrolle hängt von der Kontrolle in Frage versteckt, und welche Art von Interaktion bietet. Für viele Steuerelemente (wie z. B. Button oder CheckBox) reicht die Einstellung Visible = false aus, um jegliche Interaktion zwischen dem Benutzer und dem Steuerelement zu verhindern.

Aber einige Steuerelemente (es scheint vor allem diejenigen zu sein, die eine Shortcut-Schlüsseleigenschaft bieten), bieten weiterhin Benutzerinteraktionen, wenn sie nicht sichtbar sind. Zum Beispiel die ToolStripMenuItem (und die "ältere" MenuItem) wird immer noch ihre Click Ereignis aufgerufen, wenn die Tastenkombination gedrückt wird, unabhängig von Visible ist true oder false.

Einstellung Enabled = false verhindert das Aufrufen des Ereignisses Click über Tastenkombinationen in diesen Fällen. Aus diesem Blickwinkel würde ich nicht Rat gegen Einstellung Enabled = false beim Ausblenden eines Steuerelements in einer WinForms-Anwendung.

Verwandte Themen