Verhindern, dass Kontrollen von Ergrauen Sie, wenn es deaktiviert ist
In winforms .net-Steuerelemente, wenn man den Enabled-Eigenschaft auf false wird das Steuerelement abgeblendet.
In diesem Fall ist es unlesbar für viele Farbkombinationen (da gebe ich Optionen zum ändern der Farbe einer form für den Benutzer zur Laufzeit).
Kann ich verwenden ReadOnly-Eigenschaft, aber es ist verfügbar nur für TextBox-Steuerelemente, die nicht für andere Steuerelemente wie "ComboBox", DateTimePicker usw..
Ich wollte nur wissen, gibt es eine option zur Verfügung, so dass ich verhindern kann, steuert von Ergrauen Sie, wenn es deaktiviert ist.
- Prüfen, ob der Benutzer muss in der Lage sein zu Lesen, die Kontrolle ist, wenn es deaktiviert ist. Nach allem, wenn es deaktiviert ist, sind Sie, und es nicht verwenden, richtig? Ich merke, die Antwort für Ihre Anwendung sein kann, die ja der Benutzer nicht braucht, um es zu Lesen. Aber denken Sie daran. Denke auch über die Einschränkung zur Verfügung Farb-Einstellungen, so dass es kein Problem sein.
- "Nicht ändern default-Verhalten, die Menschen, außer Sie Verhalten sich in gewisser Weise. Würde ich einen bug-report, wenn ein Kontrollkästchen erscheint normal, aber nicht auf Benutzereingaben reagieren.
- Ich Stimme mit Simon - ändern das Verhalten der UI-Elemente ist ein guter Weg, um zu verwirren Ihre Benutzer und Benutzer verwirrt werden dürften ex-Benutzer.
- Vielen Dank für Ihre suggession über die Einschränkung Farben. Ich ll gezielt geben predifined Farbe Kombinationen, so dass es ll nicht auf die Lesbarkeit auswirken.
- Ich bin völlig einverstanden mit dem Punkt, aber concider eine Art von Anpassung an die Benutzer, wie das ändern der Hintergrundfarbe. Ich glaube, ich hab die Lösungen von Brain-Kommentare
- Als ich Herumspielen mit es früher, heute schien es wie benutzerdefinierte Farben stecken, ob das Steuerelement deaktiviert wurde oder nicht (was für meine app ein problem war). Allerdings, ich habe nur versucht, diese für TextBox ForeColor/BackColor.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist ein trauriger moment in fast jedem usability-Studie zu sehen, das Thema hämmerst auf die Tastatur und Maus und nicht zu verstehen, warum es nicht funktioniert. Aber Sie können es bekommen, wenn Sie es wirklich wollen. Der trick ist, legen Sie ein Bild-Feld vor der Kontrolle zeigt eine bitmap des controls in die zuvor aktivierten Zustand. Sie werden nie herausfinden, Sie sind, klicken Sie auf eine bitmap anstelle der tatsächlichen Kontrollen.
Geschieht am besten mit einem Panel, so können Sie ganz einfach deaktivieren Sie die Steuerelemente als Gruppe. Fügen Sie eine neue Klasse zum Projekt und fügen Sie den code unten gezeigt. Kompilieren Sie. Drop-die neue Steuerung von der Spitze der toolbox auf das Formular. Und legen Sie die Steuerelemente drin, die sollte deaktiviert sein. Alles andere ist automatisch, nur legen Sie die Enabled-Eigenschaft auf false gesetzt ist und der Benutzer wird nicht wissen, was passiert ist:
Realistisch Sie nicht wollen, um die Farbe zu ändern Verhaltensweisen deaktivieren/aktivieren der Steuerelemente. Treffer bis Microsoft aktualisiert Windows UX-Richtlinien, wenn Sie die chance bekommen, als Sie geben wir Ihnen einige Hinweise zum layout/design, aber wenn dies ist ein absolut muss für Ihre Anwendung, dann müssen Sie entweder die Kontrollen handhaben paint-Ereignis selbst, oder Erben und überschreiben Sie die paint-Ereignis und ziehen Sie das benutzerdefinierte Farben auf Ihre eigenen, um die Kontrolle dieser Aspekt völlig.
Meine persönliche Empfehlung wäre, finden einen anderen Weg, wie andere erwähnt haben die Leute erwarten, dass Programme Verhalten einer bestimmten Weise, aber wenn Sie Farbschema, features, vielleicht beschränken Sie die Teile der Anwendung, die geändert werden können/personalisiert.
Ich werde gehen auf ein Glied und vermute, dass Sie brauchen, um bestimmte Felder nur-lese-basierend auf die Zugriffsrechte des Benutzers. Was bedeutet, dass ein Benutzer mit rechten zum Bearbeiten von bestimmten Informationen können finden Sie in der combobox, während ein Benutzer laking dieses Recht nicht zulässig wäre, um die Informationen zu Bearbeiten, kann aber immer noch anschauen und eventuell braucht, um es anzuzeigen.
Ich würde vorschlagen, dass Sie den Bildschirm mit wählen Sie die passende Steuerung, basierend auf der Anforderung. Wenn der Benutzer können ändern Sie den ausgewählten Wert in einem Kombinationsfeld, zeigen die combobox. Wenn der Nutzer sollte nicht erlaubt werden, um den Wert zu ändern, zeigen ein readonly-Textfeld enthält den ausgewählten Wert.
Einer Weise zu vereinfachen, die oben genannte Lösung zu entwickeln, die einige Benutzer Steuerelemente zum anpassen der Art, wie Sie die Daten anzeigen, die nach einem Anwesen, nennen wir es
Editable
von der Kontrolle. So können Sie ein Benutzersteuerelement erstellen, die zeigt eine combobox, wennEditable
wahr ist, und ein Textfeld, wennEditable
ist falsch. Und dann eine entsprechende Kontrolle für die datatimepicker etc.Ich weiß, dies ist ein Alter thread aber ich habe entdeckt, eine alternative, einfache Lösung durch Zufall.
Erstellen Sie eine neue transparente label-Steuerelement erbt Label:
(Ich behaupte nicht erfunden haben, diese Klasse, es kam von woanders, wahrscheinlich Hans Passant 🙂 )
In Ihrem designer, erstellen Sie ein TransparentLabel und ihm einen Namen geben, sagen
tLabel1
. Legen Sie die Eigenschaften wie folgt:AutoSize
- False, so dass Sie können dann erweitern Sie es, um alle SteuerelementeSie deaktivieren möchten (das könnte auch die ganze form natürlich).
Text
- leer.Visible
- False (oder lassen Sie es wahr, wenn Sie möchten, um zu sehen, in derdesigner, in diesem Fall verschieben Sie es auf der Rückseite der Z-Reihenfolge, so dass Sie können
siehe auch die Steuerelemente, es zu decken, wenn das Formular ausgeführt wird).
In der Form, führen Sie dieses bit des Codes, wenn Sie möchten, um die Tasten zu sperren:
Dies funktioniert, weil, wenn es sichtbar ist die TransparentLabel ist, immer alle Mausklicks und Tastatureingaben, anstatt das zugrunde liegende Steuerelement, aber es ist transparent, so dass Sie immer noch die zugrunde liegende Steuerelemente. Klicken mit der rechten Maustaste tut sich nichts, weil die labels nicht über ein Kontext-Menü.
Zu re-aktivieren Sie die Steuerelemente, setzen Sie einfach die Visible-Eigenschaft falsch wieder und alles, was Federn ins Leben zurück.
Wenn Sie ein "nur-Lesen-Modus" in Ihrem Programm machen, Checkboxen, optionboxes, Listboxen und Textboxen als Etiketten.
Habe ich zum Beispiel getan, ein online-quiz, dass bei der Eingabe von Werten, die integrierten Knöpfe und so weiter, aber wenn jemand in der Beurteilung der quiz-Sie finden Sie alle Antworten und-Beschriftungen mit dem gewählten Wert als text. Für mich ist dies der einzige Weg, es zu tun, ohne zu stören den normalen Weg des Denkens Benutzeroberfläche für Benutzer und Entwickler.
Wenn Sie eine Gruppe von wählbaren Möglichkeiten und möchten die Möglichkeiten werden sichtbar, auch in der read-only-Modus, dann schreiben Sie alle Optionen und markieren Sie die ausgewählten in einer Weise, die nicht aussieht wie eine optionbox och checkbox.
Thats my 5 cents in diesem Bereich.