2009-09-30 17 views
14

पर बाइंडिंग टेक्स्टबॉक्स एक पूर्णांक में टेक्स्टबॉक्स को कैसे बाध्य करें? उदाहरण के लिए, टेक्स्टबॉक्स 1 पर बाध्यकारी इकाई।सी # - एक पूर्णांक

public partial class Form1 : Form 
{ 
    int unit; 

    public Form1() 
    { 
     InitializeComponent(); 


    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     textBox1.DataBindings.Add("Text", unit, "???"); 
    } 
+1

यह Winforms है? – Natrium

+5

यह फॉर्म क्लास से निकला है। – rahul

उत्तर

21

इसे एक उदाहरण की सार्वजनिक संपत्ति होने की आवश्यकता होगी; इस मामले में, "इस" पर्याप्त होगा:

private int unit; 
public event EventHandler UnitChanged; // or via the "Events" list 
public int Unit { 
    get {return unit;} 
    set { 
     if(value!=unit) { 
      unit = value; 
      EventHandler handler = UnitChanged; 
      if(handler!=null) handler(this,EventArgs.Empty); 
     } 
    } 
} 

आप नहीं यह जनता पर चाहते हैं:

public int Unit {get;set;} 
private void Form1_Load(object sender, EventArgs e) 
{ 
    textBox1.DataBindings.Add("Text", this, "Unit"); 
} 

दो तरह से अधिसूचना के लिए, आप या तो UnitChanged या INotifyPropertyChanged की आवश्यकता होगी एपीआई, आप एक छिपा प्रकार कहीं में लपेट कर सकते हैं:

:

class UnitWrapper { 
    public int Unit {get;set;} 
} 
private UnitWrapper unit = new UnitWrapper(); 
private void Form1_Load(object sender, EventArgs e) 
{ 
    textBox1.DataBindings.Add("Text", unit, "Unit"); 
} 

जानकारी के लिए, "घटनाओं सूची" सामान की तरह कुछ चला जाता है

private static readonly object UnitChangedKey = new object(); 
    public event EventHandler UnitChanged 
    { 
     add {Events.AddHandler(UnitChangedKey, value);} 
     remove {Events.AddHandler(UnitChangedKey, value);} 
    } 
    ... 
    EventHandler handler = (EventHandler)Events[UnitChangedKey]; 
    if (handler != null) handler(this, EventArgs.Empty); 
+0

मार्क, जब आप अपनी घटना 'xxxChanged' संपत्ति' xxx' के लिए नाम देते हैं तो मुझे उस चाल के बारे में अधिक जानकारी नहीं मिल सकती है और फिर इसे दृश्य के पीछे संभाला जाता है। क्या आप एक लिंक पोस्ट कर सकते हैं या कम से कम चाल कैसे कहा जाता है? धन्यवाद – pkuderov

+1

यह प्रॉपर्टीडिस्क्रिप्टर कार्यान्वयन का हिस्सा है - मूल रूप से यह * परिवर्तित घटनाओं का एक पैटर्न ढूंढता है। हालांकि, आप आम तौर पर 'xxxAttribute' क्लास का उपयोग तब किया जा सकता है जब' xxxAttribute' क्लास का उपयोग किया जा सकता है, क्योंकि 'mxx' अच्छी तरह से msdn में लिखा गया है, तो आप इनोटिफ़प्रॉपर्टी चेंज –

+0

विशेषता नामकरण कर सकते हैं। लेकिन यह व्यवहार वास्तव में छिपा हुआ है। मैंने इसके बारे में कुछ और जानकारी दर्ज करने की कोशिश की है लेकिन असफल हो सकता है (शायद क्योंकि शब्द 'बदल गया' पहेली खोज क्वेरी) :) वैसे भी, thx फिर से – pkuderov

5

आप एक बाध्यकारी स्रोत (टिप्पणी देखें) का उपयोग कर सकते हैं। सबसे सरल परिवर्तन है:

public partial class Form1 : Form 
{ 
    class MyData { 
     public int Unit { get; set; } 
    } 

    MyData form1Data; 
    BindingSource form1BindingSource; 

    private void Form1_Load (...) 
    { 
     form1BindingSource.DataSource = form1Data; 
     textBox1.DataBindings.Add ("Text", form1BindingSource, "Unit"); 
    } 
} 

