| 发表于:2007-02-02 23:18:488楼 得分:0 |
●创建一个graphicspath类的实例对象。 ●指定好该对象的各项细节(如大小、形状等等)。 ●将控件的region属性设置为上面建立的graphicspath类的实例对象。 创建一个像文本的按钮控件: 1.拖放一个按钮控件到窗体上。 2.在属性对话框中进行如下设置: ●将name属性设置为custombutton。 ●将backcolor属性设置为一个和窗体背景颜色不同的颜色值。 ●将其text属性设置为空字符串。 3.添加窗体的paint事件的事件处理函数。 4.添加以下代码,用graphicspath类的实例对象来画控件。下面的代码以一串字符串的形式画该按钮控件,同时,程序还设置了字符串的字体、大小、风格等属性。字符串被赋给graphicspath类的实例对象。然后,该实例对象就被设置为按钮控件的region属性。这样一个自定义形状的控件就完成了。 private void custombutton_paint(object sender,system.windows.forms.painteventargs e){//初始化一个graphicspath类的对象system.drawing.drawing2d.graphicspath mygraphicspath = newsystem.drawing.drawing2d.graphicspath();//确定一个字符串,该字符串就是控件的形状string stringtext = "click me!";//确定字符串的字体fontfamily family = new fontfamily("arial");//确定字符串的风格int fontstyle = (int)fontstyle.bold;//确定字符串的高度int emsize = 35;//确定字符串的起始位置,它是从控件开始计算而非窗体pointf origin = new pointf(0, 0);//一个stringformat对象来确定字符串的字间距以及对齐方式stringformat format = new stringformat(stringformat.genericdefault);//用addstring方法创建字符串mygraphicspath.addstring(stringtext, family, fontstyle, emsize, origin, format);//将控件的region属性设置为上面创建的graphicspath对象custombutton.region = new region(mygraphicspath);} 5. 创建按钮的click事件的事件处理函数。添加该处理函数来改变控件的背景颜色,从而证实控件原来的那些功能没有被削减。 private void custombutton_click(object sender, system.eventargs e){custombutton.backcolor = color.blanchedalmond;} 6.保存工程并运行。 进一步优化效果 以上我们运用了graphicspath类的实例对象来创建了自定义形状的一个按钮控件。不过我们用的是文本字符串形式的一个形状,是否可以用三角形或是圆形等形状呢?答案是肯定的。.net framework能为我们提供一些预先定义好了的形状以供我们在程序中使用。通过运用这些,你可以创造出几乎任意形状的控件,你还可以把它们结合起来使用以发挥更大的功能。 下面的实例就运用了四个椭圆,当它们被运用到控件上后,看起来就像人的眼睛,很有意思吧。 private void button1_paint(object sender,system.windows.forms.painteventargs e){system.drawing.drawing2d.graphicspath mygraphicspath = newsystem.drawing.drawing2d.graphicspath();mygraphicspath.addellipse(new rectangle(0, 0, 125, 125));mygraphicspath.addellipse(new rectangle(75, 75, 20, 20));mygraphicspath.addellipse(new rectangle(120, 0, 125, 125));mygraphicspath.addellipse(new rectangle(145, 75, 20, 20));//改变按钮的背景颜色使之能被容易辨认button1.backcolor = color.chartreuse;button1.size = new system.drawing.size(256, 256);button1.region = new region(mygraphicspath);} 最后,你还得搞清楚窗体类是从system.windows.forms.control类继承而来的。也就是说,由窗体设计器提供给你的窗体最终还是一个控件。 | | |
|