C# 輸入兩點並劃出直線(X、Y只顯示-10~10) for 大偉
使用者輸入兩點座標,並畫出直線(X、Y只顯示-10~10)。
執行結果。
參考答案。
專案下載位置:檔案名稱為CSharp_DrawLine
執行結果。
參考答案。
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- namespace CSharp_DrawLine
- {
- public partial class Form1 : Form
- {
- public Form1()
- {
- InitializeComponent();
- }
- private void Form1_Load(object sender, EventArgs e)
- {
- //----textbox事件----
- foreach (Control ctrl in Controls)
- {
- if (ctrl.GetType().Name == "TextBox")
- {
- ctrl.Enter += TextBox_Enter;
- ctrl.MouseClick += TextBox_Enter;
- }
- }
- }
- //----選到textbox時,選取全部文字
- private void TextBox_Enter(object sender, EventArgs e)
- {
- TextBox tb = sender as TextBox;
- tb.SelectAll();
- }
- float x0, x1, y0, y1;
- float ratio_x, ratio_y;
- float wid, hei;
- Bitmap bmp;
- Graphics g;
- Pen pen;
- SolidBrush brush;
- private void draw_btn_Click(object sender, EventArgs e)
- {
- try
- {
- //----畫筆顏色----
- pen = new Pen(Color.Black);
- brush = new SolidBrush(pen.Color);
- //----取得picturebox寬度與高度----
- wid = pictureBox1.Width;
- hei = pictureBox1.Height;
- //----是否有上一次的圖片,如果有就清除----
- if (pictureBox1.Image != null)
- pictureBox1.Image = null;
- if (bmp != null)
- bmp.Dispose();
- //----轉換使用者輸入的資料----
- x0 = float.Parse(x0_tb.Text);
- y0 = float.Parse(y0_tb.Text);
- x1 = float.Parse(x1_tb.Text);
- y1 = float.Parse(y1_tb.Text);
- //----計算放大倍率----
- ratio_x = (wid - 50) / 20;
- ratio_y = (hei - 50) / 20;
- //----開新的Bitmap----
- bmp = new Bitmap((int)wid, (int)hei);
- //----使用上面的Bitmap畫圖----
- g = Graphics.FromImage(bmp);
- //----清除Bitmap為某顏色----
- g.Clear(Color.White);
- //----更改原點位置----
- g.TranslateTransform(pictureBox1.Width / 2, pictureBox1.Height / 2);
- //----畫坐標軸----
- g.DrawLine(pen, -1000, 0, 1000, 0);//x軸
- g.DrawLine(pen, 0, -1000, 0, 1000);//y軸
- g.DrawString("X", this.Font, brush, wid / 2 - 20, 20);
- g.DrawString("Y", this.Font, brush, 20, -hei / 2);
- g.DrawLine(pen, wid / 2, 0, wid / 2 - 10, 5);//x軸箭頭
- g.DrawLine(pen, wid / 2, 0, wid / 2 - 10, -5);
- g.DrawLine(pen, 0, -hei / 2, 5, -hei / 2 + 10);//y軸箭頭
- g.DrawLine(pen, 0, -hei / 2, -5, -hei / 2 + 10);
- for (int i = -10; i <= 10; i++)//畫X Y軸座標位置
- {
- g.DrawLine(pen, i * ratio_x, -5, i * ratio_x, 5);
- g.DrawString(i.ToString().PadLeft(2, ' '), this.Font, brush, i * ratio_x - 9, 10);
- g.DrawLine(pen, -5, i * ratio_y, 5, i * ratio_y);
- if (i != 0)
- g.DrawString(i.ToString(), this.Font, brush, 15, i * ratio_y - 8);
- }
- //----換顏色----
- pen = new Pen(Color.Red);
- brush = new SolidBrush(pen.Color);
- //----畫線----
- g.DrawLine(pen, x0 * ratio_x, -y0 * ratio_y, x1 * ratio_x, -y1 * ratio_y);
- //----畫兩點----
- g.FillEllipse(brush, new RectangleF(x0 * ratio_x - 2.5f, -y0 * ratio_y - 2.5f, 5, 5));
- g.FillEllipse(brush, new RectangleF(x1 * ratio_x - 2.5f, -y1 * ratio_y - 2.5f, 5, 5));
- //----釋放Graphics資源----
- g.Dispose();
- //----將Bitmap顯示在Picture上
- pictureBox1.Image = bmp;
- }
- catch (Exception x)
- {
- MessageBox.Show(x.Message);//錯誤視窗
- }
- finally
- {
- GC.Collect();//清除垃圾
- }
- }
- }
- }
專案下載位置:檔案名稱為CSharp_DrawLine
留言
張貼留言