none
有關兩個FORM間共用一個PANEL,不知是否可行? RRS feed

  • 問題

  • 小弟想請教的是
    在FORM1中我設計了一個快捷鍵圖示
    點選這個圖示後會顯示一個名為set_gps_panel的pandel
    而set_gps_panel內容放了像是GPS的硬體連接埠設定、傳輸速率設定


    可是我在FORM2中有一個功能表
    當我按了設定GPS的圖示後
    我想在FORM2中叫出FORM1的set_gps_panel
    也就是同一個panel
    不知道這樣是否可行?
    如果可行,該用什麼樣的方式解決?


    因為我的想法是想讓使用者在FORM1主畫面中
    可以快速設定GPS
    不需要那麼麻煩到系統功能表找出設定GPS的panel
    而系統功能表之所以會有同樣的功能
    是考量到如果使用者還尚未在主畫面設定
    到系統功能表同樣也是能設定
    所以我想在這兩個表單間共用這個panel


    請各位前輩替小弟解答一下
    謝謝!

     

    2007年10月6日 下午 02:24

解答

  • FormParent: 放置你設計的 Panel 先讓它 invisible,並且實做好 Panel 內控制項的功能

     

    程式碼區塊

    public partial class FormParent: Form
    {
        public FormParent()
        {
            InitializeComponent();
        }

     

        protected void ShowPanel()
        {
            panel1.Visible = true;
        }

     

        protected void HidePanel()
        {
            panel1.Visible = false;
        }

       

        // Panel 內控制項的功能

        private void buttonP_Click(object sender, EventArgs e)
        {
              MessageBox.Show("hihi");
        }
    }

     

     

    Form1: 繼承 FormParent,所以 Form1 也擁有相同的 panel (包含裡面所有的控制項) 。

    button1 用來顯示 panel,此時 panel 內控制項使用與在 FormParent 使用無異。

    Form2 也繼承 FormParent,利用 button2 可呼叫 Form2。

     

    程式碼區塊

    public partial class Form1 : FormParent
    {
        public Form1()
        {
            InitializeComponent();
        }

     

        // 顯示 Panel

        private void button1_Click(object sender, EventArgs e)
        {
            ShowPanel();
        }

     

        private void button2_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();
            f2.Show();
        }
    }

     

     

    Form2

     

    程式碼區塊

    public partial class Form2 : FormParent
    {
        public Form2()
        {
            InitializeComponent();
        }

     

        private void button1_Click(object sender, EventArgs e)
        {
            ShowPanel();
        }
    }

     

     

    2007年10月7日 上午 03:10

所有回覆

  • (1) 寫一個父類別表單 FormParent:

    (2) 設計你的 panel 先讓它 visible = false,

    (3) 撰寫非 private 的 ShowPanel 方法,

    (4) 讓 Form1 與 Form2 去繼承 FormParent 。

    (5) 在 Form1 與 Form2 則在相關事件中,去呼叫 ShowPanel 即可。

     

     

    2007年10月6日 下午 03:26
  •  

    @@"

    是否能寫個簡短的範例?

    我有點聽不太懂

    謝謝~
    2007年10月6日 下午 03:47
  • FormParent: 放置你設計的 Panel 先讓它 invisible,並且實做好 Panel 內控制項的功能

     

    程式碼區塊

    public partial class FormParent: Form
    {
        public FormParent()
        {
            InitializeComponent();
        }

     

        protected void ShowPanel()
        {
            panel1.Visible = true;
        }

     

        protected void HidePanel()
        {
            panel1.Visible = false;
        }

       

        // Panel 內控制項的功能

        private void buttonP_Click(object sender, EventArgs e)
        {
              MessageBox.Show("hihi");
        }
    }

     

     

    Form1: 繼承 FormParent,所以 Form1 也擁有相同的 panel (包含裡面所有的控制項) 。

    button1 用來顯示 panel,此時 panel 內控制項使用與在 FormParent 使用無異。

    Form2 也繼承 FormParent,利用 button2 可呼叫 Form2。

     

    程式碼區塊

    public partial class Form1 : FormParent
    {
        public Form1()
        {
            InitializeComponent();
        }

     

        // 顯示 Panel

        private void button1_Click(object sender, EventArgs e)
        {
            ShowPanel();
        }

     

        private void button2_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();
            f2.Show();
        }
    }

     

     

    Form2

     

    程式碼區塊

    public partial class Form2 : FormParent
    {
        public Form2()
        {
            InitializeComponent();
        }

     

        private void button1_Click(object sender, EventArgs e)
        {
            ShowPanel();
        }
    }

     

     

    2007年10月7日 上午 03:10