Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.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中的窗体加载上绘制椭圆#_C#_Paint_Form Load_Drawellipse - Fatal编程技术网

C# 无法在c中的窗体加载上绘制椭圆#

C# 无法在c中的窗体加载上绘制椭圆#,c#,paint,form-load,drawellipse,C#,Paint,Form Load,Drawellipse,我试图在一个图片框中画一些椭圆,该图片框在c#的formload上包含一个PNG。当我执行下面的代码时,我看到我的省略号有半秒钟,然后我再也看不到它们了 当我点击我的picturebox时,我可以画一个椭圆,但是当我最小化形状时,它们就不再出现了 我已经读到,您不应该将绘图代码放在formload中,而应该放在OnPaint方法中,这就是我所做的。我不知道该试什么了。非常感谢。(请注意,我留下了一些代码注释,以显示我的尝试) 公共部分类FormParterre:Form { 图形g; 浮点数=1

我试图在一个图片框中画一些椭圆,该图片框在c#的formload上包含一个PNG。当我执行下面的代码时,我看到我的省略号有半秒钟,然后我再也看不到它们了

当我点击我的picturebox时,我可以画一个椭圆,但是当我最小化形状时,它们就不再出现了

我已经读到,您不应该将绘图代码放在formload中,而应该放在OnPaint方法中,这就是我所做的。我不知道该试什么了。非常感谢。(请注意,我留下了一些代码注释,以显示我的尝试)

公共部分类FormParterre:Form
{
图形g;
浮点数=15;
//刷子胭脂=新刷子(刷子为红色);
ReservationBilletSiegeDAO ReservationBilletSiegeDAO=新的ReservationBilletSiegeDAO();
SiegeDAO SiegeDAO=新的SiegeDAO();
列出围攻名单;
列出苏格兰皇家银行;
ReservationSquare ReservationSquare=新的ReservationSquare();
ReservationBilletSiege ReservationBilletSiege;
固刷半透刷;
公共广场()
{
初始化组件();
pictureBox1.Image=新位图(“./parterre.png”);
g=pictureBox1.CreateGraphics();
}
公共广场(保留)
{
ReservationSquare=rb;
pictureBox1.Image=新位图(“./parterre.png”);
g=pictureBox1.CreateGraphics();
初始化组件();
}
PaintBackground上受保护的覆盖无效(PaintEventArgs e)
{
//什么都不做!防止闪烁
}
受保护的覆盖无效OnPaint(PaintEventArgs e)
{
sieges=siegeDAO.readAll();
rbs=reservationBilletSiegeDAO.readAll();
foreach(rbs中的ReservationBilletSiege reservationBilletSiegeTMP)
{
WriteLine(reservationBilletSiegeTMP.toString());
intx=siegeDAO.read(reservationBilletSiegeTMP.idSiege).xValeur;
int y=siegeDAO.read(reservationBilletSiegeTMP.idSiege).yValeur;
浮动xx=(浮动)x;
浮动yy=(浮动)y;
控制台写入线(“lex:+xx”);
控制台写入线(“ley:+yy”);
/*e、 图形。圆角矩形(新的SolidBrush(背景色),例如ClipRectangle)*/
g、 FillEllipse(新的SolidBrush(Color.FromArgb(128,0,0,255)),xx-circleSize/2,yy-circleSize/2,circleSize,circleSize);
}
}
私有无效图片单击(对象发送方,事件参数e)
{  
MouseEventArgs me=(MouseEventArgs)e;
txtX.Text=me.X.ToString();
txtY.Text=me.Y.ToString();
Console.WriteLine(“单击”);
g、 FillEllipse(新的SolidBrush(Color.FromArgb(128,0,0,255)),float.Parse(txtX.Text)-circleSize/2,float.Parse(txtY.Text)-circleSize/2,circleSize,circleSize);
}
显示了私有void FormParterre_(对象发送方、事件参数e)
{
}
私有void FormParterre_加载(对象发送方,事件参数e)
{
/*sieges=siegeDAO.readAll();
//semiTransBrush=新的SolidBrush(Color.FromArgb(128,0,0,255));
rbs=reservationBilletSiegeDAO.readAll();
foreach(rbs中的ReservationBilletSiege reservationBilletSiegeTMP)
{
WriteLine(reservationBilletSiegeTMP.toString());
intx=siegeDAO.read(reservationBilletSiegeTMP.idSiege).xValeur;
int y=siegeDAO.read(reservationBilletSiegeTMP.idSiege).yValeur;
浮动xx=(浮动)x;
浮动yy=(浮动)y;
控制台写入线(“lex:+xx”);
控制台写入线(“ley:+yy”);
g、 FillEllipse(新的SolidBrush(Color.FromArgb(128,0,0,255)),xx-circleSize/2,yy-circleSize/2,circleSize,circleSize);
}*/
}
}

您需要使用传递给您的
PaintEventArgs.Graphics
属性,在
OnPaint
方法中进行绘制。如果要在
PictureBox
上绘制,可以尝试订阅其
paint
事件并在那里绘制

这对我很有用:

public void Form1()
{
    InitializeComponent();

    pictureBox1.Paint += pictureBox1_Paint;
}

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
    e.Graphics.FillEllipse(Brushes.Red, pictureBox1.ClientRectangle);
}

您需要使用传递给您的
PaintEventArgs.Graphics
属性在
OnPaint
方法中绘制。如果要在
PictureBox
上绘制,可以尝试订阅其
paint
事件并在那里绘制

这对我很有用:

public void Form1()
{
    InitializeComponent();

    pictureBox1.Paint += pictureBox1_Paint;
}

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
    e.Graphics.FillEllipse(Brushes.Red, pictureBox1.ClientRectangle);
}

不要使用
CreateGraphics
。请不要使用
CreateGraphics
。这听起来很愚蠢,但我该如何“使用Visual Studio Designer订阅PictureBox绘画活动”?选择PictureBox。在属性窗格(默认情况下为右下角)中,单击“闪电”图标。找到“绘制”条目,然后在其右侧的空白处双击。经过编辑,还可以显示订阅事件的基于代码的方式。谢谢Trevor的帮助。现在,在formload上,我看到了我的椭圆,但是当我点击一个区域来创建一个椭圆时,它会出现半秒钟,然后消失。我的鼠标点击代码中有些地方不正确。您需要跟踪所有需要绘制的椭圆。当需要重画场景时,需要在正在绘制的控件上调用
Invalidate()
,它将调用绘制事件。在绘制事件中,您需要绘制希望看到的所有椭圆。每次调用Paint时,整个画布都会被完全擦除,因此需要重新绘制所有内容。也许可以创建一个类来表示椭圆,它存储颜色和它所在的矩形?然后创建该类的列表,并在每个绘制事件上绘制它。这听起来很愚蠢,但如何使用Visual Studio Designer订阅PictureBox绘制事件?选择PictureBox。在属性窗格(默认情况下为右下角)中,单击“闪电”图标。找到“绘制”条目并双击其右侧的空间。编辑