2013-02-28 52 views
0

我有一个用户控制图中我的Form 1设计,这是调整它的代码:为什么在调整用户控件图形的大小时不会调整大小?

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

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

也试图与无效:

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

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

+0

一般来说,我想要做到这一点,当我用鼠标移动控制这个图表用户控件时,它将被调整大小,并且将它的位置改变到屏幕中心,然后当我将鼠标移出用户控制图表时将回到原来的位置和大小。 – user2065612 2013-02-28 22:20:05

+0

也许我还需要调整它自己的用户控件大小?而不仅仅是图表? – user2065612 2013-02-28 22:20:28

+0

尼古拉我试图让graphChart1.Invalidate();紧跟在graphChart1.Size行之后,但直到事件发生变化但它没有帮助才使其变慢,但是与上面相同的问题。 – user2065612 2013-02-28 22:27:42

回答

1

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

好吧即时更新我的​​问题,现在编辑它与我做了现在它不工作好,但工作,但不好。 – user2065612 2013-02-28 22:50:03

+0

尼古拉尝试了你的代码,请看我的问题更新。 – user2065612 2013-02-28 22:56:02

+0

好吧,它现在正在工作。 – user2065612 2013-02-28 23:02:45

0

随着graphChart1.Size =你调整你的容器,而不是图表在它之内。

最简单的解决方法可能是让chart1公开在控件中,而不是graphChart1.chart1.Size =

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

工作顺利。

相关问题