مشاريع بناء C#.NET تطبيق ويندوز مع وجهات نظر متعددة




مشاريع الفيجوال بيسك جاهزة (4)

إنشاء مجموعة من الألواح المضافة هو كابوس وقت التصميم.

أقترح استخدام عنصر تحكم علامة التبويب مع كل "عرض" في علامة تبويب منفصلة، ​​ثم اختيار علامة التبويب الصحيحة في وقت التشغيل. يمكنك تجنب عرض رؤوس علامات التبويب عن طريق وضع شيء من هذا القبيل في حدث تحميل النموذج:

tabControl1.Top = tabControl1.Top - tabControl1.ItemSize.Height;
tabControl1.Height = tabControl1.Height + tabControl1.ItemSize.Height;
tabControl1.Region = new Region(new RectangleF(tabPage1.Left, tabPage1.Top, tabPage1.Width, tabPage1.Height + tabControl1.ItemSize.Height));

أنا إعادة كتابة تطبيق القديم واستخدام هذا كفرصة جيدة لتجربة C # و. نيت التنمية (وعادة ما تفعل الكثير من المكونات في الاشياء في C).

التطبيق هو في الأساس توقيت جمع البيانات. أنه يحتوي على عرض البداية مع زر لبدء القياس. أثناء القياس التطبيق لديه خمسة وجهات نظر مختلفة اعتمادا على المعلومات التي يريد المستخدم أن يرى.

ما هي أفضل ممارسة للتبديل بين وجهات النظر؟ من البداية إلى التشغيل؟ بين طرق العرض قيد التشغيل؟

الأفكار:

  • استخدم نموذجا واحدا واخفي عناصر التحكم وأظهرها
  • استخدام نموذج بداية واحدة ثم نموذج مع تابكونترول
  • استخدم ستة أشكال منفصلة


ما أقوم به هو أن يكون لديك فريق حيث وجهات نظر مختلفة ستجلس على النموذج الرئيسي. ثم إنشاء عناصر تحكم المستخدم لعرضاتك المختلفة.

ثم عندما أريد أن التبديل بين a'view 'كنت قفص الاتهام إلى لوحة على الشكل الرئيسي .. رمز يبدو قليلا مثل هذا.

أنا أفضل هذا لأنك يمكن بعد ذلك إعادة استخدام وجهات نظركم، مثل إذا كنت ترغب في فتح وجهة نظر في علامة التبويب يمكنك إرساء عناصر تحكم المستخدم داخل صفحات علامة التبويب .. أو حتى ترث من التبويب بدلا من وسيركونترول لجعل الأمور أكثر قليلا عامة

public partial class MainForm : Form
{
    public enum FormViews
    {
        A, B
    }
    private MyViewA viewA; //user control with view a on it 
    private MyViewB viewB; //user control with view b on it

    private FormViews _formView;
    public FormViews FormView
    {
        get
        {
            return _formView;
        }
        set
        {
            _formView = value;
            OnFormViewChanged(_formView);
        }
    }
    protected virtual void OnFormViewChanged(FormViews view)
    {
        //contentPanel is just a System.Windows.Forms.Panel docked to fill the form
        switch (view)
        {
            case FormViews.A:
                if (viewA != null) viewA = new MyViewA();
                //extension method, you could use a static function.
                this.contentPanel.DockControl(viewA); 
                break;
            case FormViews.B:
                if (viewB != null) viewB = new MyViewB();
                this.contentPanel.DockControl(viewB);
                break;
        }
    }

    public MainForm()
    {

        InitializeComponent();
        FormView = FormViews.A; //simply change views like this
    }
}

public static class PanelExtensions
{
    public static void DockControl(this Panel thisControl, Control controlToDock)
    {
        thisControl.Controls.Clear();
        thisControl.Controls.Add(controlToDock);
        controlToDock.Dock = DockStyle.Fill;
    }
}

عادة ما تكون الأشكال المبوبة جيدة ... ولكن فقط إذا كنت تريد أن يكون المستخدم قادرا على رؤية أي عرض في أي وقت ... ويبدو وكأنه قد لا.

أشكال منفصلة يعمل بالتأكيد، ولكن عليك أن تتأكد من أن التبديل هو يبدو ... إذا تأكد من أن النموذج الجديد يظهر نفس الحجم والموقع بالضبط من النموذج القديم، وسوف تبدو وكأنها ثو نفسه مع تغيير الضوابط.

الطريقة التي غالبا ما تستخدم هو في الواقع قبل الإعداد جميع الضوابط بلدي على الفردية "لوحة" الضوابط وثم إظهار وإخفاء هذه اللوحات كما أحتاج إليها. التحكم "لوحة" هو في الأساس حاوية التحكم ... يمكنك نقل لوحة وجميع الضوابط على التحرك النسبي. وإذا كنت تظهر أو إخفاء لوحة، والضوابط على ذلك تفعل الشيء نفسه. فهي كبيرة لحالات من هذا القبيل.





windows