Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.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# 使用文本框更改范围(createGraphics)_C# - Fatal编程技术网

C# 使用文本框更改范围(createGraphics)

C# 使用文本框更改范围(createGraphics),c#,C#,我正在尝试这个,但不起作用 我想用“getal1”更改eclipse的范围 代码如下: private void panel1_Paint(object sender, PaintEventArgs e) { int getal1 = 0; SolidBrush sldBrush1 = new SolidBrush(Color.Red); Graphics tknn1 = panel1.CreateGra

我正在尝试这个,但不起作用

我想用“getal1”更改eclipse的范围

代码如下:

private void panel1_Paint(object sender, PaintEventArgs e)
        {

            int getal1 = 0;

            SolidBrush sldBrush1 = new SolidBrush(Color.Red);
            Graphics tknn1 = panel1.CreateGraphics();
            tknn1.FillEllipse(sldBrush1, 0, 0, getal1, getal1);


        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            int getal1 = int.Parse(textBox1.Text);

            textBox1.Text = getal1.ToString();
        }

根据@TaW的评论,这里有一种方法可以做到这一点。我建议为文本框添加一些更好的验证。您可以看到关于制作只接受数字的
文本框的问题。需要注意的一点是,由于在代码中您使用预定义的红色创建了一个
SolidBrush
,因此您可以使用类中的静态红色笔刷


您的
getal1
变量对这两种方法都是局部变量。您需要将其设置为类级别变量。此外,在
textBox1\u TextChanged
方法中,您可能不希望使用刚从文本框中读取的文本设置文本,尤其不希望在
TextChanged
事件中设置文本。如果无法将文本解析为
Int
,则
Int.Parse
将抛出异常。您可能想考虑<代码> In .TyPARSE < /C> >它将返回一个布尔值,告诉您解析是否成功。WiFraseCasic基本规则(1):永远不要使用<代码>控件。CreateGraphics < /代码>!切勿尝试缓存
图形
对象!使用
Graphics g=Graphics.FromImage(bmp)
或在控件的
Paint
事件中,使用您拥有的
e.Graphics
参数将bmp绘制到
位图中我将在Paint事件中解析数字,并通过执行panel1触发Painrt。在TextChanged事件中使无效。@pstrjds好的,我只是从C开始,不理解您的答案。你能不能在回答中不作评论,而是更详细地回答。我试过你说的,但没用。我将变量不放在panel_paint1内,而是放在initializeComponent()下。我试着把它改成TryParse,但整个句子的语法都错了。@TaW我会在这件事解决后记住的,我明白了,没关系。感谢您的timeGraphics tkn1=panel1.CreateGraphics();请删除这条无用的线@TaW-完成-这是复制的剩余部分。我以为我把它删掉了,只是错过了。谢谢
private void panel1_Paint(object sender, PaintEventArgs e)
{
    // Check if the text box can be parsed as an int and only
    // update the elipse if it is valid
    int getal1 = 0;
    if (int.TryParse(textBox1.Text, out getal1))
    {
        e.Graphics.FillEllipse(Brushes.Red, 0, 0, getal1, getal1);
    }
}

private void textBox1_TextChanged(object sender, EventArgs e)
{
    panel1.Invalidate();
}