7 Stimmen

Wie würden Sie deaktivieren .net Winforms Controls ohne ihr Aussehen zu ändern?

Nehmen wir an, ich habe eine Kontrolle und möchte verhindern, dass sie bearbeitet wird.

Wenn Sie die Eigenschaft "Aktiviert" des Steuerelements auf "Falsch" setzen, funktioniert das zwar, aber das Erscheinungsbild des Steuerelements ändert sich entsprechend, in der Regel zu einer schwer lesbaren Schriftart (schwarz über grau). Wenn die Lesbarkeit noch wichtig ist, ist dies ein echtes Problem.

Für eine TextBox gibt es ein paar offensichtliche Korrekturen:

Textbox1.BackColor = Color.White;

または

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

aber leider funktioniert das nicht für alle Steuerelemente (z.B. Radiobuttons)

Eine andere Lösung besteht darin, die Eigenschaft Enabled unberührt zu lassen und das Fokus-Ereignis wie folgt zu abonnieren (dies ist jedoch keine wirklich elegante Lösung)

    this.Textbox1.Enter += new System.EventHandler(this.Textbox1_Enter);

    private void Textbox1_Enter(object sender, EventArgs e)
    {
      Textbox1.FindForm().ActiveControl = null;
    }

Haben Sie andere Möglichkeiten gesehen, mit diesem Problem umzugehen? (und ich meine Lösungen aus der realen Welt; natürlich können Sie einen Screenshot des Steuerelements erstellen und die Kopie über dem Steuerelement anzeigen...:p)

2voto

Stu Mackellar Punkte 11402

Es gibt das Argument, dass die Einmischung in das Standardverhalten von Windows für den Benutzer verwirrend ist, aber abgesehen davon habe ich dies schon einmal gesehen, wenn auch häufiger in C++. Sie können das Steuerelement unterklassifizieren und die Zeichnungsmeldungen selbst verwalten. Wenn das Steuerelement aktiviert ist, delegieren Sie das Zeichnen einfach an die Basisklasse. Wenn das Steuerelement deaktiviert ist, können Sie entweder lassen Sie die Basisklasse selbst zeichnen und dann tun einige benutzerdefinierte Zeichnung über die Oberseite oder Sie können nur das gesamte Ding selbst zeichnen. Ich würde dringend empfehlen, die erste dieser Optionen.

0voto

T. Phaneuf Punkte 1

Normalerweise, ja, Sie wollen das Standardverhalten von Windows nicht ändern.

Aber ich habe einen Fall, wo ich viele Steuerelemente auf einer Seite deaktivieren, in der Regel für weniger als eine Sekunde, um einige Cross-Threading-Probleme in einer Multi-Thread-Anwendung zu vermeiden. Dies verursacht große flackernde Probleme, wie ein Benutzer Rollen durch, sagen wir eine Baumansicht oder Listbox. Ihr Aussehen in diesem Fall NICHT zu ändern, ist wünschenswert.

Wenn die Steuerelemente jedoch aus anderen Gründen deaktiviert sind, möchte ich, dass ihr Aussehen ihren aktivierten/deaktivierten Zustand widerspiegelt.

Das Flackern des aktivierten/deaktivierten Zustands, wenn es sich nur um eine vorübergehende Erscheinung handelt, führt zu einer viel negativeren Wahrnehmung der Software als die Unterdrückung der Änderung des Erscheinungsbilds für deaktivierte Steuerelemente, um das Blinken vieler Teile des Formulars zu vermeiden.

-1voto

Orion Adrian Punkte 18345

Einige Steuerelemente können auf ReadOnly gesetzt werden, wodurch sie zwar aktiviert bleiben, aber nicht geändert werden können. Dies könnte das sein, wonach Sie suchen.

Das heißt, Sie werden wahrscheinlich sehr enttäuscht sein, wenn Ihre Benutzer verwirrt sind, weil es so aussieht, als ob sie die Steuerelemente bearbeiten könnten, aber sie können es nicht. Es gibt einen Grund, warum sie ihr visuelles Erscheinungsbild ändern - es geht darum, dem Benutzer den Zustand des Systems zu vermitteln. Wenn Sie daran rütteln, kann das zu großer Verwirrung führen.

-1voto

17 of 26 Punkte 26635

Wenn ein Steuerelement deaktiviert/lesegeschützt ist, muss es wirklich deaktiviert/lesegeschützt aussehen. Andernfalls werden Sie den Benutzer völlig verwirren.

Es gibt sehr gute Gründe, warum sich Windows-Steuerelemente so verhalten, wie sie es tun, und Sie möchten wirklich mit den anderen Windows-Oberflächen da draußen konsistent bleiben. Wenn jemand eine Windows-Anwendung benutzt, hat er bestimmte Erwartungen, wie sie aussehen und sich verhalten sollte.

Wenn Sie von diesen Erwartungen abweichen, wird der Benutzer Ihre Software in den meisten Fällen für Schrott halten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X