Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
[erledigt] Vergleich funktioniert nur bei sichtbarer TextBox
Gumba
myCSharp.de - Member



Dabei seit:
Beiträge: 28

Themenstarter:

[erledigt] Vergleich funktioniert nur bei sichtbarer TextBox

beantworten | zitieren | melden

hey,

ich konnte keine lösung für mein problem finden, auch nicht mit der suchfrunktion (vll die falschen keywords?), also hab ich mich entschlossen einen neuen thread aufzumachen um mein problem zu schildern:

In meiner Anwendung muss ich den Anfang von einem String mit einem Item aus einer comboBox vergleichen. Der String steht in einer Textbox. Für den Vergleich hab ich

if (textBox1.Text.StartsWith(comboBox1.Items[0].ToString()))

Das Problem ist folgendes:
Wenn die textBox sichtbar ist funktioniert das if optimal, aber wenn die textbox unsichtbar ist funktioniert der code komischerweise nicht mehr. Warum nicht?
Ich habe das Vergleichen auch noch mit einem normalen String sowie einer textbox (unsichtbar/sichtbar) die zur laufzeit erstellt wurde getestet - es funktioniert keins von den dreien.
Meine Frage also: Warum funktioniert StartWith bei einer SICHTBAREN textbox bei einer UNISCHTBAREN und einem String aber nicht?

Um noch ein paar Infos da zu lassen: Der Vergleich wird in einem neben-thread ausgeführt. Mit dem Thread gibt es jedoch soweit keine Probleme.
Also falls ihr Lösungen für mein Problem wisst würd ich mir über Antworten freuen.
Am besten wenn es Lösungen mit normalen String sind, da ich die Textbox löschen möchste. Sollte es jedoch nur über die Textbox funktionieren wäre das auch kein Problem.

Mfg
Gumba
private Nachricht | Beiträge des Benutzers
michlG
myCSharp.de - Experte

Avatar #avatar-2909.png


Dabei seit:
Beiträge: 3.430
Herkunft: Naturns - Südtirol - Italien

beantworten | zitieren | melden

Hallo Gumba,

das sollte so eigentlich schon funktionieren.
Vermutlich ist der Text in der Textbox noch nicht gesetzt wenn der Code ausgeührt wird.
Hast du schon versucht durch den code zu debuggen um zu sehen ob alle werte gesetzt sind wie sie das sein sollten?

Beim Arbeiten mit mehreren Threads gilt es immer zu beachten dass man nicht vom WOrker-Thread aus auf die GUI zugreift.
Dadurch kann es zu hässlichen Nebenwirkungen kommen ^^
Guck mal hier: [FAQ] Controls von Thread aktualisieren lassen (Control.Invoke/Dispatcher.Invoke)

Versuche einfach durch den Code zu debuggen dann siehst du schon ob alle werte stimmen.

Gruss
michael
private Nachricht | Beiträge des Benutzers
Gumba
myCSharp.de - Member



Dabei seit:
Beiträge: 28

Themenstarter:

beantworten | zitieren | melden

danke für die schnelle antwort
nur leider bin ich mir zu 100% sicher, dass die werte gesetzt sind, da in dem thread ZUERST die werte alle gesetzt sind und erst wenn sicher gestellt ist, dass alle vorhanden sind wird verglichen. Es wird auch nicht vom worker thread darauf zugegriffen, es läuft alles seperat in diesem thread ab. es wird nicht mal was ausgegeben, was vll im konflikt mit dem hauptthread stehen könnte. es wird nur eine varibale gesetzt, die wiederrum nur in diesem thread für weitere aktionen genutzt werden soll.

Das kuriose ist ja, das wenn beim ablauf die textbox sichtbar ist es funktioniert. Wenn beim SELBEN ablauf jedoch die textbox unsichtbar ist funktioniert es nicht mehr?? Also irgendwie glaub ich da is was faul ;)

Mfg
private Nachricht | Beiträge des Benutzers
michlG
myCSharp.de - Experte

Avatar #avatar-2909.png


Dabei seit:
Beiträge: 3.430
Herkunft: Naturns - Südtirol - Italien

beantworten | zitieren | melden

Zitat
Das kuriose ist ja, das wenn beim ablauf die textbox sichtbar ist es funktioniert. Wenn beim SELBEN ablauf jedoch die textbox unsichtbar ist funktioniert es nicht mehr?? Also irgendwie glaub ich da is was faul ;)
Das klingt irgendwie unlogisch.. Mir fällt jetzt jedenfalls kein logischer Grund ein weshalb es nicht funktionieren sollte.

