首页 > 试题

时间进度怎么算

更新时间:2022-11-12 12:35:43 阅读: 评论:0

八年级美术试卷及答案-sincere名词


2022年11月12日发(作者:月下独酌李白)

C#⾃定义时间进度条

这篇⽂章对我帮助极⼤,我模仿着写了两遍⼤概摸清楚了⾃定义控件的流程。感谢⼤佬leslie_xin

样式

最开始

进度条有更改

根据开始时间和结束时间时间刻度间隔有更改

设置项

正⽂

⾸先,我模仿过leslie_xin,写过⼀个进度条,⽤于播放视频,但是没有刻度,现在没有刻度不⾏,所以要搞⼀个刻度,计划使⽤GDI+

然后,发现/lesliexin/p/这个控件⾥的长、宽不能修改,不然得⾃⼰再计算细节性得问题,就打算继承UrControl,把leslie_xin的进度条拖放进来

```UrControl```就把他当成正常窗⼝写,改写啥就写啥

正经脸

⾸先,能够满⾜⾃定以的进度条样式吧,⽐如前景⾊、背景⾊、进度的颜⾊,所以有了

privateColor_BarBackColor=gb(128,255,128);

[Category("TimeTrackBarControl"),Description("进度条背景⾊")]

publicColorBarBackColor

{

get

{

kColor;

}

t

{

_BarBackColor=value;

kColor=_BarBackColor;

Invalidate();

}

}

privateColor_BarSliderColor=gb(64,128,64);

[Category("TimeTrackBarControl"),Description("进度条滑块颜⾊rn有值部分的颜⾊")]

publicColorBarSliderColor

{

get

{

Color;

}

t

{

_BarSliderColor=value;

Color=_BarSliderColor;

Invalidate();

}

}

然后因为要显⽰时间、开始时间、结束时间,所以⼜有了

privateDateTime_StartTime=rs(-1);

[Category("TimeTrackBarControl"),Description("开始时间")]

publicDateTimeStartTime

{

get

{

return_StartTime;

}

t

{

_StartTime=value;

//if(_StartTime>_EndTime)_StartTime=_utes(-1);

_BarMaximum=(_EndTime-_StartTime).();

m=_BarMaximum;

m=0;

Invalidate();

}

}

privateDateTime_EndTime=;

[Category("TimeTrackBarControl"),Description("结束时间")]

publicDateTimeEndTime

{

get

{

return_EndTime;

}

t

{

_EndTime=value;

//if(_EndTime<_StartTime)_EndTime=_utes(1);

_BarMaximum=(_EndTime-_StartTime).();

m=_BarMaximum;

m=0;

Invalidate();

}

}

再次因为要纪录进度条的值、最⼤值、最⼩值为0,记个der~,(我也不知道为啥会有这样值,脑⼦可能有它⾃⼰的想法)所以还有

privateint_BarMaximum=0;

[Category("TimeTrackBarControl"),Description("最⼤值rn默认:0,由开始时间和结束时间决定(只读)")]

publicintBarMaximum

{

get

{

return_BarMaximum;

}

}

privateint_BarCurValue=0;

[Category("TimeTrackBarControl"),Description("当前值")]

publicintBarCurValue

{

get

{

_BarCurValue=ue;

return_BarCurValue;

}

t

{

_BarCurValue=value;

if(_BarCurValue<0)_BarCurValue=0;

if(_BarCurValue>_BarMaximum)_BarCurValue=_BarMaximum;

ue=_BarCurValue;

BarCurValueChanged?.Invoke(this,newCurValueEventArgs(_BarCurValue));

}

}

你这个时间刻度总得有颜⾊吧,总不能是皇帝的时间刻度,进度条的值对应的时间label也得有样式吧,皇帝也没有label啊,所以双有了

privateColor_TimeScaleColor=gb(210,210,210);

[Category("TimeTrackBarControl"),Description("时间刻度的颜⾊")]

publicColorTimeScaleColor

{

get

{

return_TimeScaleColor;

}

t

{

_TimeScaleColor=value;

Invalidate();

}

}

privateint_ScaleInterval=1200;

[Category("TimeTrackBarControl"),Description("时间刻度之间相隔秒数,⼩于零表⽰⾃适应rn单位:秒")]

publicintScaleInterval

{

get

{

return_ScaleInterval;

}

t

{

_ScaleInterval=value;

//if(_ScaleInterval<=0)

//{

//_ScaleInterval=1800;

//}

Invalidate();

}

}

privateint_RealScaleInterval=1200;

[Category("TimeTrackBarControl"),Description("实际相隔的秒数(为了显⽰⾃适应时真实的间隔时间)rn单位:秒")]

publicintRealScaleInterval

{

get

{

_RealScaleInterval=_ScaleInterval>0?_ScaleInterval:_RealScaleInterval;

return_RealScaleInterval;

}

}

