C# Graphics.Fillrectangle赢得';t更新

C# Graphics.Fillrectangle赢得';t更新,c#,graphics,C#,Graphics,我有一个事件功能,点击启动,在其中我有一个图形指令 private void pictureBox1_Click(object sender, EventArgs e) { switch (modCLick) { case 2: session.g.FillRectangle(Brushes.Tomato, MousePosition.X, MousePosition.Y, 50,

我有一个事件功能,点击启动,在其中我有一个图形指令

    private void pictureBox1_Click(object sender, EventArgs e)
    {
        switch (modCLick)
        {
            case 2: 
                    session.g.FillRectangle(Brushes.Tomato, MousePosition.X, MousePosition.Y, 50, 100);
                break;
        }
        ModCLick = 1;
    }
当我启动程序时,单击不起任何作用,但如果我按下一个键(仅某些键),则会应用更改(我可以看到矩形)。为什么没有正确更新?
PS:不要担心case指令。

将图形实例存储在全局变量中是一个非常糟糕的主意。让它看起来像这样:

using (var g = Graphics.FromImage(pictureBox1.Image)) {
   g.FillRectangle(Brushes.Tomato, MousePosition.X, MousePosition.Y, 50, 100);
   pictureBox1.Invalidate();
}

Invalidate()调用就是您要查找的调用。PictureBox只能告诉您更改了图像属性,但不能告诉您更改了图像内容。

虽然有人告诉我不要担心,但您知道您的开关变量和上次赋值是不同的对象吗?不知道这是否重要。几乎,但我不认为这是问题所在。工作起来很有魅力!非常感谢你!