Versuch einfach durch den Code zu debuggen und stelle sicher was der Grund ist weshalb es nicht funktioniert, bzw. was nicht funktioniert.

Vielleicht schlägt diese IF-Abfrage aus einem anderen Grund fehl.

Gruss
Michael
private Nachricht | Beiträge des Benutzers
Gumba
myCSharp.de - Member



Dabei seit:
Beiträge: 28

Themenstarter:

beantworten | zitieren | melden

das wird bei mir schwierig...
Der thread soll sich um den empfang von strings kümmern und ich zunächst auf einen server connecten und ich dann von einer zweiten anwendung einen string schicken müsste. Ich habe jedoch um die werte, die im if überprüft werden sollen vorher noch zu überprüfen eine messagebox vor das if gesetzt.

MessageBox.Show(textBox1.Text + " - " + comboBox1.Items[0].ToString())

Diese gibt z.B. folgendes aus (textboxinhalt zuerst comboboxinhalt folgend):

Name: Wie geht es dir? - Name

In diesem Fall steht Name für den benutzer von anwendung 2 der den string geschickt hat. Der name wird bei jeder nachricht automatisch davorgesetzt (mit : und " ") nun soll er halt die anfang von Name: Wie geht es dir? mit Item[0] vergleichen. Und da wir ja gesehen haben, dass Name durchaus der Anfang des Strings ist und wir wissen, dass StartWith soweit vergleicht, wie werte da sind (also die länge von Name) müsste normalerweise die überprüfung true ergeben, was sie jedoch nicht tut...

Mfg


EDIT.: Rechtschreibfehler ;)
EDIT2.: Ich merke grade, dass es jetzt auch mit sichtbarer textBox nicht mehr funktioniert. Ich werde noch mal alles überprüfen und mich dann erneut hier melden ;)
EDIT3.: Ok falscher Alarm -.- mit sichtbarer textbox funktioniert es doch noch (hatte alten buildstand genommen) das problem besteht also weiterhin noch
Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von Gumba am .
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Gumba,
Zitat
da in dem thread ZUERST die werte alle gesetzt sind und erst wenn sicher gestellt ist, dass alle vorhanden sind wird verglichen. Es wird auch nicht vom worker thread darauf zugegriffen, es läuft alles seperat in diesem thread ab. es wird nicht mal was ausgegeben, was vll im konflikt mit dem hauptthread stehen könnte.
das ist mir ehrlich gesagt viel zu konfus beschrieben. Ich kann daraus nicht lesen, was genau in welchem Thread läuft. Ich kann nicht mal sagen, von wievielen verschiedenen Threads die Rede ist.

Beachten musst du auf jeden Fall: [FAQ] Controls von Thread aktualisieren lassen (Control.Invoke/Dispatcher.Invoke).
Zitat
es wird nur eine varibale gesetzt, die wiederrum nur in diesem thread für weitere aktionen genutzt werden soll.
Ist die Variable volatile? Sonst kann es sein, dass sie zwar in einem einen Thread richtig gesetzt wird, aber der andere Thread nichts davon mitbekommt.

herbivore
private Nachricht | Beiträge des Benutzers
Gumba
myCSharp.de - Member



Dabei seit:
Beiträge: 28

Themenstarter:

beantworten | zitieren | melden

dann will ich versuchen es etwas genauer darzustellen ;)
es gibt 2 threads: 1x den hauptthread (den man immer hat) und 1x einen zusätzlichen thread.
Dieser zusätzliche thread wird zu beginn gestartet und hat dann nichts mehr mit dem hauptthread zu tun (es wird 1x ein treenode gesetzt doch das wurde mit treeNode.BeginnInvoke erfolgreich ausgelagert). Desweiteren soll dieser thread einen in diesem thread erstellten string mit einem item aus einer combobox vergleichen, welche im hauptthread erstellt wurde. Diese combobox wird jedoch nicht aktualisiert, noch wird etwas gesetzt. Es wird lediglich das Item abgefragt (Könnte hier vll der Konflikt liegen?).

Mfg
Gumba
private Nachricht | Beiträge des Benutzers
Darth Maim
myCSharp.de - Member



Dabei seit:
Beiträge: 216

beantworten | zitieren | melden

Und wenn du bei SelectedIndexChanged von der Combobox das ausgewählte item in eine Variable schreibst und immer mit der Variable vergleichst?

Darth Maim
private Nachricht | Beiträge des Benutzers
Gumba
myCSharp.de - Member



Dabei seit:
Beiträge: 28

Themenstarter:

beantworten | zitieren | melden

