Autor Beitrag
DarkSu
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Do 04.04.13 19:03 
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:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
        private void comboBox1_DropDown(object sender, EventArgs e)
        {
            // Checken ob Form1 OnTop ist, wenn ja dann ausschalten
            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 user profile iconTh69: Titel geändert: From1 -> Form
DarkSu Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Do 04.04.13 22:18 
So nochmal ich. Quasi als Alleinunterhalter :)

Ich hab das ganze einstweilen so gelöst. Evtl. fällt jemand ja was besseres ein ..

ausblenden 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)
        {
            // Checken ob Form1 OnTop ist, wenn ja dann ausschalten und sich IstWert merken
            if (checkBox1.Checked == true)
            {
                OnTop_warZustand = true;
                checkBox1.Checked = false;
            }
        }

        private void comboBox1_DropDownClosed(object sender, EventArgs e)
        {
            // Wenn Form1 auf OnTop war, dann wieder zurücksetzen
            if ((checkBox1.Checked == false) & (OnTop_warZustand = true))
             {
                checkBox1.Checked = true;
                OnTop_warZustand = true;
             }
        }


Gruss DarkSu
DarkSu Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Mo 12.08.13 17: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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Mo 12.08.13 17:24 
ausblenden 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:
ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Mo 12.08.13 17: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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mo 12.08.13 17: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 Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Mo 12.08.13 19:28 
user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:
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.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
                // On Top ON/OFF
                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.


ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
        private void timer1_Tick(object sender, EventArgs e)
        {
            //Always On Top
            if (checkBox1.Checked == true)
            {
                this.TopMost = true;
            }
            else
            {
                checkBox1.Checked = false;
                this.TopMost = false;
            } 
[...]


mfg DarkSu
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mo 12.08.13 20:37 
Wofür ist der Timer?
DarkSu Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Di 13.08.13 06:11 
user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:
Wofür ist der Timer?


Siehe zwischen den beiden Schnippsel ..

mfg DarkSu
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 13.08.13 09: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?