2010-05-03 18 views

उत्तर

8

सबसे पहले उपयोग कर रहा हूँ कि मुख्य रूप से बटन क्लिक करें घटना पर उन पाठ बॉक्स मूल्य कैसे उपयोग कर सकते हैं, यह ध्यान रखें कि WPF WinForms नहीं है - सिद्धांत रूप में आप डेटा चाहिए अपने टेक्स्टबॉक्स को गुणों के साथ बाध्य करें और फिर टेक्स्टबॉक्स को सीधे एक्सेस करने के बजाय गुणों का मान बदलें!

इंट MyUserControl.xaml:

<TextBox x:Name="myTextBox1"/> 
<TextBox x:Name="myTextBox2"/> 

में

कहा जा रहा है, तुम सब करने की ज़रूरत UserControl और बक्सें नाम, और उसके बाद इस तरह, उन तक पहुँचने के लिए है MyWindow.xaml:

<local:MyUserControl x:Name="myUserControlInstance"/> 
<Button Content="Click me" Click="Button_Click" /> 

MyWindo में w.xaml.cs:

public property Textbox1Text 
{ 
    get { return TextBox1.Text; } 
} 

तो पाठ बॉक्स नियंत्रण से पाठ मुख्य फार्म के लिए दिख रहा है:

private void Button_Click(object sender, RoutedEventArgs e) { 
    myUserControlInstance.myTextBox1.Text = "Foo"; 
    myUserControlInstance.myTextBox2.Text = "Bar"; 
} 
2

usercontrol में, दो सार्वजनिक गुण है जो एक स्ट्रिंग लौटाने हैं।

या एक बेहतर विकल्प: एक ऐसा ईवेंट है जो उपयोगकर्ता नियंत्रण बढ़ा सकता है, इसे TextChanged जैसा कुछ कहें।

public MainWindow() 
{ 
    InitializeComponent(); 
    TextBox1.TextChanged += new TextChangedEventHandler(TextBox1_TextChanged); 
} 

private void TextBox1_TextChanged(object sender, TextChangedEventArgs e) 
{ 
    if (NameTextChanged!= null) 
     this.NameTextChanged(this, e); 
} 

public event TextChangedEventHandler NameTextChanged; 
: बेशक आप यह है कि तुलना के लिए एक बेहतर नाम चाहते हैं, तो बस बहाना उपयोगकर्ता एक नाम दर्ज करें और घटना NameTextChanged कॉल करने के लिए है कि अपने पहले पाठ बॉक्स बनाया गया है चलो, तो अपने घटना कुछ इस तरह हो जाएगा

या बेहतर अभी तक, आप एक रूटेड घटना के लिए जा सकते हैं - लेकिन पहले मूल बातें के साथ चिपके रहें।

0

उपरोक्त स्लगस्टर द्वारा सुझाए गए अनुसार एक ईवेंट की सदस्यता लेना एक बेहतर विकल्प प्रतीत होता है। यदि आप इस दृष्टिकोण का उपयोग करते हैं तो आपके पास एक ही विंडो में एक ही उपयोगकर्ता नियंत्रण के कई उदाहरण हो सकते हैं, लेकिन वे किस उपयोगकर्ता नियंत्रण से उत्पन्न होते हैं, इस आधार पर उन्हें अलग-अलग संभालें।

उदाहरण के तौर पर आपके पास पता प्रकार उपयोगकर्ता नियंत्रण हो सकता है जिसमें प्रेषक का पता और रसीद पता हो सकता है जिसमें सड़क, शहर, राज्य इत्यादि जैसे समान क्षेत्र हो सकते हैं लेकिन प्रेषक पता या रिसीपींट पता अपडेट होने पर अलग-अलग व्यवहार कर सकते हैं।

उम्मीद है कि इससे मदद मिलती है।

नीलेश Gule
http://nileshgule.blogspot.com

0

अपने विशिष्ट समस्या के लिए, मैं आप एक विशिष्ट समाधान सुझा सकते हैं। इसे सामान्य के रूप में नहीं माना जा सकता है।

आपकी समस्या एक बटन क्लिक पर अपने उपयोगकर्ता नियंत्रण में टेक्स्टबॉक्स की सामग्री को पढ़ने के लिए है।

यहां समाधान है।

इस समाधान में, दो xaml फ़ाइलें और उनकी संबंधित .cs फ़ाइलें होंगी।

तर्क: - अंतर्निहित तर्क उपयोगकर्ता नियंत्रण में दृश्य ekements के माध्यम से पुनरावृत्त करना है, टेक्स्टबॉक्स ढूंढें, बटन क्लिक पर टेक्स्ट को पढ़ें।

तो यहाँ कोड है ...

  1. Window.xaml - यह हमारा मुख्य विंडो है। इसमें 1 बटन और उपयोगकर्ता नियंत्रण का ऑब्जेक्ट संदर्भ शामिल है।

    <Grid> 
        <StackPanel Orientation="Vertical"> 
         <Button x:Name="clickThis" 
           Height="30" 
           Width="70" 
           Content="Click Me!!" 
           Click="clickThis_Click" /> 
         <local:TxtBoxedUC x:Name="UC" /> 
        </StackPanel> 
    </Grid> 
    
  2. TxtBoxedUC.xaml - यह हमारे उपयोगकर्ता नियंत्रण है। इसमें हमारे दो टेक्स्टबॉक्स शामिल हैं।

    <Grid>   
        <StackPanel Orientation="Vertical"> 
         <TextBox x:Name="txt1" 
           Width="150" 
           Height="30" /> 
         <TextBox x:Name="txt2" 
           Width="150" 
           Height="30" /> 
        </StackPanel> 
    </Grid> 
    
  3. Window1.xaml.cs - इस बटन पर क्लिक विधि के साथ ही उपयोगकर्ता नियंत्रण में दृश्य तत्वों के माध्यम से पुनरावृति करने के लिए विधि में शामिल है।

    private void clickThis_Click(object sender, RoutedEventArgs e) 
    {    
        GetVisual(UC); 
    } 
    

ऊपर कोड बटन क्लिक संभालने के लिए है।

private void GetVisual(UIElement currentVisual) 
    { 
     int count = VisualTreeHelper.GetChildrenCount(currentVisual); 
     if (count > 0) 
     { 
      for (int i = 0; i < count; i++) 
      { 
       UIElement uiElement = VisualTreeHelper.GetChild(currentVisual, i) as UIElement; 
       if (uiElement != null) 
       { 
        if (uiElement.GetType() == typeof(TextBox)) 
        { 
         TextBox txt = uiElement as TextBox; 
         MessageBox.Show(txt.Text); 

        } 
       } 
       GetVisual(uiElement); 
      } 
     } 
    } 

उपरोक्त कोड उपयोगकर्ता नियंत्रण में दृश्य तत्वों के माध्यम से पुनरावृत्त करना है।

उपयोगकर्ता नियंत्रण की .cs फ़ाइल की आवश्यकता नहीं है।

अब, जब आप बटन पर क्लिक करते हैं, तो आप देख सकते हैं कि आपने संदेशबॉक्स में प्रवेश किया है या नहीं।

मुबारक कोडिंग ...

कृपया जवाब के रूप में चिह्नित यह आपकी समस्या का हल है।

0

इस प्रयास करें:

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    string myTextboxValue = this.tbInput.Text; 
} 
संबंधित मुद्दे