मैं System.Windows.Forms.PropertyGrid
का उपयोग करने की कोशिश कर रहा हूं।क्यों ब्राउज़ करने योग्य विशेषता संपत्ति को बाध्य करने योग्य नहीं बनाती है?
इस ग्रिड में कोई संपत्ति दिखाई देने के लिए BrowsableAttribute
false
पर सेट करना चाहिए। लेकिन इस विशेषता को जोड़ना संपत्ति को बाध्यकारी नहीं बनाता है।
उदाहरण: बनाएँ नई Windows Forms परियोजना, और Form1
पर एक TextBox
और PropertyGrid
छोड़ देते हैं। नीचे दिए गए कोड का उपयोग करना, TextBox
की चौड़ाई Data.Width
करने के लिए बाध्य नहीं प्राप्त करता है:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Data data = new Data();
data.Text = "qwe";
data.Width = 500;
BindingSource bindingSource = new BindingSource();
bindingSource.Add(data);
textBox1.DataBindings.Add("Text", bindingSource, "Text", true,
DataSourceUpdateMode.OnPropertyChanged);
textBox1.DataBindings.Add("Width", bindingSource, "Width", true,
DataSourceUpdateMode.OnPropertyChanged);
propertyGrid1.SelectedObject = data;
}
}
डेटा वर्ग के लिए कोड है:
public class Data : IBindableComponent
{
public event EventHandler TextChanged;
private string _Text;
[Browsable(true)]
public string Text
{
get
{
return _Text;
}
set
{
_Text = value;
if (TextChanged != null)
TextChanged(this, EventArgs.Empty);
}
}
public event EventHandler WidthChanged;
private int _Width;
[Browsable(false)]
public int Width
{
get
{
return _Width;
}
set
{
_Width = value;
if (WidthChanged != null)
WidthChanged(this, EventArgs.Empty);
}
}
#region IBindableComponent Members
private BindingContext _BindingContext;
public BindingContext BindingContext
{
get
{
if (_BindingContext == null)
_BindingContext = new BindingContext();
return _BindingContext;
}
set
{
_BindingContext = value;
}
}
private ControlBindingsCollection _DataBindings;
public ControlBindingsCollection DataBindings
{
get
{
if (_DataBindings == null)
_DataBindings = new ControlBindingsCollection(this);
return _DataBindings;
}
}
#endregion
#region IComponent Members
public event EventHandler Disposed;
public System.ComponentModel.ISite Site
{
get
{
return null;
}
set
{
}
}
#endregion
#region IDisposable Members
public void Dispose()
{
throw new NotImplementedException();
}
#endregion
}
आप हर संपत्ति पर सच करने के लिए ब्राउज़ करने योग्य विशेषता स्विच करते हैं डेटा में यह काम करता है। अब ऐसा लगता है कि ब्राउज़िंग विशेषता द्वारा बाध्यकारी स्रोत खोज डेटा स्रोत।
हाँ, आप सही हैं। ऐसा लगता है कि काम करता है। मुझे एक बड़ी परियोजना में यह समस्या है। मैं जल्द ही एक बेहतर उदाहरण लिखने की कोशिश करूंगा। – bodziec