Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 添加数据时图表控件X轴滚动条移动_C#_Visual Studio 2010_Mschart - Fatal编程技术网

C# 添加数据时图表控件X轴滚动条移动

C# 添加数据时图表控件X轴滚动条移动,c#,visual-studio-2010,mschart,C#,Visual Studio 2010,Mschart,更新了代码,让您更好地了解正在发生的事情,并允许更快地加载数据。 我还没有在网上看到任何回答这个问题的东西 我在C#应用程序(VisualStudio2010Express,如果有区别的话)上有一个MS图表控件。数据以缓慢的实时速率加载(每秒一次)。我的目的是一次显示6分钟的数据,如果需要,可以滚动到另一页数据。我希望数据从左侧填充图表。当数据添加到图表中时,滚动条和X轴图例也会移动,因此我只能看到最新的数据点。我必须向左滚动才能看到以前的数据——当添加新数据点时,滚动条会向后跳。我希望滚动条保

更新了代码,让您更好地了解正在发生的事情,并允许更快地加载数据。 我还没有在网上看到任何回答这个问题的东西

我在C#应用程序(VisualStudio2010Express,如果有区别的话)上有一个MS图表控件。数据以缓慢的实时速率加载(每秒一次)。我的目的是一次显示6分钟的数据,如果需要,可以滚动到另一页数据。我希望数据从左侧填充图表。当数据添加到图表中时,滚动条和X轴图例也会移动,因此我只能看到最新的数据点。我必须向左滚动才能看到以前的数据——当添加新数据点时,滚动条会向后跳。我希望滚动条保持在一个位置(左边缘),除非我移动它。我的表单上有一个1秒的计时器,每个时间周期都会添加新的数据

我希望这足够了。有什么帮助吗

初始化图表控件的代码:

DateTime startTime = DateTime.Now;
DateTime endTime = startTime.AddMinutes(6);
DateTime maxTime = startTime.AddMinutes(24);
// Bind the chart to the list. 
chartAssociateProductivity.DataSource = Globals.listKohlsPerformanceDataSource;

chartAssociateProductivity.ChartAreas["ChartArea1"].CursorX.AutoScroll = true; // enable autoscroll
chartAssociateProductivity.ChartAreas["ChartArea1"].CursorX.IsUserEnabled = false;
chartAssociateProductivity.ChartAreas["ChartArea1"].CursorX.IsUserSelectionEnabled = false;

chartAssociateProductivity.ChartAreas["ChartArea1"].AxisX.Minimum = startTime.ToOADate();
chartAssociateProductivity.ChartAreas["ChartArea1"].AxisX.Maximum = endTime.ToOADate();
chartAssociateProductivity.ChartAreas["ChartArea1"].AxisX.ScaleView.Zoomable = true;
chartAssociateProductivity.ChartAreas["ChartArea1"].AxisX.ScrollBar.IsPositionedInside = true;
chartAssociateProductivity.ChartAreas["ChartArea1"].AxisX.ScaleView.Zoom(startTime.ToOADate(), 6, DateTimeIntervalType.Minutes);
chartAssociateProductivity.ChartAreas["ChartArea1"].AxisX.ScaleView.Position = 0;// startTime.ToOADate();
chartAssociateProductivity.ChartAreas["ChartArea1"].AxisX.MinorTickMark.Enabled = true;
// disable zoom-reset button (only scrollbar's arrows are available)
chartAssociateProductivity.ChartAreas["ChartArea1"].AxisX.ScrollBar.ButtonStyle = ScrollBarButtonStyles.SmallScroll;

// set scrollbar small change to blockSize (e.g. 100)
chartAssociateProductivity.ChartAreas["ChartArea1"].AxisX.ScaleView.SmallScrollSize = 100;
添加数据的代码(例如,我将添加常量数据):

数据结构:

public class PerformanceRecord
{
    int bagCount, goal;
    public PerformanceRecord(int bagCount, int goal)
    {
        this.bagCount = bagCount;
        this.goal = goal;
    }
    public int BagCount
    {
        get { return bagCount; }
        set { bagCount = value; }
    }
    public int Goal
    {
        get { return goal; }
        set { goal = value; }
    }
}

// Create a list. 
public static List<PerformanceRecord> listPerformanceDataSource = new List<PerformanceRecord>();
公共类性能记录
{
国际袋数,目标;
公共绩效记录(整数包数、整数目标)
{
this.bagCount=bagCount;
这个。目标=目标;
}
公共整数包数
{
获取{return bagCount;}
设置{bagCount=value;}
}
公共int目标
{
获取{返回目标;}
设置{goal=value;}
}
}
//创建一个列表。
公共静态列表listPerformanceDataSource=新列表();

您必须创建一个chartArea实例,并使用其轴位置

Hm,缺少一些东西,才能重现此结果。首先,我们没有
综述
(如果有关系的话?),添加数据的代码也不容易理解(至少对我来说是这样)我试图通过改变和扭曲事物来繁衍后代的努力没有成功。一旦我把滚动条设置到左边,它就停在那里了。复制问题的另一个问题显然是时间框架:如果需要几个小时(甚至“仅仅”几分钟)才能看到问题,那么没有人能够测试代码。。你能发布一个修改过的版本吗,它是独立的,并且是可复制的?(当你试着去做的时候,也许问题会解决…;-)谢谢你的关注。今天我将尝试更新帖子。帖子更新了更详细的信息,而且运行速度更快。关于图表控件,我需要包括哪些内容?我仍然看到这个问题。我想(但不是100%确定)这就是这个控件的工作方式,这个功能无法关闭。无论何时添加新数据,您都有机会以编程方式滚动回上一个位置。但那时屏幕可能会闪烁。也许当您使用Invalidate方法时,您可以获得一些可以接受的结果,但恐怕没有真正简单的解决方案;有两个问题,显然Kohls只是一个例子,但是数据绑定在图表中是如何定义的?它到底是什么类型的?
public class PerformanceRecord
{
    int bagCount, goal;
    public PerformanceRecord(int bagCount, int goal)
    {
        this.bagCount = bagCount;
        this.goal = goal;
    }
    public int BagCount
    {
        get { return bagCount; }
        set { bagCount = value; }
    }
    public int Goal
    {
        get { return goal; }
        set { goal = value; }
    }
}

// Create a list. 
public static List<PerformanceRecord> listPerformanceDataSource = new List<PerformanceRecord>();
ChartArea chartArea=new ChartArea();
chartArea = chart1.ChartAreas[series.ChartArea]; 
int scrollBarVal=chartArea.AxisX.ScaleView.Position;