读书人

关于MDI父窗体和窗口拖动有关问题

发布时间: 2012-10-18 13:46:55 作者: rapoo

关于MDI父窗体和窗口拖动问题
我想实现360的界面,窗体设置为无边界,点击一个图标打开一个功能窗口。

1.刚开始实现多界面功能是用按钮点击事件中编写如下代码实现的

C# code
FrmLogin frmLogin = new FrmLogin(); //设置为全局变量        private void button5_Click(object sender, EventArgs e)        {            frmLogin.TopLevel = false; ;            panel1.Controls.Add(frmLogin);            frmLogin.Dock = DockStyle.Fill;            frmLogin.Show();            orderManage.Hide();        }[code=C#]
[/code]
后来发现如果我要实现的功能多的话,每次加一个窗体,就要在代码中加该窗体的隐藏代码frm.Hide();有点太麻烦,如果有别的方法实现该块的功能,不胜感激。

在这个方法中无边界实现窗体拖动没有问题,以下是代码
C# code
 //控制窗体移动        [DllImport("user32.dll")]        public static extern bool ReleaseCapture();        [DllImport("user32.dll")]        public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);        private void MainForm_MouseDown(object sender, MouseEventArgs e)        {            ReleaseCapture();            SendMessage(this.Handle, 0x0112, 0xF012, 0);        }


后来使用MDI父窗体和子窗体的办法,将MainForm 窗体的属性IdMdiContainer=true;无边界窗体拖动就不好使了,请问是什么原因,有没有解决办法。

2.用MDI实现多界面功能和第一种方法相比,除了代码量减少之外,有哪些优势,就性能来说,还有就是打开窗体载入控件的时候,两种方法哪个好点,我担心会造成控件延迟,会不好看,有没有好的办法,谢谢。

[解决办法]
把button5的代码封装到一个函数中,窗体类型可作为参数,每次加窗体都调用这个方法
C# code
        private void ShowForm(Form frm)        {            Form.TopLevel = false; ;            panel1.Controls.Add(Form);            Form.Dock = DockStyle.Fill;            Form.Show();            orderManage.Hide();        }private void button1_Click(object sender, EventArgs e){  ShowForm(frmLogin);}private void button2_Click(object sender, EventArgs e){  ShowForm(frmLogin);} 

读书人网 >C#

热点推荐