winform中怎么将以四个边绘制的矩形按照长和宽等分成线段并将等分点坐标保存在text文件中
时间: 2024-05-10 22:20:37 浏览: 18
在Winform中,你可以使用Graphics类的DrawRectangle方法来绘制一个矩形,然后通过计算长和宽的等分点来保存坐标到文本文件中。
以下是实现的步骤:
1. 创建一个新的Winform应用程序项目,并在Form1.cs文件中添加以下代码:
```csharp
using System.Drawing;
using System.IO;
using System.Windows.Forms;
namespace RectangleDivider
{
public partial class Form1 : Form
{
private Rectangle rect; // 定义一个矩形对象
public Form1()
{
InitializeComponent();
rect = new Rectangle(50, 50, 200, 100); // 初始化矩形对象
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
g.DrawRectangle(Pens.Black, rect); // 绘制矩形
}
private void btnSave_Click(object sender, EventArgs e)
{
int segments = int.Parse(txtSegments.Text); // 获取等分段数
Point[] points = GetRectangleSegments(rect, segments); // 获取矩形等分点
SavePointsToFile(points, "points.txt"); // 保存坐标到文本文件
}
// 计算矩形的等分点
private Point[] GetRectangleSegments(Rectangle rect, int segments)
{
Point[] points = new Point[segments * 2];
float stepX = rect.Width / (float)segments; // 计算X轴步长
float stepY = rect.Height / (float)segments; // 计算Y轴步长
for (int i = 0; i < segments; i++)
{
points[i * 2] = new Point((int)(rect.Left + i * stepX), rect.Top); // 计算上边点坐标
points[i * 2 + 1] = new Point((int)(rect.Left + i * stepX), rect.Bottom); // 计算下边点坐标
}
return points;
}
// 保存坐标到文本文件
private void SavePointsToFile(Point[] points, string fileName)
{
using (StreamWriter writer = new StreamWriter(fileName))
{
foreach (Point point in points)
{
writer.WriteLine("{0},{1}", point.X, point.Y); // 写入坐标
}
}
}
}
}
```
2. 在Form1的设计视图中,将一个Button控件和一个TextBox控件放置在窗体上,并设置Button的Text属性为“Save”,TextBox的Text属性为“10”。
3. 双击Button控件,添加btnSave_Click事件处理程序,并将以下代码添加到事件处理程序中:
```csharp
private void btnSave_Click(object sender, EventArgs e)
{
int segments = int.Parse(txtSegments.Text); // 获取等分段数
Point[] points = GetRectangleSegments(rect, segments); // 获取矩形等分点
SavePointsToFile(points, "points.txt"); // 保存坐标到文本文件
}
```
4. 添加以下辅助方法GetRectangleSegments和SavePointsToFile:
```csharp
// 计算矩形的等分点
private Point[] GetRectangleSegments(Rectangle rect, int segments)
{
Point[] points = new Point[segments * 2];
float stepX = rect.Width / (float)segments; // 计算X轴步长
float stepY = rect.Height / (float)segments; // 计算Y轴步长
for (int i = 0; i < segments; i++)
{
points[i * 2] = new Point((int)(rect.Left + i * stepX), rect.Top); // 计算上边点坐标
points[i * 2 + 1] = new Point((int)(rect.Left + i * stepX), rect.Bottom); // 计算下边点坐标
}
return points;
}
// 保存坐标到文本文件
private void SavePointsToFile(Point[] points, string fileName)
{
using (StreamWriter writer = new StreamWriter(fileName))
{
foreach (Point point in points)
{
writer.WriteLine("{0},{1}", point.X, point.Y); // 写入坐标
}
}
}
```
5. 在Form1的构造函数中初始化矩形对象:
```csharp
rect = new Rectangle(50, 50, 200, 100);
```
6. 在Form1的Paint事件处理程序中绘制矩形:
```csharp
private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
g.DrawRectangle(Pens.Black, rect);
}
```
7. 运行程序,点击“Save”按钮,程序将保存矩形的等分点坐标到名为“points.txt”的文本文件中。