我的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);
它会很快工作,但它只会在控件内更改图表,但不会改变控件的大小。
也尝试使用invalidate:
private void graphChart1_MouseEnter(object sender, EventArgs e)
{
graphChart1.ChangeChartSize(600, 600);
graphChart1.Size = new Size(600, 600);
graphChart1.Invalidate();
}
但仍然很慢。也许我需要在用户控件类代码中而不是在Form1中更改自身大小的控件?
答案 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);
}
顺利工作。