Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从文本中获取输入以在屏幕上绘制形状?_C#_Winforms_Drawing - Fatal编程技术网

C# 如何从文本中获取输入以在屏幕上绘制形状?

C# 如何从文本中获取输入以在屏幕上绘制形状?,c#,winforms,drawing,C#,Winforms,Drawing,大家好,我正在尝试创建一个程序,从用户的命令,以绘制在屏幕上的形状。该程序应具有绘制形状的基本命令和随后清除屏幕的清除命令,用户应能够在文本框中键入moveTo,笔应将光标移动到他们设置的坐标,然后用户应能够键入他们想要绘制的形状(圆(半径)、矩形(宽度、高度)、三角形(边,边,边)。我已经让它为矩形工作了,因为我想要,但是,任何人都可以帮助我实现其他部分 public partial class Form1 : Form { String input; Bitmap drawO

大家好,我正在尝试创建一个程序,从用户的命令,以绘制在屏幕上的形状。该程序应具有绘制形状的基本命令和随后清除屏幕的清除命令,用户应能够在文本框中键入moveTo,笔应将光标移动到他们设置的坐标,然后用户应能够键入他们想要绘制的形状(圆(半径)、矩形(宽度、高度)、三角形(边,边,边)。我已经让它为矩形工作了,因为我想要,但是,任何人都可以帮助我实现其他部分

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