日期:2014-05-20  浏览次数:20682 次

一个已经郁闷了好长时间的问题,详细说明请您进入阅读,谢谢!
我想在一个运行的exe程序的窗体中的Panel面板上随意的添加控件,
比如在运行的窗体上我有一个toolBar工具栏,工具栏上的按钮
文本上写着有标签、文本框、图片框、单选按钮,复选框,
等基本控件名称,只要点击一个相应的按钮,就可以在Panel上
画出一个相应的控件,比如点击的按钮上面写着标签,就可以
在Panel上鼠标点击处显示一个Label标签,并能修改标签的显示
的内容即Text属性,背景色,前景色,字体选择大小的改变,
并能改变控件的大小而且可以移动该控件的位置,
工具栏上的其他按钮的功能大概都是如此。
在Panel上所画的控件的位置,控件的字体,位置并能够保存下来,
退出软件一边下次进入时和上一次所做的变动后保存的位置一样。

说这么多废话的意思就是:我想做一个打印报告,报告中控件的位置
不是固定的,使用者可以改变控件的位置,比如picturebox控件的大小
移动其位置。

我所遇到的问题就是在panel面板控件中画n条线的位置如何保存下来,
而且我在画线条时画错位置了如何取消或者删除原来所画的线条,所添加
的控件也是这样。

我现在的做法是写一个配置文件,配置文件保存控件的位置,名称,尺寸,
显示的内容(Text属性内容),控件的字体,前景色,背景色,问题是控件
字体的名字、字体大小是只读,只能同过fontdialog对话框来修改,我的
意思是修改以后并能保存下来,下次再进入程序时就是该过后的字体了,
所有控件的位置也是如此。

[PictureBoxes]
Count=2
LEFT0=3120
TOP0=3825
WIDTH0=5475
HEIGHT0=4125
LEFT1=3120
TOP1=3825
WIDTH1=5475
HEIGHT1=4125

[TextBoxes]
Count=1
TOP0=8745
LEFT0=1620
HEIGHT0=6825
WIDTH0=9135
FONTNAME0=宋体
FONTITALIC0=False
FONTSIZE0=9
FONTSTRIKETHRU0=False
FONTBOLD0=False
FONTUNDERLINE0=False
FORECOLOR0=0

[Lines]
Count=0
Color0=
Width0=
X00=1090
Y00=2254
X10=9660
Y10=30

[StaticText]
Count=3
NAME0=填写大名:
TOP0=960
LEFT0=3840
FONTNAME0=宋体
FONTITALIC0=False
FONTSIZE0=24
FONTSTRIKETHRU0=False
FONTBOLD0=False
FONTUNDERLINE0=False
FORECOLOR0=32768
NAME1=公司:
TOP1=1485
LEFT1=4425
FONTNAME1=宋体
FONTITALIC1=False
FONTSIZE1=18
FONTSTRIKETHRU1=False
FONTBOLD1=True
FONTUNDERLINE1=False
FORECOLOR1=16711680
NAME2=你好:
TOP2=8355
LEFT2=1335
FONTNAME2=宋体
FONTITALIC2=False
FONTSIZE2=12
FONTSTRIKETHRU2=False
FONTBOLD2=False
FONTUNDERLINE2=False
FORECOLOR2=16711680

我是通过读上面的配置文件来装载控件和修改后保存控件的位置,
这样做我发现了几个问题不能解决(就是上面所诉的问题),那位
大哥或者大姐又没有其他的好方法,或者有这方面的资料和源代码,
对这个问题我已经郁闷了好长时间了。

在此先谢谢大家进入阅读!希望大家能帮我解决一下

------解决方案--------------------
用xml文件保存,将线条需要保存的属性(如长度、颜色、高度等)保存到XML配置文件,然后在打开的时候,通过此信息用反射的方法将其添加到PANEL上。
------解决方案--------------------
都已经是只读属性了。又要动态加载。那加载的时候肯定只能是默认值了。

要么把你要用到的控件都重载一下,把这两个属性改成可写的。
------解决方案--------------------
如果想移动删除所画的线条,需要把每个线条元素化,封装,然后各个元素分层显示,处理。再加上撤销等功能,好像不是那么容易。
------解决方案--------------------
用xml文件保存,将线条需要保存的属性(如长度、颜色、高度等)保存到XML配置文件,然后在打开的时候,通过此信息用反射的方法将其添加到PANEL上。
严重同意