2010-05-28 9 views
20

मैं वर्तमान में निर्धारित करता हूं कि SelectedIndexChanged ईवेंट के माध्यम से टैबस्ट्रक्चर का कौन सा पृष्ठ क्लिक किया गया था।चयनित इंडेक्स चेंज किए गए ईवेंट से पहले टैबकंट्रोल में टैब पेज का परिवर्तन कैसे पता लगा सकता हूं?

मैं से पहले पहचान सूचकांक वास्तव में सत्यापन उद्देश्यों के लिए बदलना चाहता हूं। उदाहरण के लिए, उपयोगकर्ता एक टैब पेज पर क्लिक करता है जो वे देख रहे हैं। एक संवाद प्रस्तुत किया जाता है यदि फॉर्म डेटा सहेजा गया है और पूछता है कि आगे बढ़ना ठीक है या नहीं। यदि उपयोगकर्ता नंबर पर क्लिक करता है, तो उपयोगकर्ता को वर्तमान टैब पर रहना चाहिए।

वर्तमान में मुझे पिछले टैब पृष्ठ को याद रखना होगा और 'नो' के उत्तर के बाद इसे वापस स्विच करना होगा।

मुझे माउसडाउन (और मिश्रित गणना तर्क) माना जाता है, लेकिन मुझे संदेह है कि यह सबसे अच्छा तरीका है।

tabControl1.Selecting += new TabControlCancelEventHandler(tabControl1_Selecting); 

void tabControl1_Selecting(object sender, TabControlCancelEventArgs e) 
{ 
    TabPage current = (sender as TabControl).SelectedTab; 

    // Validate the current page. To cancel the select, use: 
    e.Cancel = true; 
} 

उत्तर

28

TabControl जब Form_Load के लिए इस तरह की घटना जोड़ें:

+0

सटीक रूप से जिस घटना को मैं ढूंढ रहा था (और स्पष्ट रूप से नहीं देख रहा था)। धन्यवाद। – JYelton

+4

आपके पास 'वर्तमान' टैबपेज वह नहीं है जिसे आप सत्यापित करना चाहते हैं (यह नया है)। पिछले टैबपेज को प्रशासित किया जाना चाहिए उदा। चयनित घटना में। – Gerard

+0

मुझे वास्तव में यह करना है और यह भी पाया है कि आपको Chris Schmich के उत्तर के अनुसार टैब सत्यापन का उपयोग करने की आवश्यकता है। न तो चयनित, चयन (न ही TabIndexChanged या SelectedIndexChanged) ईवेंट वर्तमान टैब का संदर्भ देते हैं। – mattpm

6

TabControl जैसे TabPages का संग्रह है, जिनमें से प्रत्येक आप पर मान्यता लागू कर सकते हैं, है वास्तव में यहां दिए गए सुझावों सहित सभी घटनाओं का प्रयास किया और वास्तव में टैब से आगे बढ़ने के लिए सही समय पर उल्लिखित घटनाओं में से कोई भी नहीं होता है।

यहां तक ​​कि टैब पेज सत्यापन घटना भी इसे छोड़ने के बजाय टैब में प्रवेश करते समय आग लगती है - या तो मेरी मशीन या .NET 4 के साथ कुछ अनोखा चल रहा है। दूसरी तरफ, .NET 4 में अचयनित घटना है जो मेरे उद्देश्यों के लिए सही समय पर आग लगती है।

private void tab_Deselecting(object sender, TabControlCancelEventArgs e) 
    { 

    } 
+1

मैंने पहले मान्यता घटनाओं का उपयोग किया है और इसे फिर से विचार किया, लेकिन इस आवेदन के प्रयोजनों के लिए, इसे और अधिक की तुलना में मैं की जरूरत है। हालांकि धन्यवाद। – JYelton

3

मैंने:

public partial class MyForm : Form 
{ 
    public MyForm() 
    { 
     InitializeComponent(); 

     foreach (var page in _tabControl.TabPages.Cast<TabPage>()) 
     { 
      page.CausesValidation = true; 
      page.Validating += new CancelEventHandler(OnTabPageValidating); 
     } 
    } 

    void OnTabPageValidating(object sender, CancelEventArgs e) 
    { 
     TabPage page = sender as TabPage; 
     if (page == null) 
      return; 

     if (/* some validation fails */) 
      e.Cancel = true; 
    } 
} 
संबंधित मुद्दे