2016-04-12 36 views
1

Bu yüzden formun sol tarafında bir menü ile tek ana form kullanan bir uygulama var.Winforms Ekleme ve kaldırma UserControls

Sağ tarafta, oluşturduğum herhangi bir UserControl için yer tutucu olarak çalışan bir panel var.

//Display UserControl first 
ucMyUserControl uc = new ucMyUserControl(); 
uc.Dock = DockStyle.Fill; 
pnlContainer.Controls.Add(uc); 

daha iyi bir yol sadece kopyalamak daha var mıdır ve her düğme için bu yapıştırın ya da ben ne zaman istiyorum:

Her seferinde bir menü öğesi bir kullanıcı clicks, ilgili UserControl böyle kod kullanarak gösterecektir UserControl gösterilecek. Her zaman aramak ve sadece kullanmak istediğim UserControl ismini geçmek için bir işlev oluşturmalı mıyım?

Belki de onu kullandığım şekilde her şeyden yanlış anladım - Bu konsept için yeniyim ve sadece işleri deniyorum.

+1

Sekmeler gizli olan bir Sekme panelini kullanabilirsiniz. Düğmelerin sadece Sekme dizinini değiştirmesi gerekiyor. Düğmeler bir yığın panelindeyse ve dinamik olarak oluşturulursa, sekme dizinini değiştirmek için düğme dizinini kullanabilirsiniz. İngilizce için özür dilerim. –

cevap

3

Elbette, kendinizi tekrar etmeyin. DRY kodunu bir yardımcı yöntemle yazın. Bu gibi görünebilir:

public void ShowPage(UserControl uc) { 
    while (pnlContainer.Controls.Count > 0) pnlContainer.Controls[0].Dispose(); 
    uc.Dock = DockStyle.Fill; 
    pnlContainer.Controls.Add(uc); 
} 

Ve şimdi sadece döngü sırasında önemlidir ilginç görünümlü olduğunu ShowPage(new ucMyUserControl());

Not diyoruz, sadece Controls.Remove() yöntemini kullanmak istemiyoruz. Kaldırdığınız kontrolleri kaldırmak çok önemlidir, eğer yapmazsanız sonsuza kadar yaşayacak ve sonuçta programınızı çökerteceksiniz.

+0

Bence KURUM için gizli TabItems ile bir TabPanel kullanmalı. Ayrıca, bu yaklaşımı kullanarak tasarımcıyı kullanabilir. –

+1

Meh, kullanıcı kontrolleri bir bütünlük daha iyi ölçeklendirir ve tasarımcı tarafından kesinlikle desteklenir. –

+0

Tasarımcı, ana pencerede, denetimin kendisinde değil. Ayrıca, TabPanel'in tüm zamanlarını atmasına gerek yok, bu yüzden çok daha hızlı, ancak daha fazla ram tüketebilir. Ancak, kullanıcı hızlı reaksiyonları tercih ediyor. –

İlgili konular