⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 drawlinesform.cs

📁 网上流传的5个面试题目
💻 CS
字号:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace DrawLines
{
	/// <summary>
	/// 一家日企的面试题目之三
	/// 完成下面的程序,功能要求为:
	/// (1)可以用鼠标自由的在屏幕上面画出一段折线(要求用橡皮筋“技术),如
	/// 折线相交,弹出提示框,要求重新取点(该点不作为折线上的点)
	/// (2)在上面折线的两侧,以一定的距离画出与之平行的折线
	/// </summary>
	public class DrawLinesForm : System.Windows.Forms.Form
	{
		/// <summary>
		/// 必需的设计器变量。
		/// </summary>
		private System.ComponentModel.Container components = null;
		

		private bool isMouseDown = false;		//记录鼠标是否已按下。
		private bool ptEndIsNull = true;		//记录ptEnd是否无效。当鼠标键刚按下而鼠标没有移动时应是无效的。
		private Point ptBegin;					//记录新画线的起点。
		private Point ptEnd;					//记录新画线的终点。
		private ArrayList listLines;			//记录所有已画的线。

		public DrawLinesForm()
		{
			//
			// Windows 窗体设计器支持所必需的
			//
			InitializeComponent();

			//
			// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
			//
			listLines = new ArrayList();
		}

		/// <summary>
		/// 清理所有正在使用的资源。
		/// </summary>
		protected override void Dispose( bool disposing )
		{
			if( disposing )
			{
				if (components != null) 
				{
					components.Dispose();
				}
			}
			base.Dispose( disposing );
		}

		#region Windows 窗体设计器生成的代码
		/// <summary>
		/// 设计器支持所需的方法 - 不要使用代码编辑器修改
		/// 此方法的内容。
		/// </summary>
		private void InitializeComponent()
		{
			// 
			// DrawLinesForm
			// 
			this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
			this.BackColor = System.Drawing.Color.White;
			this.ClientSize = new System.Drawing.Size(656, 381);
			this.Name = "DrawLinesForm";
			this.Text = "画线程序";
			this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.DrawLinesForm_MouseDown);
			this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.DrawLinesForm_MouseUp);
			this.Paint += new System.Windows.Forms.PaintEventHandler(this.DrawLinesForm_Paint);
			this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.DrawLinesForm_MouseMove);

		}
		#endregion

		/// <summary>
		/// 应用程序的主入口点。
		/// </summary>
		[STAThread]
		static void Main() 
		{
			Application.Run(new DrawLinesForm());
		}

		private void DrawLinesForm_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
		{
			Graphics dc = this.CreateGraphics();
			Pen pen = new Pen(this.ForeColor, 1);
			IEnumerator pos = listLines.GetEnumerator();
			while(pos.MoveNext())
			{
				Line line = (Line)pos.Current;
				line.Draw(dc, pen);
			}
		}

		private void DrawLinesForm_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
		{
			//鼠标已按下,记录线段起点。
			isMouseDown = true;
			ptBegin = new Point(e.X, e.Y);
		}

		private void DrawLinesForm_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
		{
			if (isMouseDown)
			{
				//鼠标已按下,若ptEnd有效则擦去旧线重绘新线,以实现橡皮筋技术。
				Graphics dc = this.CreateGraphics();
				Pen pen = new Pen(this.ForeColor, 1);
				if (!ptEndIsNull)
				{
					pen.Color = this.BackColor;
					dc.DrawLine(pen, ptBegin, ptEnd);
					pen.Color = this.ForeColor;
				}
				ptEnd = new Point(e.X, e.Y);
				ptEndIsNull = false;
				dc.DrawLine(pen, ptBegin, ptEnd);
			}
		}

		private void DrawLinesForm_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
		{
			//鼠标键弹起,擦去橡皮筋所画的线。判断是否有线相交,若无则
			//用Line类绘制新线,并将新线记录。
			isMouseDown = false;
			ptEndIsNull = true;
			ptEnd = new Point(e.X, e.Y);
			Pen pen = new Pen(this.BackColor, 1);
			Graphics dc = this.CreateGraphics();
			dc.DrawLine(pen, ptBegin, ptEnd);
			Line line = new Line(ptBegin, ptEnd);
			if (IsCutWithOldLines(line))
			{
				MessageBox.Show("折线不能相交!", "提示");
				DrawLinesForm_Paint(null, null);
			}
			else
			{
				pen.Color = this.ForeColor;
				line.Draw(dc, pen);
				listLines.Add(line);
			}
		}

		/// <summary>
		/// 判断新线是否与已记录的旧线相交。
		/// </summary>
		/// <param name="newLine">新绘制的线。</param>
		/// <returns>若相交,返回真。否则返回假。</returns>
		private bool IsCutWithOldLines(Line newLine)
		{
			IEnumerator pos = listLines.GetEnumerator();
			while(pos.MoveNext())
			{
				Line line = (Line)pos.Current;
				if (newLine.IsCutWithLine(line))
					return true;
			}
			return false;
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -