public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Line_List = new ArrayList();
} private void Form1_Load(object sender, EventArgs e)
{ }
private bool = false;//表示鼠标左键是否按下,如按下鼠标再移动将画曲线
private Point point;//记录画下一很短线段的起始点。
private ArrayList Point_List;//用来记录1条曲线的所有点。
private ArrayList Line_List;//用来记录每条曲线,既Point_List对象。
private void Form1_MouseDown_1(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
Point_List = new ArrayList();//建立数组,记录1条曲线的所有点
point.X = e.X;
point.Y = e.Y;
= true;
Point_List.Add(point);//曲线起点的坐标
}
} private void Form1_MouseMove_1(object sender, MouseEventArgs e)
{
if ()
{
Graphics g = this.CreateGraphics();
Pen pen1 = new Pen(Color.Black);
g.DrawLine(pen1, point.X, point.Y, e.X, e.Y);
point.X = e.X;
point.Y = e.Y;
Point_List.Add(point);//记录曲线中其它点的坐标
}
} private void Form1_MouseUp_1(object sender, MouseEventArgs e)
{ = false;
Line_List.Add(Point_List);//记录此条线,注意参数是Point_List
}
private void Form1_Paint_1(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
Pen pen1 = new Pen(Color.Black);
Point p1, p2;
foreach (ArrayList l in Line_List)//取出每条线
{ for (int k = 0; k < (l.Count - 1); k++)//重画每条线的点
{
p1 = (Point)l[k];
p2 = (Point)l[k + 1];
g.DrawLine(pen1, p1, p2);
}
}
} }问题:各位,虽然代码有点长,不过,我还是全部写下来了,不懂的问题,就是红色字体的代码
ArrayList类型的变量 l怎么能强制转换成Pint类型的呢?没有什么依据吗?还是想转换成什么类型,就转换成什么类型?
{
public Form1()
{
InitializeComponent();
Line_List = new ArrayList();
} private void Form1_Load(object sender, EventArgs e)
{ }
private bool = false;//表示鼠标左键是否按下,如按下鼠标再移动将画曲线
private Point point;//记录画下一很短线段的起始点。
private ArrayList Point_List;//用来记录1条曲线的所有点。
private ArrayList Line_List;//用来记录每条曲线,既Point_List对象。
private void Form1_MouseDown_1(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
Point_List = new ArrayList();//建立数组,记录1条曲线的所有点
point.X = e.X;
point.Y = e.Y;
= true;
Point_List.Add(point);//曲线起点的坐标
}
} private void Form1_MouseMove_1(object sender, MouseEventArgs e)
{
if ()
{
Graphics g = this.CreateGraphics();
Pen pen1 = new Pen(Color.Black);
g.DrawLine(pen1, point.X, point.Y, e.X, e.Y);
point.X = e.X;
point.Y = e.Y;
Point_List.Add(point);//记录曲线中其它点的坐标
}
} private void Form1_MouseUp_1(object sender, MouseEventArgs e)
{ = false;
Line_List.Add(Point_List);//记录此条线,注意参数是Point_List
}
private void Form1_Paint_1(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
Pen pen1 = new Pen(Color.Black);
Point p1, p2;
foreach (ArrayList l in Line_List)//取出每条线
{ for (int k = 0; k < (l.Count - 1); k++)//重画每条线的点
{
p1 = (Point)l[k];
p2 = (Point)l[k + 1];
g.DrawLine(pen1, p1, p2);
}
}
} }问题:各位,虽然代码有点长,不过,我还是全部写下来了,不懂的问题,就是红色字体的代码
ArrayList类型的变量 l怎么能强制转换成Pint类型的呢?没有什么依据吗?还是想转换成什么类型,就转换成什么类型?
解决方案 »
- 奇怪的问题,数据库里的值和查出来放在DataTable里的值不一样
- 在C#的WinForm程序中做了一个显示视频的程序,但是最小化再最大化之后就不见了?
- 复合控件如何数据绑定!
- 求帮助:C#连接Access数据库问题!(在线)
- 一个简单的问题(字符串转为Int)
- 在类代码前面写上:using System.Windows.Forms;与通过:项目->添加引用->选择system.windows.forms.dll,这两种操作有何区别呀?
- winForm中DataGrid的应用。(需要高手才能解决的问题)
- DataGridView自定义列的属性在设计时无法更改
- C#调用C写的DLL,Dll中有函数参数是char arr[],C#中如何定义和传递改参数?在线等待
- 如何在web页面使用 Windows 窗体控件,最好有例子!
- 请教dataGridView问题
- vs中如何添加wpf设计的窗体
所以不要再使用ArrayList了,类型不安全,使用泛型集合吧
从.net 2.0开始就已经抛弃ArrayList了,那东西不太靠谱,建议改成List泛型类吧,List<Point>
所以转换是合理的
Point p= (Point)o; //如果...跟Point类型兼容,你的例子中...就是Point类型显然兼容,或者...是Point的派生类的实例也是兼容的,(ps:你这里Point是值类型不可能有派生类),如果不兼容会发生运行时异常打一个不当的比喻
语句第一句 把一个水果放到包裹里面,包裹上写上水果
第二句 把包裹拆开,把里面的东西取出来当做水果(吃了)如果把炸弹打包写上水果,打开吃的时候会异常