【问题标题】:Why when resizing the user control graph it's not really resized?为什么在调整用户控制图的大小时它并没有真正调整大小?
【发布时间】:2013-05-07 22:42:10
【问题描述】:

我的 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 秒左右才能生效。如果我要删除第二行:

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 中更改控件的自身大小?

【问题讨论】:

  • 一般来说,当我将鼠标移到控件上时,此图表用户控件将调整大小,并且当我将鼠标移出时,它的位置也会更改为屏幕中心用户控制图表区域将恢复到原来的位置和大小。
  • 也许我还需要自己调整用户控件的大小?不仅是图表?
  • Nikola 我尝试制作 graphChart1.Invalidate();就在 graphChart1.Size 线之后,但它并没有帮助只是让它变慢,直到事件发生变化,但问题与上述相同。
  • 现在检查答案。第一个答案是在您发布代码之前发布的,所以我将其删除。现在好多了。

标签: c#


【解决方案1】:

问题是您正在调整 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);
}

【讨论】:

  • 好的,我正在更新我的问题,现在用我现在所做的编辑它,它工作不好但工作但不好。
  • 抱歉,没有看到问题,我正在做其他事情。我很高兴能帮上忙。再见!
  • @NikolaDavidovic,我应该添加什么参考来使用 ChangeChartSize?
  • @VR17 您不必添加引用,而是实现更改图形大小的方法。
  • @NikolaDavidovic,这里的 graphChart1 是什么? chart1 是我的图表的名称
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    在我做的用户控件类代码中:

    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);
            }
    

    工作顺利。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-17
      • 1970-01-01
      • 2012-09-23
      • 2013-11-30
      • 2020-06-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多