1

最大 12 個の異なるグラフを表示するグラフ プログラムを作成しています。すべてのグラフを同時に表示する必要があります

マウス入力でアクティブなグラフを変更できる必要があります。

次のようにチャートを作成します。

using (Graphics G = Graphics.FromImage(graph_canvas.Image))
{
    chart.draw_statics(G);
}
static_graph = graph_canvas.Image;

chart.draw_statics(G) には、凡例、グリッド、および 11 の非アクティブ グラフを描画するための関数がいくつか含まれています。

この画像を static_graph に保存します

ここまでは順調ですね

マウスが移動すると、マウス ポインターがグラフの色に変わり、マウス位置の座標が表示されるようになっています。

そのため、時間とメモリを節約するためにmousemoveで、保存した画像を取得し、すべてのグラフを再描画する代わりに、アクティブなグラフを描画します。

private void graph_canvas_MouseMove(object sender, MouseEventArgs e)
{
    Point mouse_pos = e.Location;
    chart.set_mouse_pos(mouse_pos);

    graph_canvas.Image = (Image)static_graph.Clone();
    using (Graphics G = Graphics.FromImage(graph_canvas.Image))
    {
        chart.draw_actives(G);
    }
    graph_canvas.Invalidate();
}


public void draw_actives(Graphics surface)
{
    G = surface;
    draw_mouse();
}

private void draw_mouse()
{
    G.DrawLine(mouse_pen, new PointF(mouse_pos.X - 10, mouse_pos.Y), new PointF(mouse_pos.X + 10, mouse_pos.Y));
    G.DrawLine(mouse_pen, new PointF(mouse_pos.X, mouse_pos.Y-10), new PointF(mouse_pos.X, mouse_pos.Y+10));
}

フォームが全画面表示の場合、エラー メッセージが表示されます

System.Drawing.dll で、タイプ 'System.OutOfMemoryException' の初回例外が発生しました

4

1 に答える 1