Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.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# 输入框阻止system.drawing_C#_Winforms_Inputbox - Fatal编程技术网

C# 输入框阻止system.drawing

C# 输入框阻止system.drawing,c#,winforms,inputbox,C#,Winforms,Inputbox,我试图在表单上编写此函数:用户单击表单,输入框要求用户输入名称,并在表单中用户单击的位置绘制一个圆圈。我现在面临的一个问题是,现在在显示输入框的位置绘制圆。实际上,我有一个函数可以重新绘制表单上的每个圆,但它仍然不起作用。这是我的密码: private void Form1_MouseClick(object sender, MouseEventArgs e) { string ProvinceName; System.Drawing.SolidBrush

我试图在表单上编写此函数:用户单击表单,输入框要求用户输入名称,并在表单中用户单击的位置绘制一个圆圈。我现在面临的一个问题是,现在在显示输入框的位置绘制圆。实际上,我有一个函数可以重新绘制表单上的每个圆,但它仍然不起作用。这是我的密码:

private void Form1_MouseClick(object sender, MouseEventArgs e)
    {
        string ProvinceName;
        System.Drawing.SolidBrush myBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Red);
        System.Drawing.Graphics formGraphics;
        formGraphics = this.CreateGraphics();

        formGraphics.FillEllipse(myBrush, new Rectangle(e.X, e.Y, 10, 10));

        ProvinceName = Microsoft.VisualBasic.Interaction.InputBox("郡名", "", "无名",100,100);

        provinces.Add(new province(ProvinceName, e.X, e.Y));

        listBox1.SelectedIndex = provinces.Count - 1;

        myBrush.Dispose();
        formGraphics.Dispose();
        PaintMap();// This is the function repaint every recorded clicked locations.

    }

仅仅画出来是不够的。每次重新绘制表单时,都需要重新绘制。第一步是覆盖OnPaint

protected override void OnPaint(PaintEventArgs e)
{
    base.OnPaint(e);

    // paint your circles here, when they need to be persisted 
    // e.Graphics.DrawRectangle(redPen, r);
}

显然,您需要跟踪需要绘制的内容,以及何时不再需要绘制,但是这应该可以让您开始了

我使用Bipmap存储绘制,然后使用绘制事件重新绘制表单。问题解决了。我认为当我直接使用“System.Drawing”时,我会在输入框上绘制。

那么就不要使用输入框。你可以为同一个任务构建一个类似的表单,这样你就可以将它放置在任何需要的地方,而不必费劲(并且不会清除当前的图形)。表单可以是无边界的,当你按Enter键时它可能会关闭。我假设
PaintMap()
方法在表单的
Paint
事件中重新绘制存储在
省份的
点和名称的整个集合。是否?formGraphics=this.CreateGraphics()-Winforms graphics基本规则#1:切勿使用
控件。CreateGraphics
!切勿尝试缓存
图形
对象!或者使用
图形g=graphics.FromImage(bmp)将bmp绘制到
位图中
或在控件的
绘制
事件中,使用
e.Graphics
参数..@TaW如果我使用绘制事件,我如何用鼠标控制绘制?你能给我看一下或给我一些链接来教我位图是如何工作的吗?我是初学者。使用鼠标事件来更改或扩展在绘制事件和校准中使用的数据我无效触发画图!我做了。结果更糟。输入框范围之外的圆圈都消失了。我把我的“paintmap()”函数放在OnPaint方法中。它仍然不起作用。