HTH: यदि आप डेटा थोड़ा अलग

public partial class Form1 : Form 
{ 
    public int Unit { get; set; } 
    BindingSource form1BindingSource; 

    private void Form1_Load (...) 
    { 
     form1BindingSource.DataSource = this; 
     textBox1.DataBindings.Add ("Text", form1BindingSource, "Unit"); 
    } 
} 

हालांकि, अगर आप कुछ वैचारिक स्पष्टता प्राप्त करेंगे। ध्यान दें संशोधित संशोधक संशोधक।

+0

द्वारा लागू की जाती है मार्क ग्रेवेल का परिवर्तन आसान है और ठीक लगता है। मैं सामान्य सिद्धांतों पर बाध्यकारी स्रोत वस्तुओं के लिए सबकुछ बाध्य करने की आदत में हूं; यह वहां है, यह इस उद्देश्य के लिए बनाया गया है, साथ ही इसका उपयोग भी कर सकता है। – XXXXX

+0

बाइंडिंगसोर्स पूरी तरह से अमूर्तता के स्तर के रूप में कार्य करता है; आप सीधे दोनों उदाहरणों और सूचियों से जुड़ सकते हैं। –

+0

मुझे यकीन नहीं है कि आप * शुद्ध रूप से * अमूर्तता के स्तर के रूप में क्या मतलब है; बाइंडिंगसोर्स में वास्तविक कोड है जो चीजें प्रबंधित करता है, जैसे मुद्रा प्रबंधित करना। – XXXXX

4

मुझे जो कुछ करना है वह फ़ॉर्म के लिए "प्रस्तुति" परत बनाना है। यह इस परत में है कि मैं उन गुणों की घोषणा करता हूं जो फ़ॉर्म पर नियंत्रण से बंधे हैं। इस मामले में, नियंत्रण एक पाठ बॉक्स है।

इस उदाहरण में मैं एक आईपी पता

enter image description here

हम अब पाठ बॉक्स गुण के माध्यम से बाध्यकारी स्रोत बनाने के प्रदर्शित करने के लिए एक पाठ बॉक्स के साथ एक रूप है। डेटा बाइंडिंग-> टेक्स्ट का चयन करें। नीचे तीर पर क्लिक करें; 'परियोजना डेटा स्रोत जोड़ें' का चयन करें।

enter image description here

यह है कि डेटा स्रोत विज़ार्ड प्रारंभ हो जाता है। ऑब्जेक्ट का चयन करें। 'अगला' हिट करें।

enter image description here

अब वर्ग की संपत्ति है कि पाठ बॉक्स में घिरा हो जाएगा है का चयन करें। इस उदाहरण में, मैंने PNetworkOptions चुना है। विज़ार्ड को समाप्त करने के लिए समाप्त करें का चयन करें। बाध्यकारी स्रोत नहीं बनाया जाएगा।

enter image description here

अगले कदम के लिए बाध्य वर्ग से वास्तविक संपत्ति का चयन करने के लिए है। डेटा बाइंडिंग से-> टेक्स्ट, डाउनरो का चयन करें और उस संपत्ति का नाम चुनें जो टेक्स्टबॉक्स से बाध्य होगा।

enter image description here

वर्ग अपनी संपत्ति है कि में, INotifyPropertyChanged चाहिए IP पता फ़ील्ड

public class PNetworkOptions : IBaseInterface, INotifyPropertyChanged 
{ 
    private string _IPAddress; 


    private void NotifyPropertyChanged(String info) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(info)); 
     } 
    } 

    public string IPAddress 
    { 
     get { return _IPAddress; } 
     set 
     { 
      if (value != null && value != _IPAddress) 
      { 
       _IPAddress = value; 
       NotifyPropertyChanged("IPAddress"); 
      } 
     } 
    } 
} 

के लिए 2 तरह के संचार के लिए लागू किया प्रपत्र निर्माता में, हम विशेष रूप से बाध्यकारी

को परिभाषित करने के लिए है
Binding IPAddressbinding = mskTxtIPAddress.DataBindings.Add("Text", _NetOptions, "IPAddress",true,DataSourceUpdateMode.OnPropertyChanged); 
संबंधित मुद्दे