C# 如何从文本中获取输入以在屏幕上绘制形状?
大家好,我正在尝试创建一个程序,从用户的命令,以绘制在屏幕上的形状。该程序应具有绘制形状的基本命令和随后清除屏幕的清除命令,用户应能够在文本框中键入moveTo,笔应将光标移动到他们设置的坐标,然后用户应能够键入他们想要绘制的形状(圆(半径)、矩形(宽度、高度)、三角形(边,边,边)。我已经让它为矩形工作了,因为我想要,但是,任何人都可以帮助我实现其他部分C# 如何从文本中获取输入以在屏幕上绘制形状?,c#,winforms,drawing,C#,Winforms,Drawing,大家好,我正在尝试创建一个程序,从用户的命令,以绘制在屏幕上的形状。该程序应具有绘制形状的基本命令和随后清除屏幕的清除命令,用户应能够在文本框中键入moveTo,笔应将光标移动到他们设置的坐标,然后用户应能够键入他们想要绘制的形状(圆(半径)、矩形(宽度、高度)、三角形(边,边,边)。我已经让它为矩形工作了,因为我想要,但是,任何人都可以帮助我实现其他部分 public partial class Form1 : Form { String input; Bitmap drawO
public partial class Form1 : Form
{
String input;
Bitmap drawOutput;
String command, command2, command3;
int x, y;
public Form1()
{
InitializeComponent();
drawOutput = new Bitmap(OutputBox.Size.Width, OutputBox.Size.Height);
OutputBox.Image = drawOutput;
}
private void Form1_Load(object sender, EventArgs e)
{
Graphics g;
g = Graphics.FromImage(drawOutput);
Pen mypen = new Pen(Color.Black);
g.Clear(Color.White);
g.Dispose();
}
private void CMDBox_TextChanged(object sender, EventArgs e)
{
input = CMDBox.Text;
}
private void ExecuteBtn_Click(object sender, EventArgs e)
{
string[] spilt = input.Split(' ');
foreach (String words in spilt)
{
command = spilt[0];
command2 = spilt[1];
command3 = spilt[2];
x = Int32.Parse(command2);
y = Int32.Parse(command3);
Graphics g;
g = Graphics.FromImage(drawOutput);
Pen pen = new Pen(Color.Black, 5);
if (command == "circle")
{
g.DrawEllipse(pen, 0, 0, x, y);
setImage(g);
}
else if (command == "rectangle")
{
g.DrawRectangle(pen, 0, 0, x, y);
setImage(g);
}
}
}
public void setImage(Graphics g)
{
g = Graphics.FromImage(drawOutput);
OutputBox.Image = drawOutput;
g.Dispose();
}
}
此程序的基本上下文是创建一种真正基本的编程语言,它接受用户输入并在屏幕上显示它您不需要声明类级位图(drawOutput),也不需要从中创建图形对象。您需要在Paint事件处理程序中进行绘图。请尝试以下操作:
- 为形状声明枚举,类级变量用于保存形状类型、x和y坐标以及形状w和h的大小
枚举形状
{
椭圆,
矩形,
线
}
int x,y,w,h;
形状;
- 验证用户在ExecuteBtn click事件中的输入,分配值,如果输入正确,则调用OutputBox.Invalidate()
var cmd=textBox1.Text.Split(“”);
var validCmds=Enum.GetNames(typeof(Shapes));
if(cmd.Length<5 | |!validCmds.Contains(cmd[0],StringComparer.OrdinalIgnoreCase))
{
Show(“输入有效命令”);
返回;
}
如果(!int.TryParse(cmd[1],out x)|
!int.TryParse(cmd[2],out y)||
!int.TryParse(cmd[3],out w)||
!int.TryParse(cmd[4],out h))
{
MessageBox.Show(“输入有效形状”);
返回;
}
shape=(Shapes)validCmds.ToList().FindIndex(a=>a.Equals(cmd[0],StringComparison.OrdinalIgnoreCase));
OutputBox.Invalidate();
- 在绘制事件中绘制形状
private void OutputBox\u Paint(对象发送器,PaintEventArgs e)
{
如果(w>0&&h>0)
{
e、 图形。清晰(颜色。白色);
e、 Graphics.SmoothingMode=System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
使用(钢笔编号=新钢笔(颜色:黑色,5))
{
开关(形状)
{
外壳形状。椭圆:
e、 图形学.抽屉(pn,x,y,w,h);
打破
案例形状。矩形:
e、 绘图矩形(pn,x,y,w,h);
打破
外壳形状。线条:
e、 图形.抽绳(pn、x、y、w、h);
打破
}
}
}
}
更好的是,Shape类方法如下所述。
- 创建Shape类以枚举形状,声明形状的属性,并创建一个方法来解析给定的命令字符串并在成功时输出所需形状:
公共类形状
{
#区域枚举。
公共枚举形状
{
椭圆,
矩形,
线
}
#端区
#区域构造函数
公共形状()
{ }
公共形状(形状形状、整数x、整数y、整数宽度、整数高度)
{
这个形状=形状;
X=X;
Y=Y;
宽度=宽度;
高度=高度;
}
#端区
#区域属性
公共形状ThisShape{get;set;}=Shapes.Ellipse;
公共整数X{get;set;}
公共整数Y{get;set;}
公共整数宽度{get;set;}
公共整数高度{get;set;}
#端区
#区域方法
公共静态bool TryParse(字符串输入、输出形状结果)
{
结果=空;
if(string.IsNullOrEmpty(输入))
返回false;
var cmd=input.Split(“”);
var validCmds=Enum.GetNames(typeof(Shapes));
if(cmd.Length<5 | |!validCmds.Contains(cmd[0],StringComparer.OrdinalIgnoreCase))
返回false;
int x,y,w,h;
如果(!int.TryParse(cmd[1],out x)||
!int.TryParse(cmd[2],out y)||
!int.TryParse(cmd[3],out w)||
!int.TryParse(cmd[4],out h))
返回false;
如果(w您不需要声明类级位图(drawOutput),也不需要从中创建图形对象。您需要在绘制事件处理程序中进行绘制。请尝试以下操作:
- 为形状声明枚举,类级变量用于保存形状类型、x和y坐标以及形状w和h的大小
枚举形状
{
椭圆,
矩形,
线
}
int x,y,w,h;
形状;
- 验证用户在ExecuteBtn click事件中的输入,分配值,如果输入正确,则调用OutputBox.Invalidate()
var cmd=textBox1.Text.Split(“”);
var validCmds=Enum.GetNames(typeof(Shapes));
if(cmd.Length<5 | |!validCmds.Contains(cmd[0],StringComparer.OrdinalIgnoreCase))
{
Show(“输入有效命令”);
返回;
}
如果(!int.TryParse(cmd[1],out x)|
!int.TryParse(cmd[2],out y)||
!int.TryParse(cmd[3],out w)||
!int.TryParse(cmd[4],out h))
{
MessageBox.Show(“输入有效形状”);
返回;
}
shape=(Shapes)validCmds.ToList().FindIndex(a=>a.Equals(cmd[0],StringComparison.OrdinalIgnoreCase));
OutputBox.Invalidate();
- 在绘制事件中绘制形状
private void OutputBox\u Paint(对象发送器,PaintEventArgs e)
{
如果(w>0&&h>0)
{
e、 图形。清晰(颜色。白色);
e、 Graphics.SmoothingMode=System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
使用(钢笔编号=新钢笔(颜色:黑色,5))
{
开关(形状)
{
外壳形状。椭圆:
e、 图形学.抽屉(pn,x,y,w,h);
打破
ca