Autor Beitrag
Macoy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: Di 11.04.06 09:53 
Hallo,

Ich habe ein MDI mit mehrenen Tool-Fenstern. Dazu ein Menupunkt "Ansicht" in dem man die Sichtbarkeit dieser Toolfenster toggeln kann. Dieses Umschalten realisiere ich mit:

ausblenden C#-Quelltext
1:
2:
3:
4:
if(toolWin.Visible)
  toolWin.Hide();
else
  toolWin.Show();


Soweit sogut... Wenn der User aber die Idee kommt, das toolWin mit einem Klick aufs Kreuzchen (Fenster schliessen) zuzumachen, funktioniert dieser Mechanismus nicht mehr. Ich kann weder das Fenster sichtbar machen, noch bekomme ich eine Nullpointer Exception ... Was passiert mit dem Fenster ? Zu Null wird es jedenfalls nicht - also muss es doch noch irgendwo herumschwirren.
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Di 11.04.06 16:16 
Zitat:
Was passiert mit dem Fenster ?

Es ist disposed, ist also wenigstens zur Anzeige nicht mehr nutzbar.
user profile iconMacoy hat folgendes geschrieben:
Zu Null wird es jedenfalls nicht
Wie sollte denn das funktionieren :gruebel: ? Eine Klasse kann ja schlecht die Variablen, die eine Referenz auf sie halten, beeinflussen.
Martin1966
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1068

Win 2000, Win XP
Delphi 7, Delphi 2005
BeitragVerfasst: Di 11.04.06 16:32 
Hallo Macoy :wink2:

Verwende am besten das OnClose Event des Toolfensters. Dort legst du dann über die Variable Action fest das nicht freigegeben wird sondern nur verborgen (caHide).

Lg Martin

_________________
Ein Nutzer der Ecke ;-)
Robert_G
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 416


Delphi32 (D2005 PE); Chrome/C# (VS2003 E/A, VS2005)
BeitragVerfasst: Mi 12.04.06 00:30 
user profile iconMacoy hat folgendes geschrieben:
Dieses Umschalten realisiere ich mit:
ausblenden C#-Quelltext
1:
2:
3:
4:
if(toolWin.Visible)
  toolWin.Hide();
else
  toolWin.Show();
Wie wär's so?
ausblenden C#-Quelltext
1:
toolWindow.Visible = !toolWindow.Visible;					

Zitat:
Soweit sogut... Wenn der User aber die Idee kommt, das toolWin mit einem Klick aufs Kreuzchen (Fenster schliessen) zuzumachen,
Schaue dir mal den FormClosing event an.
Da kannst du gezielt dann Cancel setzen, wenn der User dein Child schließen wollte.
ausblenden C#-Quelltext
1:
e.Cancel = (e.CloseReason == CloseReason.UserClosing);					

Zitat:
funktioniert dieser Mechanismus nicht mehr. Ich kann weder das Fenster sichtbar machen, noch bekomme ich eine Nullpointer Exception ... Was passiert mit dem Fenster ? Zu Null wird es jedenfalls nicht - also muss es doch noch irgendwo herumschwirren.
Wie Klaradings schon sagte, es wurde Dipose ausgeführt, welches bei jedem Control das versteckte Win32-Fenster zerstört. Du hast zu dem Zeitpunkt kein richtiges Control mehr. Nur noch eine sinnlose "Hülle".
Ein Form, das mit Show gezeigt wird, wird durch Close sofort vernichtet. Bei ShowModal bist du wiederum dafür zuständig. [meta]Wenn du nicht erst auf den Finalizer warten willst[/meta]

@Martin, wieder verlaufen? :mrgreen:
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mi 12.04.06 08:52 
user profile iconRobert_G hat folgendes geschrieben:
user profile iconMacoy hat folgendes geschrieben:
Dieses Umschalten realisiere ich mit:
ausblenden C#-Quelltext
1:
2:
3:
4:
if(toolWin.Visible)
  toolWin.Hide();
else
  toolWin.Show();
Wie wär's so?
ausblenden C#-Quelltext
1:
toolWindow.Visible = !toolWindow.Visible;					

Das geht aber noch kürzer :mrgreen: .
ausblenden C#-Quelltext
1:
toolWin.Visible ^= true;					

Über die Lesbarkeit lässt sich streiten :| ;) .

[OT] Hui, diese BuiltIn-Code-Tags in Quotes sind ja nett :D . Dafür blinkt mein Cursor mit dem FF wie ein Verrückter :| . [/OT]
Macoy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: Mo 17.04.06 14:30 
Danke, ihr ward echt ne Hilfe !


Das mit

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
toolWindow.Visible = !toolWindow.Visible;

oder 
  
toolWin.Visible ^= true;


ist wohl eher Geschmackssache... Ich mag es eher explizit, damit ich in nem halben Jahr immernoch auf einen Blick weiss, was das passiert.