PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 3 Eingabefelder, bei Übereinstimmung zweier Eingaben-> Farbe ändern


Scaleo
17.08.2006, 02:13
Hi!

Zu Beginn entschuldige ich mich dafür, sollte der Thread in einem falschen Bereich gelandet sein, ich bin (wie man links sieht) neu hier und wusste deshalb nicht 100%ig wo ich ihn erstellen sollte.
Falls er also falsch ist, bitte verschieben. :)

Also zu meinem Problem: für die meisten von euch wird es eine Tippübung sein, aber ich sitze schon etwas länger dran (den ganzen Abend) und komme nicht richtig weiter, entweder ich bin schon zu müde oder was ich eher glaube, einfach zu unbegabt.

Also mein Programm besteht zum größten Teil aus 3 Eingabefeldern, wo der User einen beliebigen Text eintragen kann.
Wenn man eine Funktion aufruft (über einen Button), soll das passieren:
Wenn in 2 Boxen der gleiche Text steht, soll sich die Hintergrundfarbe dieser beiden Boxen grün färben.
Wenn in der 3. Box auch noch ein Text steht, der sich aber von den anderen unterscheidet, soll die 3. Box rot werden, wenn darin aber keiner steht, soll sie weiß bleiben.
Steht in allen Boxen der gleiche Text, werden folglich alle grün.
Wenn z. B. nur in 1 Box ein Text steht, muss diese weiß bleiben, weil kein anderer Text zum Vergleichen da ist. Die Boxen können untereinander ausgetauscht werden, das heißt jede Box kann mal den gleichen Text wie eine Andere, einen anderen Text oder überhaupt keinen Text haben.

Ablaufen soll der Vorgang wie gesagt in einer Funktion, damit man jederzeit neu Vergleichen kann. Wenn die Funktion beendet ist, soll die vergebene Hintergrundfarbe erhalten bleiben, bis man einen neuen Text eingegeben hat und die Funktion erneut startet.


Was ich jetzt nicht möchte ist jemand, der mir das in einer Programmiersprache vorprogrammiert (1. gilt es in den meisten Foren als unhöflich, sich so "bedienen" zu lassen, und 2. ihr wisst die Sprache nicht :p ), sondern jemand der mir erklärt, wie man grundsätzlich soetwas verwirklicht, mit if-verzweigungen, while-schleifen, "="-Vergleiche ect., sodass ich es dann auf meine Sprache "umschreiben" kann.



Danke schonmal für eure Hilfe :)


Vase2k
17.08.2006, 02:51
ich mach das ganze mal ein wenig in pseudo-code ..


//möglichkeit 1
wenn feld1 und feld2 nicht leer sind
--> vergleiche feld1 mit feld2
----> wenn inhalt von feld1 = inhalt von feld2
--------->
{ setze farbe von feld1 und feld2 auf grün, ansonsten rot
speichere zwischenvariable foo <-- zum vergleichen mit feld3
}

//möglichkeit 2
wenn feld1 text enthält und feld2 ist leer
--> {tue nix ;)}

//möglichkeit 3
wenn feld3 nicht leer und foo (siehe möglichkeit1) gesetzt ist
--> wenn feld3 und foo gleich sind
-----> setze farbe von feld3 auf grün ansonsten rot


und das müsste man jetzt für die verschiedenen kombinationen durcharbeiten .. zu mehr ist mein kopf im augenblick nicht in der lage, vielleicht hilft es dir aber trotzdem ein wenig ..

amoxys
17.08.2006, 07:08
Hallo Scaleo. Ich bin auch der Meinung, daß man dein Problem am besten mit If-Abfragen lösen kann. Für drei Textfelder fällt mir gerade keine passende Möglichkeit ein, Schleifen zu verwenden.

Für die Entwicklung des Codes kann man versuchen zuerst mal die genauen Regeln für die Färbung eines jeden Feldes festzuhalten. So wie ich dich verstanden habe, müssten sie ungefähr so lauten:
Ein Feld wird weiss, wenn es leer ist, oder beide anderen Felder leer sind. Ein Feld wird grün, wenn es noch mind. ein Feld gibt, das den selben Inhalt hat. In allen anderen Fällen wird ein Feld rot.

Im Anschluss übersetzt man diese Regeln dann in ein System verschachtelter If-Abfragen. Das könnte dann z.B. so aussehen:

a) Zuerst werden alle drei Felder nacheinander daraufhin überprüfen, ob eines davon leer ist. Wenn ein leeres Feld gefunden wurde, wird es weiss gefärbt, und wenn eines der anderen beiden auch leer ist, so werden sie auch beide weiss. Wenn dieses Feld aber das einzige Leere ist, so vergleicht man den Inhalte der anderen und färbt sie beide rot oder grün. Fertig.

b) Wenn aber kein einziges Feld leer ist, werden nacheinander die Inhalte aller drei Eingabefeld-Kombinationen verglichen. Wenn sie irgendwo übereinstimmen, werden diese beide Felder grün. Der Text im übrigen Feld wird dann auch noch verglichen und entsprechend gefärbt. Fertig.

c) Wenn nun aber kein Feld leer ist und auch kein Text mit einem anderen übereinstimmt, werden alle Boxen rot gefärbt.


Leider ist das kaum weniger Code, als wenn man einfach alle 15 Möglichkeiten abfragt. Vielleicht fällt jemandem ja noch etwas anderes ein.

Scaleo
18.08.2006, 00:50
Hi!

Erstmal vielen Dank für eure Hilfe, nun funktioniert das Ganze endlich wie gewollt. :)

Ich habe gerade die Schritt für Schritt-Anleitung von amoxys übersetzt und es hat sofort funktioniert, super!
Du hattest Recht, es ist in der Tat eine langer Code (76 Zeilen) geworden.


Also danke nochmal, falls jemandem eine drastisch kürzere Lösung einfällt bitte schreiben, aber eigentlich bin ich schon zufrieden wenn es überhaupt funktioniert ;)


mfg
Scaleo

Firefall
18.08.2006, 22:55
Hi!

Erstmal vielen Dank für eure Hilfe, nun funktioniert das Ganze endlich wie gewollt. :)

Ich habe gerade die Schritt für Schritt-Anleitung von amoxys übersetzt und es hat sofort funktioniert, super!
Du hattest Recht, es ist in der Tat eine langer Code (76 Zeilen) geworden.


Also danke nochmal, falls jemandem eine drastisch kürzere Lösung einfällt bitte schreiben, aber eigentlich bin ich schon zufrieden wenn es überhaupt funktioniert ;)


mfg
Scaleo

Einen Innerloop und einen Outerloop, wobei beide durch alle Felder springen und je miteinander verglichen werden. "Pseudocode"
For Each OuterLoopFieldValue In Fields
For Each InnerLoop FieldValue In Fields
If OuterLoopFieldValue = InnerLoopFieldValue Then
'Farben entsprechend setzen
Else
'Farben entsprechend setzen
End If
Next
NextDas wäre jetzt nur mal für 2 von 3 Feldern. Es lässt sich natürlich noch ein dritter Loop einbauen, dann kann präziser verglichen und reagiert werden. Alles in allem sieht es für mich nach eine Rekursiven Funktion aus, da wir ja mehrere Loops ineinander haben, abhängig von der Anzahl Felder... Aber wie man das jetzt in eine entsprechende Funktion umwandeln könnte, kann ich dir leider auch nicht sagen...