2013-02-28 50 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); 
     } 

工作順利。

相關問題