privateColor_TimeLabelBackColor=gb(255,192,192);

[Category("TimeTrackBarControl"),Description("时间label背景⾊")]

publicColorTimeLabelBackColor

{

get

{

return_TimeLabelBackColor;

}

t

{

_TimeLabelBackColor=value;

Invalidate();

}

}

privateColor_TimeLabelForeColor=gb(192,255,192);

[Category("TimeTrackBarControl"),Description("时间label前景⾊")]

publicColorTimeLabelForeColor

{

get

{

return_TimeLabelForeColor;

}

t

{

_TimeLabelForeColor=value;

Invalidate();

}

}

最后你这个时间刻度总得能够直接跳到某个时间点吧,所以叒有

publicvoidSeekByTime(DateTimetime)

{

BarCurValue=(time-StartTime).();

}

你搞了那么多样式,总得有⼈去画吧,所以叕有了

protectedoverridevoidOnPaint(PaintEventArg)

{

t(e);

}

时间刻度呢?总得去⽣成吧,所以我们要计算⼀下,每个刻度之间间隔多少秒钟,毕竟进度条的最⼩值为零,最⼤值为开始时间和最⼩时间间隔的秒数。

所以:1、计算间隔

2、计算时间刻度的坐标

3、画出来

///

///微软雅⿊regular10F23:56分约占38个像素,现定为45个像素为最⼩值,时间刻度:60秒为最⼩值

///

///

privateintSelfAdaption()

{

floatradio=45*1.0f/;//45个像素占进度条总长的⽐例

doubleinterval=(_EndTime-_StartTime).TotalSeconds*radio;//这个⽐例下,占多长的时间

if(interval<=60)

{

interval=60;

}

elif(interval>60&&interval<=300)

{

interval=300;

}

elif(interval>300&&interval<=600)

{

interval=600;

}

elif(interval>600&&interval<=1200)

{

interval=1200;

}

elif(interval>1200&&interval<=1800)

{

interval=1800;

}

elif(interval>1800&&interval<=3600)

{

interval=3600;

}

32(interval);

}

///

///要划线的坐标

///

///

///

privateListTimeScaleList()

{

DateTimetime=_StartTime;

if(_ScaleInterval<0)

{

_RealScaleInterval=SelfAdaption();

}

el

{

_RealScaleInterval=_ScaleInterval;

}

Listscales=newList();

TimeScaleLocationstart_scale=newTimeScaleLocation(on.X,on.Y+/2,_StartTime);

(start_scale);

while(onds(_RealScaleInterval)<_EndTime)

{

time=onds(_RealScaleInterval);

intval=(time-_StartTime).();

floatradio=val*1.0f/_BarMaximum;

intx=on.X+32(*radio);

inty=on.Y;

TimeScaleLocationscale=newTimeScaleLocation(x,y,time);

(scale);

}

intend_x=on.X+;

intend_y=on.Y+/2;

TimeScaleLocationend_scale=newTimeScaleLocation(end_x,end_y,_EndTime);

(end_scale);

returnscales;

}

//完全体的OnPaint⽅法

protectedoverridevoidOnPaint(PaintEventArg)

{

t(e);

ChangeStyle();

ingMode=ality;

Penpen=newPen(_TimeScaleColor,1);

Brushbrush=newSolidBrush(_TimeScaleColor);

Fontfont=newFont("微软雅⿊",10,r,,(byte)134);

Listscales=TimeScaleList();

for(inti=0;i<;i++)

{

TimeScaleLocationitem=scales[i];

intlength=15;

if(_RealScaleInterval*i%3600==0)

{

length=length+*1;

}

if(i==0||i==-1)

{

length=(int)(length+*1.5);

}

if(i==0)

{

item.x-=1;

}

ne(pen,item.x,item.y,item.x,item.y-length);

ring(ng("HH:mm"),font,brush,newPoint(item.x-19,*2));

}

}

//设置label样式,onpaint⽅法调⽤

privatevoidChangeStyle()

{

lor=_TimeLabelBackColor;

lor=_TimeLabelForeColor;

}

是不是发现有个TimeScaleLocation不知道是啥?

usingSystem;

ls

{

///

///时间刻度信息

///

publicclassTimeScaleLocation

{

///

///time对应在进度条上的点的x坐标

///

publicintx{get;t;}

///

///time对应在进度条上的点的y坐标

///

publicinty{get;t;}

///

///time时间点

///

publicDateTimetime{get;t;}

publicTimeScaleLocation(intx,inty,DateTimetime)

{

this.x=x;

this.y=y;

=time;

}

}

}

哦,我亲爱的⽼伙计,我好像忘记了把事件加上来了,我今天得罚我⾃⼰吃三⼤碗饭,治治我这个不长记性的脑⼦。所以这个事件我借⽤那个⼤佬的

