gpt4 book ai didi

c# - 用于绘画应用的可定制椭圆

转载 作者:可可西里 更新时间:2023-11-01 09:37:54 25 4
gpt4 key购买 nike

我一直在使用 C# 开发一个绘图应用程序;我想添加一个选项来切换使用当前画笔绘制椭圆的选项。我一直对如何制作它感到困惑,以便在按住鼠标的同时改变椭圆的大小和 Y 位置。有任何想法吗?这是我的代码。

    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 ZSPainter
{
public partial class Form1 : Form
{
string drawToolString;
Graphics g;
bool c = false;
bool drawEllipse = false;
Point sp = new Point(0, 0);
Point ep = new Point(0, 0);
Pen p = new Pen(Color.Black, 1);
Brush b = new SolidBrush(Color.Black);
public Form1()
{
InitializeComponent();
}

private void penToolStripMenuItem_Click(object sender, EventArgs e)
{
drawToolString = "pen";
toolString.Text = "Current Tool: Pen";
}

private void brushToolStripMenuItem_Click(object sender, EventArgs e)
{
drawToolString = "brush";
toolString.Text = "Current Tool: Brush";
}

private void Form1_MouseDown(object sender, MouseEventArgs e)
{
sp = e.Location;
if(e.Button == MouseButtons.Left)
c = true;
}

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (drawToolString == "pen" && c)
{
ep = e.Location;
g = this.CreateGraphics();
if(!drawEllipse)
g.DrawLine(p, sp, ep);
/*else
*
*------Here is where I want an ellipse to drawn if drawEllipse is true.------

*/


}
else if (drawToolString == "brush" && c)
{
ep = e.Location;
g = this.CreateGraphics();
if(!drawEllipse)
g.DrawLine(new Pen(b, 3), sp, ep);
/*else
*
*------Here is where I want an ellipse to drawn if drawEllipse is true.------

*/
}
sp = ep;
}

private void Form1_MouseUp(object sender, MouseEventArgs e)
{
c = false;
}

private void ellipse_Click(object sender, EventArgs e)
{
drawEllipse = !drawEllipse;
}
}
}

最佳答案

使用具有透明背景的图片框和已经从图像文件中绘制的椭圆(每个示例)并将其放在鼠标坐标处。

但是要注意,这会给你的代码带来很多麻烦,你正在绘制表单,当它刷新时,刷新区域中的所有内容都会被清除,所以如果你在它上面放置和移动控件,它会被清除。

我建议创建一个位图,将这个位图设置为你的表单的背景并绘制到那个位图上,然后它就会持久化(也更容易保存)。

此外,您需要设置鼠标在 MouseDown 事件上捕获并在 MouseUp 上释放,否则表单在显示图片框后不会捕获 MouseMove 事件。

如果您不想使用图片框,而是将绘图切换为位图,则可以在表单上绘画并刷新之前绘制椭圆的区域,这样绘图将被保留并且椭圆将移动到它上面。

关于c# - 用于绘画应用的可定制椭圆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23050379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com