2009-09-15 13 views
6

Einfache Frage: Ich habe eine WinForms-Schaltfläche, und ich möchte es sowohl (bedingt) unsichtbar und deaktiviert (um sicher zu gehen, dass, wenn jemand in den Raum klickt, wo die unsichtbare Schaltfläche lebt, wird es nicht aktiviert.) button.Visible = false auch implizieren button.Enabled = false, oder muss ich beide Eigenschaften zum richtigen Zeitpunkt setzen/zurücksetzen?Winforms-Schaltfläche: Ist Visible = false impliziert Enabled = false?

+1

Ich weiß, es gibt keine dumme/faule Frage, aber ernsthaft, warum hast du es nicht gerade versucht? :/ –

+2

Warum brauchen Sie die Schaltfläche deaktiviert, wenn Sie es trotzdem ausblenden? Deaktivieren Sie einfach die zugrunde liegende Funktionalität (indem Sie ein Flag testen, oder aber Sie wissen, dass Sie die Schaltfläche deaktivieren sollten). Auf diese Weise wird, selbst wenn ein dummer Benutzer ein Werkzeug verwendet, um die Schaltfläche erneut anzuzeigen oder eine Fenstermeldung an die unsichtbare, noch aktivierte Schaltfläche zu senden, Ihre Anwendung nichts tun, was sie nicht tun sollte. Mit anderen Worten, wenn Sie die Funktionalität deaktivieren möchten, deaktivieren Sie die Funktionalität und nicht nur die Haustür. – OregonGhost

Antwort

5

Wenn das Steuerelement nicht sichtbar ist, wird es effektiv deaktiviert. Wenn Sie in den Bereich klicken, in dem es angezeigt wird (oder in den Bereich hinein- und hinausgleitet), wenn es sichtbar ist, wird kein Ereignis ausgelöst.

EDIT: Um zu klären, basierend auf andere Antworten und Kommentaren, ist die Taste nicht deaktiviert und die darunter liegende Ereignis Funktionalität programmatisch noch vorhanden, aber die Schaltfläche nicht physisch verfügbar/sichtbar auf dem Formular und den Benutzer sein wird nicht in der Lage sein, damit zu interagieren (außer Sie, als der Programmierer, bieten eine andere Methode programmgesteuert).

+0

Es gibt andere Möglichkeiten als das Klicken mit der Maus (z. B. Tastatur), um eine Schaltfläche zu aktivieren. Ich habe seine Frage gelesen, um zu fragen, ob es einen Weg gibt, einen Knopf zu drücken, nicht nur, dass er mit der Maus erreichbar ist. – recursive

+0

@recursive: Während Ihr Punkt gültig ist, würde ich erwarten, dass ein Steuerelement den Fokus verliert, wenn es ausgeblendet ist, und dass es den Fokus nicht wieder erreichen kann. Dies ist jedoch möglicherweise nicht richtig und ich bin mir nicht sicher, was mit Mnemotechniken passiert. Aber selbst dann gibt es Möglichkeiten, einen Knopf ohne Maus oder Tastatur zu drücken. UI Automation kommt mir in den Sinn. – OregonGhost

1

Einstellung Sichtbar für false tut nicht ändern Sie die Eigenschaft Enabled. Wenn Sie die Eigenschaft jedoch auf false festlegen, wird die Steuerung effektiv nicht einmal ausgeführt. Wenn Sie in den leeren Bereich klicken, der von einer unsichtbaren Schaltfläche verlassen wird, wird das Klickereignis der Schaltfläche nicht ausgelöst.

+0

Danke, Joel. Das ist im Grunde, was ich brauchte. Ich muss nur sicherstellen, dass der Benutzer nicht darauf klicken kann. –

1

Ich glaube nicht, dass es bedeutet, dass es deaktiviert ist. Es bedeutet nur, dass das Steuerelement auf dem Formular nicht sichtbar ist, daher gibt es keine Möglichkeit, die Aktion auszuführen. Wenn Sie die visible -Eigenschaft auf "false" setzen und dann das Click-Ereignis über den Code aufrufen, würde es verarbeitet. Wenn Sie jedoch die Enabled-Eigenschaft auf "False" setzen, würde ich mir vorstellen, dass es nicht

1

Ziemlich sicher ist, wenn .Visible = false, ist die Aktion "_Click" deaktiviert. Wenn Sie zum Beispiel .PerformClick() in Ihrem Code verwenden und .Visible = true, wird _Click ausgeführt. Wenn false, wird _Click nicht ausgeführt.

Verwandte Themen