#region事件,

publicdelegatevoidCurValueChangedEventHandler(objectnder,CurValueEventArg);

///

///值发⽣改变时引发的事件

///

publiceventCurValueChangedEventHandlerBarCurValueChanged;

#endregion

收获

1、markdown不会使,排版全⽤

#我太难了

2、在UrControl中,如果不是其他控件的事件,那么将事件替换为OnXXX(),例如:Click替换为OnClick(),这样好像⽐较快,尤其是⿏标事件

3、注意循环调⽤,⽐如修改BarCurValue时修改了还加了事件,然后⼜在ar的valueChanged事件中修改了BarCurValue,然后就会发现vs好像累了,它不想理你了,怎么挑逗都不起

作⽤了outofstrack?还是其他的啥玩意。就是这两个发⽣了循环调⽤

4、这个版本有点⼩问题,修改办法放在收获中

其他,未知,忘记了,等我记起了再补充。退朝~

完整内容

usingSystem;

c;

entModel;

g;

g2D;

;

ls

{

[DefaultEvent("CurValueChanged")]

publicpartialclassTimeTrackBarControl:UrControl

{

publicTimeTrackBarControl()

{

InitializeComponent();

}

#region事件

publicdelegatevoidCurValueChangedEventHandler(objectnder,CurValueEventArg);

///

///值发⽣改变时引发的事件

///

publiceventCurValueChangedEventHandlerBarCurValueChanged;

#endregion

privateColor_BarBackColor=gb(128,255,128);

[Category("TimeTrackBarControl"),Description("进度条背景⾊")]

publicColorBarBackColor

{

get

{

kColor;

}

t

{

_BarBackColor=value;

kColor=_BarBackColor;

Invalidate();

}

}

privateColor_BarSliderColor=gb(64,128,64);

[Category("TimeTrackBarControl"),Description("进度条滑块颜⾊rn有值部分的颜⾊")]

publicColorBarSliderColor

{

get

{

Color;

}

t

{

_BarSliderColor=value;

Color=_BarSliderColor;

Invalidate();

}

}

privateDateTime_StartTime=rs(-1);

[Category("TimeTrackBarControl"),Description("开始时间")]

publicDateTimeStartTime

{

get

{

return_StartTime;

}

t

{

_StartTime=value;

//if(_StartTime>_EndTime)_StartTime=_utes(-1);

_BarMaximum=(_EndTime-_StartTime).();

m=_BarMaximum;

m=0;

Invalidate();

}

}

privateDateTime_EndTime=;

[Category("TimeTrackBarControl"),Description("结束时间")]

publicDateTimeEndTime

{

get

{

return_EndTime;

}

t

{

_EndTime=value;

//if(_EndTime<_StartTime)_EndTime=_utes(1);

_BarMaximum=(_EndTime-_StartTime).();

m=_BarMaximum;

m=0;

Invalidate();

}

}

privateint_BarMaximum=0;

[Category("TimeTrackBarControl"),Description("最⼤值rn默认:0,由开始时间和结束时间决定(只读)")]

publicintBarMaximum

{

get

{

return_BarMaximum;

}

}

privateint_BarCurValue=0;

[Category("TimeTrackBarControl"),Description("当前值")]

publicintBarCurValue

{

get

{

_BarCurValue=ue;

return_BarCurValue;

}

t

{

_BarCurValue=value;

if(_BarCurValue<0)_BarCurValue=0;

if(_BarCurValue>_BarMaximum)_BarCurValue=_BarMaximum;

ue=_BarCurValue;

BarCurValueChanged?.Invoke(this,newCurValueEventArgs(_BarCurValue));

}

}

privateColor_TimeScaleColor=gb(210,210,210);

[Category("TimeTrackBarControl"),Description("时间刻度的颜⾊")]

publicColorTimeScaleColor

{

get

{

return_TimeScaleColor;

}

t

{

_TimeScaleColor=value;

Invalidate();

}

}

privateint_ScaleInterval=1200;

[Category("TimeTrackBarControl"),Description("时间刻度之间相隔秒数,⼩于零表⽰⾃适应rn单位:秒")]

publicintScaleInterval

{

get

{

return_ScaleInterval;

}

t

{

_ScaleInterval=value;

//if(_ScaleInterval<=0)

//{

//_ScaleInterval=1800;

//}

Invalidate();

}

}

privateint_RealScaleInterval=1200;

[Category("TimeTrackBarControl"),Description("实际相隔的秒数(为了显⽰⾃适应时真实的间隔时间)rn单位:秒")]

publicintRealScaleInterval

{

get

{

_RealScaleInterval=_ScaleInterval>0?_ScaleInterval:_RealScaleInterval;

return_RealScaleInterval;

}

}

privateColor_TimeLabelBackColor=gb(255,192,192);

[Category("TimeTrackBarControl"),Description("时间label背景⾊")]

publicColorTimeLabelBackColor

{

get

{

return_TimeLabelBackColor;

}

t

{

_TimeLabelBackColor=value;

Invalidate();

}

}

privateColor_TimeLabelForeColor=gb(192,255,192);

[Category("TimeTrackBarControl"),Description("时间label前景⾊")]

publicColorTimeLabelForeColor

{

get

{

return_TimeLabelForeColor;

}

t

{

_TimeLabelForeColor=value;

Invalidate();

}

}

publicvoidSeekByTime(DateTimetime)

{

BarCurValue=(time-StartTime).();

}

#region⼀些系统事件

protectedoverridevoidOnPaint(PaintEventArg)

{

t(e);

ChangeStyle();

ingMode=ality;

Penpen=newPen(_TimeScaleColor,1);

Brushbrush=newSolidBrush(_TimeScaleColor);

Fontfont=newFont("微软雅⿊",10,r,,(byte)134);

Listscales=TimeScaleList();

for(inti=0;i<;i++)

{

TimeScaleLocationitem=scales[i];

intlength=15;

if(_RealScaleInterval*i%3600==0)

{

length=length+*1;

}

if(i==0||i==-1)

{

length=(int)(length+*1.5);

}

if(i==0)

{

item.x-=1;

}

ne(pen,item.x,item.y,item.x,item.y-length);

ring(ng("HH:mm"),font,brush,newPoint(item.x-19,*2));

}

}

protectedoverridevoidOnMouDown(MouEventArg)

{

eDown(e);

}

protectedoverridevoidOnMouMove(MouEventArg)

{

eMove(e);

}

protectedoverridevoidOnMouUp(MouEventArg)

{

eUp(e);

}

protectedoverridevoidOnMouEnter(EventArg)

{

eEnter(e);

}

protectedoverridevoidOnMouLeave(EventArg)

{

eLeave(e);

}

protectedoverridevoidOnSizeChanged(EventArg)

{

Changed(e);

intx=()/2;

inty=on.Y;

on=newPoint(x,y);

}

///

///要划线的坐标

///

///

///

privateListTimeScaleList()

{

DateTimetime=_StartTime;

if(_ScaleInterval<0)

{

_RealScaleInterval=SelfAdaption();

}

el

{

_RealScaleInterval=_ScaleInterval;

}

Listscales=newList();

TimeScaleLocationstart_scale=newTimeScaleLocation(on.X,on.Y+/2,_StartTime);

(start_scale);

while(onds(_RealScaleInterval)<_EndTime)

{

time=onds(_RealScaleInterval);

intval=(time-_StartTime).();

floatradio=val*1.0f/_BarMaximum;

intx=on.X+32(*radio);

inty=on.Y;

TimeScaleLocationscale=newTimeScaleLocation(x,y,time);

(scale);

}

intend_x=on.X+;

intend_y=on.Y+/2;

TimeScaleLocationend_scale=newTimeScaleLocation(end_x,end_y,_EndTime);

(end_scale);

returnscales;

}

///

///微软雅⿊regular10F23:56分约占38个像素,现定为45个像素为最⼩值,时间刻度:60秒为最⼩值

///

///

privateintSelfAdaption()

{

floatradio=45*1.0f/;//45个像素占进度条总长的⽐例

doubleinterval=(_EndTime-_StartTime).TotalSeconds*radio;//这个⽐例下,占多长的时间

if(interval<=60)

{

interval=60;

}

elif(interval>60&&interval<=300)

{

interval=300;

}

elif(interval>300&&interval<=600)

{

interval=600;

}

elif(interval>600&&interval<=1200)

{

interval=1200;

}

elif(interval>1200&&interval<=1800)

{

interval=1800;

}

elif(interval>1800&&interval<=3600)

{

interval=3600;

}

32(interval);

}

privatevoidChangeStyle()

{

lor=_TimeLabelBackColor;

lor=_TimeLabelForeColor;

}

#endregion

///

///为了实时改变显⽰的值

///

///

///

privatevoidTrackBar_CurValueChanged(objectnder,CurValueEventArg)

{

BarCurValueChanged?.Invoke(this,newCurValueEventArgs());

=_onds().ToString("HH:mm:ss");

}

}

}

哦,要和⼤佬的例⼦放在⼀起,因为借⽤了他的控件和事件。还有,⼤佬的⽂章末尾有⼤佬代码的下载链接,嘿嘿~

没有七个#号的样式

###不信你看

转载请注明出处

本文发布于:2022-11-12 12:35:43,感谢您对本站的认可!

本文链接:http://www.wtabcd.cn/fanwen/fan/88/4561.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:恭敬的看
下一篇:require用法
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图