Fenstersteuerung? zu viele modale Fenster offen...

09/06/2009 - 13:36 von Christina Heß | Report spam
Hallo an alle,


ich habe eine kleine Anwenung, die hat ein Hauptfenster über einen Button
kommt die Suchmaske und dann öffnet sich ein weiteres Fenster mit
Detailinfomationen. Alle öffne ich mit showdialog und das Ergebnis: in der
Taskleiste sind 3 Eintràge von meinem Programm und man kann die eben auch
nicht mal wegklicken.

Für eine MDI-Anwendung sehe ich allerdings nicht so die notwendigkeit, da
jedes Fenster auch nur einmal geöffnet wird und auch nicht zwischen den
Fenstern hin und her gesprungen werden soll/muß.

Wie kann man das Problem lösen, das man immer nur ein Eintrag in der Taskbar
hat?

Bei der Suchmaske mache ich schon ein me.close for dem Showdialog, aber es
schließ sich erst,w enn ich auch die Detailmaske geschlossen habe.

Wenn ich ein me.hide mache, wie "finde" ich die Form wieder, um sie an
andere Stelle (z.B. bei erneuter Suche) wieder sichtbar zu machen?

Viele Grüße
Christina
 

Lesen sie die antworten

#1 Peter Götz
09/06/2009 - 19:23 | Warnen spam
Hallo Christina,

ich habe eine kleine Anwenung, die hat ein Hauptfenster
über einen Button kommt die Suchmaske



Wer oder was ist Suchmaske?
Fenster?
Oder irgendein Steuerelement?

und dann öffnet sich ein weiteres Fenster mit
Detailinfomationen.



Warum trennst Du Haupt- und Detailinformationen
überhaupt und behandelst sie nicht innerhalb eines
einzigen Fensters?

Alle öffne ich mit showdialog und das Ergebnis:
in der Taskleiste sind 3 Eintràge von meinem
Programm und man kann die eben auch
nicht mal wegklicken.



Und warum öffnest Du so viele Fenster gleichzeitig
modal?
Normalerweise öffnet man halt ein modales Dialog-
fenster um irgendwelche Eingaben vom Benutzer
entgegenzunehmen und schliesst ein solches Fenster
nach erfolgter Eingabe wieder.


Für eine MDI-Anwendung sehe ich allerdings nicht so
die notwendigkeit,



Ohne zu wissen, was Deine Anwendung überhaupt
macht, kann man dazu schwer etwas sagen.

da jedes Fenster auch nur einmal geöffnet wird und
auch nicht zwischen den Fenstern hin und her
gesprungen werden soll/muß.



Es bleibt weiter die Frage offen, wozu überhaupt
mehrere Fenster?

Wie kann man das Problem lösen, das man immer
nur ein Eintrag in der Taskbar hat?



Na ja, im einfachsten Fall halt erst mal nicht
so viele Fenster gleichzeitig öffnen.
Ich kann mir auch nicht vorstellen, dass es für
einen Benutzer sonderlich übersichtlich ist,
wenn er ein und das selbe Programm über
mehrere Fenster bedienen muss.

Ansonsten kannst Du die Anzeige in der Taskbar
unterdrücken wenn Du Form.ShowInTaskbar = False
setzt, wie es im folgenden Beispiel gezeigt wird:

' /// Code in einem leeren Formmodul (Form1.vb)
Public Class Form1

Private WithEvents mModalform As Form

Private Sub Form1_Load _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles MyBase.Load

End Sub


Private Sub Form1_Shown _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles Me.Shown

If MsgBox _
("Modales Fenster zeigen?", _
MsgBoxStyle.Question Or _
MsgBoxStyle.YesNo) _
= MsgBoxResult.Yes Then

mModalform = New Form
With mModalform
.ShowInTaskbar = False
.Text = "mModalForm"
.ShowDialog(Me)
End With

End If
End Sub

Private Sub mModalform_Shown _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles mModalform.Shown

mModalform.SetBounds(Me.Left, Me.Top, 200, 150)
End Sub
End Class
' \\\ E N T E



Bei der Suchmaske mache ich schon ein
me.close for dem Showdialog,



Verstehe ich nicht.
Du möchtest ein Fenster schliessen, bevor es
geöffnet wurde?

aber es schließ sich erst,w enn ich auch die
Detailmaske geschlossen habe.



Na ja, das ist ja der Witz bei einem modalen
Fenster. Das zugehörige, aufrufende Fenster
kann erst wieder bearbeitet und somit auch erst
wieder geschlossen werden, wenn das zugehörige
modale Fenster geschlossen wurde.

Wenn ich ein me.hide mache,



Wer ist denn "me" in diesem Fall?


wie "finde" ich die Form wieder, um sie an
andere Stelle (z.B. bei erneuter Suche)
wieder sichtbar zu machen?



Was willst Du da finden?
Eine Form, die Du mit .Hide unsichtbar gemacht
hast, kannst Du mit .Show wieder sichtbar machen.

Im nachfolgenden Beispiel wird eine Form im
Sekundentakt unsichtbar und wieder sichtbar
gemacht.

' /// Code in einem leeren Formmodul (Form1.vb)
Public Class Form1
Private WithEvents mTimer As Windows.Forms.Timer
Private mCounter As Integer

Private Sub Form1_Load _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles MyBase.Load

mTimer = New Windows.Forms.Timer
mTimer.Interval = 1000
mTimer.Start()

End Sub

Private Sub mTimer_Tick _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles mTimer.Tick

mTimer.Stop()

If mCounter < 8 Then
mCounter += 1
If Me.Visible Then
Me.Hide()
Else
Me.Show()
End If
mTimer.Start()

Else

MsgBox _
("Habe fertig!", _
MsgBoxStyle.Information)

mTimer.Dispose()
Me.Close()
End If
End Sub
End Class
' \\\ E N T E _________


Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

Ähnliche fragen