es geht ja leider nicht um das ausgewählte item ;)
ich poste einfach mal die schleife in der der vergleich drin steht:


for (j = 0; j < comboBox1.Items.Count; j++)
{
   MessageBox.Show(textBox1.Text + " " + comboBox1.Items[j].ToString());
   if (textBox1.Text.StartsWith(comboBox1.Items[j].ToString()))
   {
      label4.Text = comboBox1.Items[j].ToString();
      kontakt = comboBox1.Items[j].ToString();
      break;
   }
}

sobald der vergleich true ist, wird kontakt auf das ensprechende item gesetzt und später wird der text dann zu dem entsprechenden kontakt zugeordnet. Der Grundausgang ist, dass es verschiedene Kontakte geben soll und der empfangene text zu den Kontakten (je nachdem wer geschickt hat) zugeordnet wird.

Mfg

EDIT.: Das komische ist: Bevor der Anfang des Strings verglichen wird wird zunächst das Ende verglichen, um die Art des Textes zu definieren (neuer Kontakt oder einfache Nachricht). Die Überprüfung mit EndsWith funktioniert aber tadellos sowohl mit sichtbarer als auch unsichtbarer textbox...
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Gumba am .
private Nachricht | Beiträge des Benutzers
Darth Maim
myCSharp.de - Member



Dabei seit:
Beiträge: 216

beantworten | zitieren | melden

Das ist doch jetzt Code, der in einem 2. Thread ausgeführt wird, oder? Dann knallts vielleich da:

label4.Text = comboBox1.Items[j].ToString();
Sollte aber eigentlich eine Fehlermeldung geben und nicht von der Sichtbarkeit irgendeiner Textbox abhängen...

Kommt das Programm überhaupt in die Schleife oder ins if - setz mal BreakPoints und guck dir genau an was da passiert. Vielleicht hat die Combobox wenn sie nicht angezeigt wird keine Items - dann würde er nicht in die Schleife gehen => BreakPoint und alle Variablen mal überprüfen.

Darth Maim
private Nachricht | Beiträge des Benutzers
Gumba
myCSharp.de - Member



Dabei seit:
Beiträge: 28

Themenstarter:

beantworten | zitieren | melden

ich hab nen breakingpoint auf die if abgrafe gesetzt und die werte verglichen. alle variablen und werte sind so wie sie sein sollen.
an dem label4 hat es anscheinend nicht gelegen, denn das hab ich eben rausgenommen und durch eine Messagebix ersetzt, die hallo ausgeben soll, falls die if-abfrage erfolgreich ist. Leider hat es wieder einmal nich geklappt... :(

EDIT.: Also leute es scheint irgendetwas mit der comboBox nicht zu stimmen, denn einen normlane string kann ich vergleichen. Ich mach mich dann mal auf die suche nach dem fehler und melde mich wenn ich ihn gefunden hab ;)

Mfg

EDIT2.: Also das ganze ist sehr mysteriös! Bei der sichtbaren textBox steht in den comboBox-Items Name
Bei der textbox erstellt zur runtime steht in den comboBox-Items Name\0inf\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0

warum????
Wobei man, wenn man in die comboBox schaut nur Name auffindet. die ganzen \0 sind dann verschwunden, aber ich denke genau hier drückt der schuh! Hat vll jemand ne idee warum das auftritt?
Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von Gumba am .
private Nachricht | Beiträge des Benutzers
rollerfreak2
myCSharp.de - Member

Avatar #avatar-3271.jpg


Dabei seit:
Beiträge: 916

beantworten | zitieren | melden

Hallo Gumba,

dein Problem wurde doch bereits beschrieben. Hast du dir den entsprechenden Thread mal durch gelesen? [FAQ] Controls von Thread aktualisieren lassen (Control.Invoke/Dispatcher.Invoke)

Du greifst aus einem Thread auf dein Control zu, welches das Control nicht erzeugt hat. Das darfst du weder lesend noch schreibend machen! Deshalb hat der herbivore auch den Hinweis gegeben, den du jedoch m.E. ignoriert hast!
Again what learned...
private Nachricht | Beiträge des Benutzers
Gumba
myCSharp.de - Member



Dabei seit:
Beiträge: 28

Themenstarter:

beantworten | zitieren | melden

ok anscheinend klappt jetzt alles und es hat wirklich daran gelegen, dass ich die combobox im falschen thread gelesen hab :(
wollte mich noch mal bei allen hier bedanken
bis zumnächsten problem ;)

Mfg
Gumba
private Nachricht | Beiträge des Benutzers