分享
 
 
 

C#学习文档

王朝c#·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

我原先是学习VB的,总觉得没有继承性实在不方便,后来学习C#后,觉得很方便(C++和Delphi的人不许笑我)。

在设计程序时,经常使用向导来建立界面帮助用户完成某个操作,通常向导的界面基本相同的,基本两种类型:欢迎画面和普通画面。

系统分析:普通向导页面分为顶部信息和底部信息,顶部包括:标题(Title)、本页描述(Info)和标题图像(TitleImage)。底部信息包括:取消(Cancel)、上一步(Back)、下一步(Next)和完成(Finsh),有些向导还包括其他按钮,例如:帮助(Help)等,但在这个例子中,为简单起见,不考虑这么多情况。

在欢迎画面中,主要差别是顶部,欢迎画面没有标题部分,但在左边有个大图片。

实现:我使用了窗口作为基类,首先在界面中绘制基本的控件,见下图:

首先我确定是用三个属性控制顶部状态,Title,Info和Image,也许大家发现我这里没有在标题上直接放控件,因为我觉得没有必要,我在内部定义了三个变量:

private string strTitle="";

private string strInfo="";

private Image imgTitle=null;

通过对外的三个属性改变标题的信息:

[Description("返回/设置顶部标题的文本")]

public string Title{

get{

return strTitle;}

set{

strTitle=value;

panTitle.Invalidate();}

}

[Description("返回/设置顶部标题的说明文本")]

public string Info{

get{

return strInfo;}

set{

strInfo=value;

panTitle.Invalidate();}

}

[Description("返回/设置右上角图像或欢迎画面的图像")]

public Image TitleImage{

get{

return imgTitle;}

set{

imgTitle=value;

panTitle.Invalidate();}

}

在标题面板(panTitle)的重绘事件中,重新绘制了标题信息:

//绘制标题中的信息

private void panTitle_Paint(object sender, System.Windows.Forms.PaintEventArgs e) {

Graphics grp=e.Graphics;

grp.Clear(panTitle.BackColor);

if(mGuidPageMode == tayGuidePageEnum.tayGuidePage_None){

ControlPaint.DrawBorder3D(grp,panTitle.ClientRectangle,Border3DStyle.Etched,Border3DSide.Bottom); //在标题框的底部绘制凹陷线条

Font fnt = new Font(this.Font,this.Font.Style | FontStyle.Bold); //绘制粗体的标题文本

SolidBrush bsh = new SolidBrush(SystemColors.ControlText);

grp.DrawString(strTitle,fnt ,bsh,12,8);

PointF locInfo = new PointF(20,10 + fnt.GetHeight(grp)); //说明文本的左上角坐标

SizeF szImg = new SizeF(48,48); //图形大小

PointF locImg = new PointF(panTitle.Width - szImg.Width -6,6 ); //图形的左上角坐标

SizeF szInfo = new SizeF(locImg.X - locInfo.X -2,panTitle.Height - locInfo.Y -5); //文本的大小

RectangleF rect= new RectangleF(locInfo,szInfo); //文本的范围

grp.DrawString(strInfo,this.Font,bsh,rect); //绘制说明文本

bsh.Dispose();

if(imgTitle != null){

grp.DrawImage(imgTitle,new RectangleF(locImg,szImg));

}

}

else if(mGuidPageMode == tayGuidePageEnum.tayGuidePage_Start){

if(imgTitle != null){

grp.DrawImage(imgTitle,panTitle.ClientRectangle);

}

}

grp.Dispose();

}

大家可能发现绘制的语句分俩种情况绘制,其实时处理欢迎画面和普通画面的区别,我们通过属性让用户修改样式:

[Description("返回/设置当前页面的类型(欢迎页或普通页)")]

public tayGuidePageEnum PageMode{

get{

return mGuidPageMode;}

set{

if(mGuidPageMode !=value){

mGuidPageMode=value;

this.SuspendLayout(); //临时挂起空间的布局逻辑

switch(mGuidPageMode){

case tayGuidePageEnum.tayGuidePage_None:{ //普通界面

panTitle.Anchor = ((AnchorStyles.Top | AnchorStyles.Left) | AnchorStyles.Right);

panTitle.Size = new Size(Width,60);

break;}

case tayGuidePageEnum.tayGuidePage_Start:{ //欢迎画面

panTitle.Anchor = ((AnchorStyles.Bottom | AnchorStyles.Left) | AnchorStyles.Top);

panTitle.Size = new Size(160,Height-panBottom.Height);

break;}

}

this.ResumeLayout(false);

}

}

}

底部没有多少绘制工作,只有绘制一条线:

private void panBottom_Paint(object sender, System.Windows.Forms.PaintEventArgs e) {

Graphics grp=e.Graphics;

ControlPaint.DrawBorder3D(grp,panBottom.ClientRectangle,Border3DStyle.Etched,Border3DSide.Top); //在标题框的底部绘制凹陷线条

grp.Dispose();

}

按钮的状态我们通过属性控制:

[Description("返回/设置是否允许 取消")]

public bool CanCancel{

get{

return cmdCancel.Visible;}

set{

cmdCancel.Visible=value;}

}

[Description("返回/设置是否允许 上一步")]

public bool CanBack{

get{

return cmdBack.Visible;}

set{

cmdBack.Visible=value;}

}

[Description("返回/设置是否允许 下一步")]

public bool CanNext{

get{

return cmdNext.Visible;}

set{

cmdNext.Visible=value;}

}

[Description("返回/设置是否允许 完成")]

public bool CanFinish{

get{

return cmdFinish.Visible;}

set{

cmdFinish.Visible=value;}

}

好,我们大功告成,代码非常的简单,我们从这个基础类中继承出新的窗口,看看效果:

先在我有个问题我解决不掉,就是如果我设置窗口可以调整大小的话,画面无法重画,请高手指点。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有