CreateGraphics():图形仅在重新调整大小时显示

时间:2016-05-11 10:15:29

标签: c# graphics

实例化表单。

     public TwoDPlot()
        {
            Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US", true);
            Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US", true);

            InitializeComponent();

            DrawCircle();
        }

绘制圆的方法。

private void DrawCircle()
        {
            var radius = 0.5 * ClientRectangle.Width;

            var height = ClientRectangle.Height - 0.1 * ClientRectangle.Height;

            var width = ClientRectangle.Width - 0.1 * ClientRectangle.Width;

            var scaledRadius = width > height ? radius * (height / radius) : radius * (width / radius);

            var xlocation = ClientRectangle.Width / 2.0 - scaledRadius * 0.5;

            var ylocation = ClientRectangle.Height / 2.0 - scaledRadius * 0.5;

            m_Graphics = CreateGraphics();

            m_Graphics?.Clear(DefaultBackColor);

            m_Graphics?.DrawEllipse(new Pen(Color.Red), new Rectangle((int)xlocation, (int)ylocation, (int)scaledRadius, (int)scaledRadius));

            m_Graphics.Dispose();
        }

例如,它显示空的形式,并在重新调整大小时显示圆圈。我希望在第一次出现时显示。

1 个答案:

答案 0 :(得分:1)

This is the direct correction:

private void TwoDPlot_Paint(object sender, PaintEventArgs e)
{
    DrawCircle(e.Graphics);
}


private void DrawCircle(Graphics m_Graphics)
{
    var radius = 0.5 * ClientRectangle.Width;
    var height = ClientRectangle.Height - 0.1 * ClientRectangle.Height;
    var width = ClientRectangle.Width - 0.1 * ClientRectangle.Width;
    var scaledRadius = width > height ? radius * (height / radius) : radius * (width / radius);
    var xlocation = ClientRectangle.Width / 2.0 - scaledRadius * 0.5;
    var ylocation = ClientRectangle.Height / 2.0 - scaledRadius * 0.5;

    m_Graphics.Clear(DefaultBackColor);
    m_Graphics.DrawEllipse(new Pen(Color.Red), new Rectangle((int)xlocation, (int)ylocation, (int)scaledRadius, (int)scaledRadius));
}

Note that to be more flexible you will want to move the variables maybe to class level variables or to parameters to the DrawCircle function..

When you have done that and changed the variables values you can trigger the Paint event by calling TwoDPlot.Invalidate().

The system will also call it whenever it needs to, e.g. upon many resize, maximize and other events..