hallo,
mal eine frage. gibt es eine möglichkeit, ein window bzw dessen inhalt zu disablen ohne die farbe dabei zu ändern? also ich will damit erreichen, das die buttons und tabs in dem Fenster nicht mehr zu steuern sind.
mfg
Zebes
Puuuh, glaube so einfach geht das nicht... Schon versucht ein Panel mit transparenter Hintergrundfarbe drüber zu legen was alle click-events abfängt?
Gruß David
Hi,
ich habe ein ähnliches Problem wie du. In einem Fenster disable ich ein paar Controls und ärgere mich dann über die veränderten Farben.
Man kann diese auch echt nicht direkt am Control ändern indem zum Beispiel sagt
textBox1.Enabled = false;
textBox1.BackColor = Color.Red;
...oder so
Winows bügelt da gnadenlos drüber und macht das Control grau.
Ich weiß nicht, ob da vielleicht was ginge, wenn du entsprechende Funktionen des Controls überschreibst...
Wenn du was findest, sag bitte bescheid^^
Grüße
"Ab heute senden wir unseren Newsletter nicht mehr an [meine eigentliche E-Mail-Adresse], sondern an weg:::
*lach*
Stimmt, ich habe mich auch schonmla gefragt, ob das möglich ist, musste mich aber letzten Endes auch mit dem windows-grau zufrieden geben.
Prinzipiell ist es aber richtig, ein einheitliches Design für disabled controls einzuhalten ...
Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg
Ich kann dazu nichts direkt konstruktiv beitragen, aber
ich finde es gut, wenn Controls grau sind. Dann weiß ich, dass sie deaktiviert sind.
Sind sie trotzdem in ihrer Standardfarbe, wundere ich mich warum sie nicht funktionieren und denke, da ist wohl etwas buggy...
Also kurzum: Es hat seinen Grund warum Controls grau werden beim deaktivieren.
> Codejunky <
Wenn ich ein Button diable und den im "Normalzustand" zeichne, ist das für den späteren Benutzer Verwirrung pur!
Es hat schon seinen Grund, warum Controls die disabled sind anders gezeichnet werden als aktive Controls.
Zur Frage:
Du musst alle Controls, die das Verhalten nicht haben sollen überladen und die Methode OnPaint überschreiben.
"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)
wenn man zum Beispiel eine Combobox disabled, wird das was in der Combobox drinsteht schwerer lesbar...man sollte zumindest die Schriftfarbe ändern können >.>
"Ab heute senden wir unseren Newsletter nicht mehr an [meine eigentliche E-Mail-Adresse], sondern an weg:::
*lach*
Hallo.
Du könntest in einer Schleife für alle ChildControls das PreviewKeyDown-Event auf einen zentralen Handler registrieren und dort dann ggf. Tastatureingaben abfangen. Das gleiche prinzip könnte auch für das MouseDown-Event funktionieren.
Naja das es disabled ist soll durch eine animation angezeigt werden die auf dem button gezeichnet wird. zusätzlich soll der cursor als sanduhr dargestellt werden. wenn ich jetzt das gesamte window disable wird auch die farbe des buttons verändert und die animation sieht auch nicht wie gewollt und gewünscht aus.
es ist halt so gewünscht, dass sich das gui so verhält.
danke für die antworten
mfg
Zebes
Also kurzum: Es hat seinen Grund warum Controls grau werden beim deaktivieren.
Leider können meine Benutzer die Feldinhalte nicht mehr lesen wenn sie grau sind. Auch die Checkboxen sind so gut wie nicht mehr lesbar.
Wenn jetzt jemand nur Rechte zum Ansehen hat und nichts ändern kann ist das sehr schlecht.
Also lasse ich die Felder so wie sie sind, auch wenn sie disabled sind.
Programmtechnisch geht das einfach : Readonly = true, Backcolor ändern bzw. beim Klick auf eine Checkbox diese wieder in den Ursprungszustand versetzen.
Nun erkennt man aber nicht mehr ob man im 'Ändern' oder im 'Ansehen' ist.
Eine bessere Lösung habe ich bisher nicht gefunden.
Aber ich suche noch ...
Grüße Bernd
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
Hi!
Man kann auch was mit Subclassing anstellen, und alle Windowmessages abwürgen.
Der frühe Apfel fängt den Wurm.
Hrm, die harte Methode wäre den WindowsStyle zu verändern, siehe dazu WIN API GetWindowLong und SetWindowLong.
Eine weitere Möglichkeit wäre eine neue Kalsse zu erstellen von dem gewünschten Control abzuleiten und über SetStyles z.B. die Zeichenroutine selbst in die Hand zu nehmen - das kann man z.B. dann über System.Windows.Forms.VisualStyles lösen.
Wieder ein anderer Weg wäre die WndProc zu überschreiben und via WIN API BeginPaint und EndPaint im der WM_PAINT Methode ebenso das Zeichenverhallten zu verändern - hier wird etwas anders gezeichnet, siehe dazu MSDN.
Dann kann man auch noch den Weg ohne die Zeichenroutine zu beinflussen gehen indem man vom gewünschten Control ableitet und via SetStyles das Mouseverhallten beeinflusst. So das unter umständen einfach der Cursor nicht mehr gesetzt werden darf und kann (da muss man etwas herumexperimentieren).
Aber egal welche Möglichkeiten verwenden möchtest, das Problem daran ist, es kostet einfach Zeit und Geduld und manipuliert eigentlich das Standardverhallten.
Würde wahrscheinlich eher dann ein eigenes Control dafür schreiben.
Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(
So das unter umständen einfach der Cursor nicht mehr gesetzt werden darf
Bei mir kann man im 'Ansehen-Modus' trotzdem Cursor setzen und Feldinhalt markieren, um in die Zwischenablage zu kopieren. Ausschneiden geht natürlich nicht.
Grüße Bernd
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
Also kurzum: Es hat seinen Grund warum Controls grau werden beim deaktivieren.
Die Einstellung halte ich für zu einfach. Klingt nach "MS hat das so nicht vorgesehen, dann wird es schon seinen Grund haben. Also ist es auch gut so"...???
Nun gut... Ich habe auch schon länger dieses Problem, dass ich Controls disablen möchte, ohne sie jedoch in grau darstellen zu müssen (meine gesperrten Controls erhalten ein Schloss-Symbol vorneweg, um dem Anwender zu verdeutlichen, dass sie fürs Editieren gesperrt sind). Jedoch leider erscheinen sie alle in diesem hässlichen grau und meine Anwender beklagen sich, dass sie nix lesen können.
In meinem guten alten Delphi gab es dazu mindestens ein Workaround... Ich legte meine Controls auf ein Panel und setzte die Enabled Eigenschaft von Panel dann auf false. Dadurch waren auch meine Controls gesperrt. Delphi jedoch färbte die Controls im Panel jedoch NICHT grau ein. Unter .NET schon.