C# 基本结构

  • Post author:
  • Post category:其他


1,在C#中,结构体和类的成员都会被默认设置为私有成员。区别在于类是引用类型,结构体是值类型。

引用类型是指,一个指向内存块的指针。

2,C#中,点、尺寸、矩形、颜色 四个数据类型都是结构体而不是类。

3,Point结构具有两个读写属性的,叫做x,y的32为整数。

Point是个结构体,但是定义的同时也必须赋值

Point pt=new Point();然后pt.x=1;pt.y=2;

Point结构本身有个静态字段 Point.Empty,可以对Point的值进行初始化。X,Y都会被初始化为0。还有个IsEmpty只读属性,如果X,Y都为0,可以返回一个true。

4,Point的实例有方法ToString(); 可以输出 {x=1,y=2}这样的结果

pt1.Equals(Point pt2);可以比较两个点是否同一个坐标,返回一个bool结果。也可以用pt1==pt2代替。

pt.Offset(4,-5);可以设置偏移量。相当于pt.x+=4,pt.y+=-5;

5,Point 数组: Point[] pt=new Point[20];就可以使用pt[0]~pt[19];用于表示曲线上的一系列点。每个点都会被初始化为0,0。

创建数组的时候可以初始化数组

Point[] pt=new Point[3]{new Point(1,2),new Point(3,4),new Point(5,2)};

Point[] pt=new Point[]{new Point(1,2),new Point(3,4),new Point(5,2)};

Point[] pt={new Point(1,2),new Point(3,4),new Point(5,2)};

6, Size

Size结构和Point结构类似,有3个属性,Width,Hight,IsEmpty。创建Size方式和Point一样,Size size=new Size(15,20);  (Width和Hight可正可负)

Size和Point可以相互构造 Size(Point point); Point(Size size);可以相互强制转换 size=(Size)pt; pt=(Point)size;

7,Size可以进行+ -运算。size1=size2+size3;   size1-=size2;

Point可以与Size进行加减。pt1+=size1

8,Float版本

PointF ptf=new PointF();

ptf.x=10.2f;

ptf.y=8.7f;   (记得必须要加f)

Pointf不包括Offset方法。

可以将一个Point强制转换成PointF

ptf=(PointF)pt,但是不能进行相反的强制转换。

但是可以使用以下方法转换

Point Round(PointF ptf);四舍五入

Point Truncate(PointF ptf);去掉小数点

Point Ceiling(PointF ptf);去掉小数点后+1

9,矩形就是一个Point加上一个Size 。构造方法为Rectangle(Point pt,Size size);或者Rectangle(int x,int y ,int width,int height)

RectangleF的构造是RectangleF(PointF ptf,SizeF sizef);RectangleF(float x,float y ,float width,float height)

Rectangle可以强制转换成RectangleF,RectangleF可以通过Round,Truncate,Ceiling方法转换成Rectangle。

Rectangle属性包括:Point location,Size size,int X,int Y,int width,int height,int left,int top,int right,int bottom,bool isEmpty.

10,方法Offset可以把Rectangle从一个位置移动到另一个位置,rect.Offset(2,4);相当于rect.X+=2,rect.Y+=4

或者使用rect.location+=new Size(2,4);

Inflate可以把矩形从圆心放大,rect.Inflate(3,6);横坐标各增加3,纵坐标各增加6.

11,窗体和客户区,客户区不包含窗体的边框、标题栏、菜单栏。有两个属性

1,ClientSize,

2,ClientRectangle。

避免设置一个属性的属性。例如form1.client.ClinetSize.Width=100。这是错误的。

可以用这样的形式form1.clinet.ClinetSize=new Size(200,300);

12,OnMove是Move事件的对应的方法,在窗口移动的时候触发该事件。对应的委托是void MoveEvent(object obj,EventArg ea);  OnResize一样,在窗口大小变化的时候触发该事件。

在OnResize 里增加了Invalidate(),可以直接用ResizeRedraw属性来代替。ResizeRedraw=true;他的本质是调用了基类的OnResize()方法,在基类的OnResize方法中可能包含有语句

{

if(ResizeRedraw)

Invalidate();

}

在重写OnResize的时候一定要调用基类的OnReSize,否则ResizeRedraw会失效。

13,Control类的Invalidate()方法可以是客户区无效,调用OnPaint()方法重绘客户区。但是OnPaint不是立即调用的。需要等待其他事件处理完。如果要立即重绘客户区,在Invalidate()后,在调用Control类的Update()方法即可。

14,Color是System.Drawing空间下的 一个机构。WinForm中的颜色基于ARGB (alpha-red-green-blue)模型。Color的构造函数为Color clr=new Color; 是一个纯黑色。一般使用Color的属性或者Color的方法来得到Color的对象。

静态方法Color.FromArgb,可以返回一个Color对象,重载的方法有

Color Color.FromArgb(int r,int g,int b);

Color Color.FromArgb(int a,int r,int g,int b);

Color Color.FromArgb(int a,Color clr);

15,Pen类是由Color类指定的。例如Pen pen=new Pen(Color clr);如果要使用预制颜色,可以使用Pens类,它包含有很多属性,可以返回一个Pen的对象。

16,Brush是一个抽象类,不能对其进行实例化,他有几个子类,SolidBrush,HashBrush等等。

Brush brush=new SolidBrush(Color clr);

Burshes类有很多属性,可以返回一个Brush。

17,在DrawString有个重载的方法,里边包含StringFormat类,可以决定String在控件中的现实位置。

StringFormat strfmt=new StringFormat();

strfmt这个类有两个属性,Alignment和LineAlignment,是水平位置和竖直位置。StringAlignment结构包含三个枚举类型,near,middle,far。

strfmt.Alignment=StringAlignment.near;

strfmt.Alignment=StringAlignment.far;

18,MeasureString方法。MeasureString 是Grafics类的一个方法。SizeF stringSize=grfx.measureString(String str,Font f);

19,在矩形里的文本: grfx.DrawString(String str,Font font,RectangleF rect,StringFormat strfmt);

如果这个矩形是ClientRectangle,那么就可以把文本输入在客户区里,自动换行。