1

Form1 デザイナーにユーザー コントロール チャートがあり、サイズを変更するコードは次のとおりです。

private void graphChart1_MouseEnter(object sender, EventArgs e)
        {
            graphChart1.Size = new Size(600, 600);
        }

マウスをコントロール領域に移動すると、サイズが変更されて大きくなるのではなく、他のコントロールが削除されます。

これは、マウスをコントロールの上に移動する前の画像です。

ここに画像の説明を入力

これは、コントロールの上にマウスを移動したときの画像です。

ここに画像の説明を入力

これは、チャートがあるユーザー コントロールのコードです。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Web;
using System.Windows.Forms.DataVisualization.Charting;

namespace GatherLinks
{

    public partial class GraphChart : UserControl
    {
        public GraphChart()
        {
            InitializeComponent();
        }

        private double f(int i)
        {
            var f1 = 59894 - (8128 * i) + (262 * i * i) - (1.6 * i * i * i);
            return f1;
        }

        private void GraphChart_Load(object sender, EventArgs e)
        {
            chart1.Series.Clear();
            var series1 = new System.Windows.Forms.DataVisualization.Charting.Series
            {
                Name = "Series1",
                Color = System.Drawing.Color.Green,
                IsVisibleInLegend = false,
                IsXValueIndexed = true,
                ChartType = SeriesChartType.Line
            };

            this.chart1.Series.Add(series1);

            for (int i = 0; i < 100; i++)
            {
                series1.Points.AddXY(i, f(i));
            }
            chart1.Invalidate();
        }
    }
}

編集:

ユーザーコントロールクラスコードでこれを行いました:

public void ChangeChartSize(int width, int height)
{
            chart1.Size = new Size(width, height);
            chart1.Invalidate();
}

有効にするために追加chart1.Invalidate();する必要がありましたが、ユーザーコントロール内でチャートのサイズを変更しました。ユーザー コントロールは変更されませんでした。

したがって、Form1 マウスに入力して、graphChart1 のコントロール サイズも変更します。

private void graphChart1_MouseEnter(object sender, EventArgs e)
{
            graphChart1.ChangeChartSize(600, 600);
            graphChart1.Size = new Size(600, 600);
}

問題は、マウスをコントロールの上に移動したときに有効になるまでに、約20秒ほど時間がかかることです。2 行目を削除すると、次のようになります。

graphChart1.Size = new Size(600, 600); 

高速に動作しますが、コントロール内でのみチャートを変更しますが、コントロールのサイズは変更しません。

無効化でも試しました:

private void graphChart1_MouseEnter(object sender, EventArgs e)
{
            graphChart1.ChangeChartSize(600, 600);
            graphChart1.Size = new Size(600, 600);
            graphChart1.Invalidate();
}

しかし、それでも非常に遅いです。Form1 ではなく、ユーザー コントロール クラス コードでもコントロールのサイズを変更する必要があるのではないでしょうか。

4

3 に答える 3

2

問題は、GraphicChart (ユーザー コントロール) のサイズを変更しているが、Chart 自体のサイズを変更していないことです。そのためには、GraphChart クラスにメソッドを追加できます。これは、グラフのサイズを変更するメソッドです。

public void ChangeChartSize(int width, int height)
{
     chart1.Size = new Size(width, height);
}

そして、マウス入力イベントハンドラーで、次のようなものを呼び出すことができます:

void graphicChart1_MouseEnter(object sender, EventArgs e)
{
     graphChart1.ChangeChartSize(600, 600);
}
于 2013-02-28T22:22:25.470 に答える
0

私が行ったユーザーコントロールクラスのコードで:

public void ChangeChartSize(int width, int height)
        {
            this.Size = new Size(width, height);
            chart1.Size = new Size(width, height);
            chart1.Invalidate();
        }

Form1で私がした:

private void graphChart1_MouseEnter(object sender, EventArgs e)
        {
            graphChart1.ChangeChartSize(600, 600);
        }

スムーズに動作します。

于 2013-02-28T23:03:41.610 に答える
0

コンテナのサイズを変更してgraphChart1.Size =いますが、コンテナ内のチャートはサイズ変更していません。

最も簡単な回避策は、おそらくchart1コントロールで公開し、graphChart1.chart1.Size =代わりに実行することです。

于 2013-02-28T22:30:47.777 に答える