为什么在调整用户控件图的大小时,它实际上没有调整大小?

时间:2013-02-28 22:18:40

标签: c#

我的Form1设计器中有一个用户控制图,这是调整它的代码:

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

当我将鼠标移动到控制区域时,它没有调整大小,使其变大,但删除了其他一些控件。

这是我将鼠标移到控件上之前的图像:

enter image description here

当我将鼠标移到控件上时,这是一张图像:

enter image description here

这是图表所在的用户控件的代码:

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秒左右的时间,直到它将鼠标移到控件上时生效。如果我将删除第二行:

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

它会很快工作,但它只会在控件内更改图表,但不会改变控件的大小。

也尝试使用invalidate:

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

但仍然很慢。也许我需要在用户控件类代码中而不是在Form1中更改自身大小的控件?

3 个答案:

答案 0 :(得分:2)

问题是您要调整GraphicChart(您的用户控件)的大小,而不是图表本身。您可以在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);
}

答案 1 :(得分:0)

使用graphChart1.Size =您要调整容器的大小,而不是其中的图表。

最简单的解决方法可能是在控件中公开chart1并改为graphChart1.chart1.Size =

答案 2 :(得分: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);
        }

顺利工作。