Entwickler-Ecke
WinForms - ComboBox und Form on Top
DarkSu - Do 04.04.13 18:03
Titel: ComboBox und Form on Top
Hallo zusammen ..
Habe eben festgestellt das wenn das Form1 immer TopMost ist, dass die comboxBox1 nicht geht.
Öffnet sich und geht gleich wieder zu. Wenn ich TopMost ausschalte geht es. Kennt einer einen Trick das zu umgehen ?
Denke dann an etwa sowas:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| private void comboBox1_DropDown(object sender, EventArgs e) { if (checkBox1.Checked == true) { checkBox1.Checked = false; } } |
Nun sollte ich mir natürlich vorher merken wie der Schalter war, um ihn dann wieder in comboBox1_DropDownClosed zurück zu setzen.
Achja die checkBox1 steuert bei mir
this.TopMost = true; oder eben nicht ..
Gruss DarkSu
Moderiert von
Th69: Titel geändert: From1 -> Form
DarkSu - Do 04.04.13 21:18
So nochmal ich. Quasi als Alleinunterhalter :)
Ich hab das ganze einstweilen so gelöst. Evtl. fällt jemand ja was besseres ein ..
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| private void comboBox1_DropDown(object sender, EventArgs e) { if (checkBox1.Checked == true) { OnTop_warZustand = true; checkBox1.Checked = false; } }
private void comboBox1_DropDownClosed(object sender, EventArgs e) { if ((checkBox1.Checked == false) & (OnTop_warZustand = true)) { checkBox1.Checked = true; OnTop_warZustand = true; } } |
Gruss DarkSu
DarkSu - Mo 12.08.13 16:10
Sorry nun muss ich langer Zeit doch nochmal das Thema aufgreifen. Das Problem ist leider auch in anderen "Abteilungen" vorhanden. Der obige Trick funktioniert zwar mit der comboBox1 aber leider nicht bei folgendem Problem.
Ist mein Form mit "this.TopMost = true;" im Vordergrund dann spinnt auch das Contextmenü im WebControl ( WebBrowser ). Wenn ich also die Rechte Maustaste klicke kann ich "OPTISCH" das Manü zick mal an den Screen zaubern. Schalte ich TopMost = false passiert das nicht.
Irgend jemand eine Idee wie ich das abfangen kann. Oder gibt es eine Möglichkeit das Webcontrol Contextmenu (rechte Maustaste) zu kontrollieren ?
Ala if Context open then ...
mfg DarkSu
Marc. - Mo 12.08.13 16:24
C#-Quelltext
1:
| if ((checkBox1.Checked == false) & (OnTop_warZustand = true)) |
Hi! Sofern das auch Deinem kompilierten Quelltext entspricht ist Dir hier ein ganz grober Schnitzer unterlaufen. ;)
Es empfiehlt sich übrigens stets auf Vergleiche mit true und gegenfalls false zu verzichten:
C#-Quelltext
1:
| if (!checkBox1.Checked & OnTop_warZustand) |
Aus Zeitgründen kann ich mich leider nicht mit den restlichen Problemen beschäftigen. Aber vielleicht war es das auch bereits. :nixweiss:
Beste Grüße
DarkSu - Mo 12.08.13 16:37
Hallo Marc.
Danke für den Hinweis .. Ja das ist mir auch schon vor einiger Zeit aufgefallen. Das hat also nichts mit dem jetzigen Fehler/Problem zu tun. Die comboBox tut ihren Dienst wie sie soll.
Dank Dir trotzdem ..
mfg DarkSu
Ralf Jansen - Mo 12.08.13 16:43
Die Wurzel des Problems ist das du TopMost änderst während die Form angezeigt wird. Jedes Control mit Kindfenstern wird potentiell darüber stolpern. Am besten wäre es das einfach nicht zu tun. Sondern dich vor dem anzeigen der Form zu entscheiden oder zumindest die Form sauber neu zu öffnen wenn sich TopMost ändert.
Ansonsten wartet sicher schon irgendwo das nächste Control auf dich das damit ein Problem haben wird.
DarkSu - Mo 12.08.13 18:28
Ralf Jansen hat folgendes geschrieben : |
Die Wurzel des Problems ist das du TopMost änderst während die Form angezeigt wird. Jedes Control mit Kindfenstern wird potentiell darüber stolpern. Am besten wäre es das einfach nicht zu tun. Sondern dich vor dem anzeigen der Form zu entscheiden oder zumindest die Form sauber neu zu öffnen wenn sich TopMost ändert.
Ansonsten wartet sicher schon irgendwo das nächste Control auf dich das damit ein Problem haben wird. |
Hallo Ralf ..
Die Wurzel allen übels ist sicher das TopMost, allerdings ändere ich das während das Form angezeigt wird eigenlich nicht mehr. Der Zustand wird in der Regel beim starten über ein INI File festgelegt.
C#-Quelltext
1: 2: 3: 4: 5: 6:
| checkBox1.Text = ini.IniReadValue("Settings", "Top"); if (checkBox1.Text == "ON") { checkBox1.Checked = true; } |
Setzen tu ich das ganze dann über den Timer um den Zustand gegebenfalls auch über eine checkBox zu
ändern.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| private void timer1_Tick(object sender, EventArgs e) { if (checkBox1.Checked == true) { this.TopMost = true; } else { checkBox1.Checked = false; this.TopMost = false; } [...] |
mfg DarkSu
Ralf Jansen - Mo 12.08.13 19:37
Wofür ist der Timer?
DarkSu - Di 13.08.13 05:11
Ralf Jansen hat folgendes geschrieben : |
| Wofür ist der Timer? |
Siehe zwischen den beiden Schnippsel ..
mfg DarkSu
Ralf Jansen - Di 13.08.13 08:52
Der Satz ist nicht wirklich erhellend.
Es sieht für mich so aus als würdest du vor dem anzeigen die INI auslesen und nur die CheckBox setzen, warum nicht gleich auch TopMost? Warum nicht den CheckBox Zustand dirket mit TopMost verknüpfen warum einen Timer? Ich vermute mal der Timer soll es aus irgendeinem Grund verzögern potentiell zu einem Zeitpunkt der schon nach dem ersten anzeigen liegt (Show() oder ShowModal()) was die Probleme verursacht. Aber welches Problem sollte der Timer lösen?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!