मैं, एक सरल उपयोगकर्ता नियंत्रण (नहीं WPF) में VS2008 प्रभावी रूप से जो जब दबाया Panel1
में एक बटन, के साथ एक SplitContainer
है जो बनाने के लिए कोशिश कर रहा हूँ Panel2Collapsed
संपत्ति टॉगल और के आकार के नियंत्रण का आकार बदलता है Panel1
।UserControl क्रम चौड़ाई और ऊंचाई
यहाँ नियंत्रण के नंगे हड्डियों हैं:
private int _openHeight;
private int _closedHeight;
public MyUserControl(bool open)
{
InitializeComponent();
_openHeight = this.Height;
_closedHeight = splitContainer1.SplitterDistance;
Open = open;
}
private bool _open;
private bool Open
{
get { return _open; }
set
{
_open = value;
splitContainer1.Panel2Collapsed = !_open;
this.Height = _open ? _openHeight : _closedHeight;
}
}
private void button1_Click(object sender, EventArgs e)
{
Open = !Open;
}
समस्या यह है कि क्रम में this.Height
मूल्य जो नियंत्रण उपयोगकर्ता नियंत्रण डिजाइनर में है, न कि जो में डिजाइन समय पर सेट है की तुलना में है मुख्य रूप के डिजाइनर।
किसी भी मदद की सराहना की जाएगी।
अद्यतन
लुकास के समाधान से जारी रखते हुए, इस तरह से इसका मतलब है कि _openHeight केवल वांछित प्रभाव में जिसके परिणामस्वरूप एक बार सेट किया गया है,:
private int? _openHeight;
private int _closedHeight;
public MyUserControl(bool open)
{
InitializeComponent();
//the _closedHeight doesn't change so can be defined in the constructor
_closedHeight = splitContainer1.SplitterDistance;
//set value
Open = open;
this.SizeChanged += new EventHandler(MyUserControl_SizeChanged);
this.Load += new EventHandler(MyUserControl_Load);
}
void MyUserControl_SizeChanged(object sender, EventArgs e)
{
//this event is called BEFORE the _Load event so gets the height set in the designer
// and not any changes at run time (e.g. when you collapse the control)
if (_openHeight == null)
_openHeight = this.Height;
}
private bool _open;
private bool Open
{
get { return _open; }
set
{
_open = value;
if (_open)
{
//sets height only if it has been initialized
if (_openHeight != null)
this.Height = (int)_openHeight;
}
else
{
this.Height = (int)_closedHeight;
}
}
}
void MyUserControl_Load(object sender, EventArgs e)
{
//now that control is loaded, set height
Open = Open;
}
private void button1_Click(object sender, EventArgs e)
{
Open = !Open;
}
क्या मैंने आपके द्वारा सुझाए गए समाधान का सुझाव दिया है? –
बस आपके दूसरे समाधान का परीक्षण किया और, कुछ संशोधन के साथ, यह काम करता है। क्या मेरे संशोधित समाधान के साथ अपना उत्तर अपडेट करना उचित अभ्यास है? –
बस अपने प्रश्न शीर्षक में ** ** अपडेट करें ** और अपने उत्तर के साथ अपडेट करें और कुछ विवरण :)। –