2009-04-02 13 views
2

Ich habe zwei Tabs in meinem TabControl. Ich muss eine Methode (überprüft, ob Daten in der Datenbank gespeichert werden müssen) jedes Mal, wenn Benutzer von einem Tab zum anderen wechseln (Schalter kann in jede Richtung: von Tab1 zu Tab2 und von Tab2 zu Tab1). Wie mache ich das?Registerkarten wechseln

Ich dachte über das Verwenden von ButtonBase.Click-Ereignis, das an jede Registerkarte angefügt wird, aber es aus irgendeinem Grund nicht ausgelöst wird.

EDIT: Ich habe vergessen zu erwähnen, dass ich das Ereignis "abbrechen" möchte, falls der Benutzer sich gegen das Speichern von Änderungen entscheidet und zu dem Tab "zurück navigiert" werden muss, den er verlassen wollte.

+0

Ein wenig mehr über den Schnitt, den ich gemacht habe: Weil dies eine fokussierte Q/A-Site sein soll, keine Forums-Site, sind Grüße und Einleitungen in die Quere. Vorstellungsgespräche sind besonders schlecht, weil sie verhindern, dass die Leute herausfinden, was Ihre Frage von der Titelseite und den Übersichten ist. – chaos

+0

Das ist cool, ich werde das in meinen zukünftigen Fragen notieren. – Alexandra

Antwort

2

Auschecken SelectionChanged Ereignis der Registerkarte Steuerelement.

EDIT: Änderungen

auf Frage Sie möchten die Veranstaltung abzusagen oder abzubrechen die sparen?

Für die Stornierung sparen, es ist nur eine Frage der den Benutzer etwas in diese Richtung zu fragen:

Dim msRes as MessageResult = MessageResult.No 
If mySwitchedFromTab.IsDirty Then 
     msRes = msgbox("Save changes to previous tab?", YesNo, "MyApp") 
     if msRes = MessageResult.Yes Then 
      SaveMethod() 
     End If 
End If 

nun den TAB Wechsels zum Abbrechen, dann haben Sie mit booleans umgehen bekommen, und die Steuerung, wenn die Funktionalität innerhalb des Event-Handler wird ausgelöst oder nicht, und dann auf die ausgewählten Registerkarte zurück zum vorherigen Registerkarte Einstellung, etwas in diese Richtung:

If myGlobalTabFireBoolean Then 
    Dim msRes as MessageResult = MessageResult.No 
    If mySwitchedFromTab.IsDirty Then 
     msRes = msgbox("Save changes to previous tab?", YesNoCancel, "MyApp") 
     Select Case msRes 
      Case MessageResult.Yes 
       SaveMethod() 
      Case MessageResult.Cancel 
       myGlobalTabFireBoolean = False 
       myTabContainer.SelectedItem = myPreviousTab 
      Case Else    
       ' Do Nothing 
     End If 
    End If 
Else 
    myglobalTabFireBoolean = True 
End IF 

und dies nicht der einzige Weg ist, diese Art von Funktionalität auszuführen, wie es hängt vom persönlichen Codierungsstil ab und ev B. die Art und Weise, wie Sie Ihre Tab-Elemente erstellen (ich erstelle die Registerkarten meines Tabitems sehr viel detaillierter, damit ich das Standardverhalten übersteuern kann und sie mit den "X" -Schaltflächen und den Klicken Sie mit der mittleren Maustaste, um zu schließen).

+0

Dies ist eine der Lösungen, die ich im Sinn hatte. Ich verwende keine benutzerdefinierten Registerkarten. Ich verwende ein Standard-TabControl in WPF (System.Windows.Controls). Dies ist der einzige Ort, an dem ich das "click-detecting" -Verhalten brauche, so dass ich dafür kein benutzerdefiniertes Steuerelement erstellen möchte. – Alexandra

0

Wenn Sie WPF verwenden, habe ich keine Ahnung, was es gibt, aber in .NET hat das TabControl-Objekt ein "SelectedIndexChanged" -Ereignis. Angenommen, Sie sind in der Designer sind, legen Sie einfach die Methode möchten Sie zu diesem Ereignis und Sie sind golden, oder über Code mit so etwas wie:

this.rootTabControl.SelectedIndexChanged += new System.EventHandler(this.myHandlerHere); 

Aber ich weiß nicht, WPF, also wenn es ganz anders ist Du bist alleine, aber ich könnte mir vorstellen, dass es etwas sehr ähnliches ist.

Verwandte Themen