Ben etkin preslenmiş Panel1
bir düğme ile bir SplitContainer
olan VS2008 basit kullanıcı denetimi (değil WPF) oluşturmak çalışıyorum Panel2Collapsed
özelliğini değiştirir ve büyüklüğüne kontrolünü boyutlandırır Panel1
. İşte UserControl'ın çalışma zamanı genişlik ve yükseklik
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;
}
sorun Runtime this.Height
kontrolü oldukça Tasarım zamanlı olarak belirlenmiştir olandan, Kullanıcı Kontrol Designer'daki değerdir olmasıdır ana formun tasarımcısı.
Herhangi bir yardım büyük memnuniyetle karşılanacaktır. Sen denetimin yükseklik özelliğini okuduğunuz
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;
}
Önerdiğim çözüm sizin için çalıştı mı? –
Sadece ikinci çözümünüzü test ettik ve biraz değişiklik yaparak işe yarıyor. Cevabınızı değiştirilen çözümümle güncellemek doğru bir uygulama mı? –
Sadece kendi başlığınızda na ** Güncelleme ** yapın ve sahip olduğunuz cevap ve bazı açıklamalarla birlikte güncelleyin :). –