2016年3月30日 星期三

在panel中開啟form/user control

公司的軟體只能顯示到form裡面會正常運作
之前前輩傳入panel的 handler 可以顯示,但是滑鼠鍵盤事件會失效

因此陰錯陽差學會把 myForm 塞到 form/panel 裡面的方法

流程大致上是




  1. 將母form的IsMdiParent打開
  2. 將子form的MdiParent設定為母form
  3. 用母form中的ui元件(ex:panel)限制子form的活動範圍(panel.Controls.Add(子form))

private void Form2_Load(object sender, EventArgs e)
{
// parent 必須是 mdi container
    this.IsMdiContainer = true;

    myForm _myForm = new myForm(){
        MdiParent = this, //將myForm設定為目前form的子物件
        FormBorderStyle = FormBorderStyle.None, //關閉myForm外框
        Dock = DockStyle.Fill //將myForm填滿所在視窗(panel)
      }; // 實體化myForm,在new的同時設定屬性,也可以之後再指定屬性
    //例如
    _myForm.Dock = DockStyle.Fill;
    //事後再更改屬性也是ok

    _myForm.Show(); //顯示myForm
    this.panel1.Controls.Add(_myForm); // 將myForm放入panel1中,需先確認this.IsMdiContainer 是true
}

code end

或是也可以把user control放入panel

myUserControl _myUserControl = new myUserControl(){Dock = DockStyle.Fill // 使user control 填滿panel}; //實體化myUserControl
this.panel1.Controls.Add(_myUserControl); // 將user control 放入panel1

終於知道別人在一個專案中分成很多form開發再組再一起的方法了orz(很基本的fu~)

ps:小小的悲劇是,vs似乎無法把x64的user control加入tool box, 無奈,我的專案有用到x64的library,無法編譯成x86,只能手動加入user control了

沒有留言:

張貼留言