日期:2014-05-19  浏览次数:20777 次

关于 panel 位置改变的问题(困搅很久了)
我现在做一个小系统:
      登陆界面进去就是一个主界面(frm_main),主界面右上角有几个按钮:型号录入,客户信息,单位信息......
      点击 "型号录入 "出来一个界面:型号录入(frm_xhlu);点击 "客户信息 "出来一个界面:客户信息(frm_khxx).....
      在   型号录入   界面上有一个panel   ,panel上面有新增,修改按钮, "新增,修改 "按钮控制界面的新增,修改;客户信息   界面上也有一个panel   ,panel上面也有新增,修改按钮.....
        现在提出的是:我想把各个模块(型号录入,客户信息)的panel   放到主界面上去.
说明白点就是改变各个模块panel   的位置,当然位置是任意的,包括超出本身模块.
      谢谢各位了。分都给出了很多,但是一直没有得到解决.

------解决方案--------------------
在主窗体里定义几个和panel里按钮的功能对应的委托
这个委托在主窗体调用子窗体时或各子窗体获得焦点时 加载(给委托赋值)不同子窗体的方法 然后再那些panel的那些按钮里执行这个委托的方法。
//在命名空间里:
public delegate void Panelbut(); //这里假设你的方法都是没有参数的
//主窗体里定义:
Panelbut addnew;
Panelbut update;
...............

//在调用子窗体时给委托赋值
frm_xhlu thechildfrm=new frm_xhlu();
frm.Activated += new EventHandler(frm_Activated); //子窗体活动窗体时
frm.Deactivate += new EventHandler(frm_Deactivate); //子窗体为非活动窗体时
void frm_Activated(object sender, EventArgs e)
{
addnew= new addnew(thechildfrm.ExeAddNew) //ExeAddNew子窗体里实现新增的public方法
update=new ...............................
................................
}
void frm_Deactivate(object sender, EventArgs e)
{
addnew=null;
...........
}
//在点击主窗体AddNew按钮的时候执行
if(addnew==null) return;
addnew();

我的思路大概是这样的 自己没试过 需要的话你就试试看吧