2010-02-26 45 views

cevap

1

Kendi tercihlerini karşılamak için kendi oluşturmanız gerekir. "FrmWizard" adında bir taban formu oluşturmanız için bir ipucu olacaktır, ardından tüm sihirbaz pencereleriniz bundan devralır. Temel nesnelere ortak nesneler veya sihirbaz nesneleri koymanız ve gerekirse bunları türetilmiş sınıfta geçersiz kılmanız gerekir.

+1

baz formu (burada önerilen) + (diğer cevapları açıklanmıştır) özel sekme denetimi bir arada kullanması faydalıdır. Sihirbazlar için temel oluşturma, özellikle uygulama birden fazla sihirbaz olduğunda yararlıdır. Kopyala-yapıştır kodlama korkusunun önlenmesine yardımcı olur. – miroxlav

+0

Genellikle temel sınıfta uyguladığım yararlı yöntemler şunlardır: 'OnPageEntered',' OnPageExited', 'AllowNext',' AllowBack' vb. – KDecker

126

Bunu yapmanın pek çok yolu. Her sihirbaz adımı için bir form oluşturmak mümkündür, ancak çok garip. Ve kullanıcı adımı değiştirdiğinde çirkin, çok titrek. Bir UserControl çalışmasının her adımında çalışarak, bunları formun Kontroller koleksiyonuna girip çıkarmanız yeterlidir. Veya bunlardan birini Görünür = her adım için doğru. UC tasarımı kıvrılma eğilimindedir, ancak her UI öğesi için ortak özellikler eklemeniz gerekir.

Kolay ve RAD yöntemi bir TabControl kullanmaktır. Tasarım zamanında sekmeleri değiştirmenize ve her sekmede bırakma denetimlerine izin verdiğinden, tasarımcıda çok iyi çalışır. Anahtarlama adımları önemsizdir, sadece SelectedIndex özelliğini değiştirin. Önemsiz olan tek şey, çalışma zamanında sekmeleri gizlemektir. Bir Windows mesajını işleyerek hala daha kolay. Formunuza yeni bir sınıf ekleyin ve aşağıda gösterilen kodu yapıştırın. Derleyin. Yeni kutuyu araç kutusunun üstünden formunuza bırakın.

using System; 
using System.Windows.Forms; 

class WizardPages : TabControl { 
    protected override void WndProc(ref Message m) { 
    // Hide tabs by trapping the TCM_ADJUSTRECT message 
    if (m.Msg == 0x1328 && !DesignMode) m.Result = (IntPtr)1; 
    else base.WndProc(ref m); 
    } 
} 
+4

+51: ve şimdi sekmelerde bir sekme denetimi kullanabilirsiniz. . sek sekmeli sekme sayfaları arasında geçiş yap ... ??? Bunu kullanıyorum ... örtüşen panelleri yönetmekten çok daha güzel. – IAbstract

+0

@Hans Güzel cevap Hans! Ben sadece courius: bu sekmeleri tamamen gizlemek, böylece kullanıcının tıklama yapamaması ya da TIT tuşu veya benzeri bir şey tarafından etkinleştirilmemesi mümkün mü? –

+0

@ Sean87, CTRL + TAB'a isabet ederken aslında sekme sayfalarında geziniyor – ccalboni

29
class WizardPages : TabControl 
{ 
    protected override void WndProc(ref Message m) 
    { 
     // Hide tabs by trapping the TCM_ADJUSTRECT message 
     if (m.Msg == 0x1328 && !DesignMode) m.Result = (IntPtr)1; 
     else base.WndProc(ref m); 
    }   

    protected override void OnKeyDown(KeyEventArgs ke) 
    { 
     // Block Ctrl+Tab and Ctrl+Shift+Tab hotkeys 
     if (ke.Control && ke.KeyCode == Keys.Tab) 
      return; 
     base.OnKeyDown(ke); 
    } 
} 
+0

Diğer anahtarlar nedir? PageUp ve PageDown? Veya Sol ve Sağ ok tuşları? Bunları ekleyemezsiniz çünkü bu kontrolün çocuğu olan metin kutusunun içinde hareket edemezsiniz. – Misiu

+0

Eğer 'Ctrl' + 'Tab' ve' Ctrl' + 'Shift' +' Tab' tuĢlarını kullanırsanız, bunların denklerini de 'Ctrl' +' PgUp' ve 'Ctrl' +' PgDn' olarak da unutmayınız. İkincisi, Ctrl + Sekme ve Ctrl + Shift' + Tab'in iç kontrol tarafından alındığı birçok senaryoda daha baskındır. çok satırlı giriş kutusu. – miroxlav

+0

@Misiu tuşlarının üstündeki değerler hala çocuk kontrollerinde iyi çalışıyor (bunu test ettim) – miroxlav

İlgili konular