Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.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
如何在Winform.Net 4.0图表范围栏(C#)中显示阴影区域_C#_.net_Winforms_Charts - Fatal编程技术网

如何在Winform.Net 4.0图表范围栏(C#)中显示阴影区域

如何在Winform.Net 4.0图表范围栏(C#)中显示阴影区域,c#,.net,winforms,charts,C#,.net,Winforms,Charts,我正在显示一个Winform.Net图表范围条形图,显示员工在一天中处理的票据。如果可以的话,我想在08:00到17:00之间的区域用浅绿色。我试着把一个系列的范围,但它不允许。我想我可以用后期绘制的方法来做,但我不知道如何找到绘制矩形的位置 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using Syst

我正在显示一个Winform.Net图表范围条形图,显示员工在一天中处理的票据。如果可以的话,我想在08:00到17:00之间的区域用浅绿色。我试着把一个系列的范围,但它不允许。我想我可以用后期绘制的方法来做,但我不知道如何找到绘制矩形的位置

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Linq;
using System.Data.Objects;
using System.Diagnostics;
using System.Data.SqlClient;
using System.Windows.Forms.DataVisualization.Charting;

namespace CWHelper
{
    public partial class DailyTimeEntryDisplay : CWHelper.BaseForm
    {
        Object dataLock = new object();
        public DailyTimeEntryDisplay(string member_ID)
        {
            InitializeComponent();
            mMember_ID = member_ID;
        }
        string mMember_ID;

        private void DailyTimeEntryDisplay_Load(object sender, EventArgs e)
        {
            DateTime minDate = new DateTime(1900, 1, 1);
            chart1.ChartAreas[0].AxisY.Minimum = minDate.ToOADate();
            chart1.ChartAreas[0].AxisY.Maximum = minDate.AddDays(1).ToOADate();
            chart1.ChartAreas[0].AxisY.Interval = 1;
            chart1.ChartAreas[0].AxisY.LabelStyle.Format = "HH:mm";
            chart1.ChartAreas[0].AxisY.LabelStyle.Interval = 1;
            chart1.ChartAreas[0].AxisY.LabelStyle.Angle = 45;
            chart1.ChartAreas[0].AxisY.IntervalType = System.Windows.Forms.DataVisualization.Charting.DateTimeIntervalType.Hours;

            chart1.ChartAreas[0].AxisX.LabelStyle.Interval = 1;
            chart1.ChartAreas[0].AxisX.Interval = 1;

            chart1.Series[0].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.RangeBar;
            chart1.Series[0].XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.String;
            chart1.Series[0].YValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.DateTime;

            double rangeStart = new DateTime(1900,1,1,8,0,0).ToOADate();
            double rangeEnd = new DateTime(1900,1,1,17,0,0).ToOADate();
            double[] range = new double[] {rangeStart,rangeEnd};

            DisplayData();
        }

        private void DisplayData()
        {
                try
                {

                    DateTime sd = dateTimePicker1.Value;
                    DateTime? dt = new DateTime(sd.Year, sd.Month, sd.Day);
                    cwwebapp_drsEntities dc = new cwwebapp_drsEntities();

                    var q = dc.GetTimeEntry(mMember_ID, dt);
                    var ql = q.ToList();
                    var chartData = (from x in ql
                                     select new { SR_Service_RecID = x.SR_Service_RecID != 0 ? x.SR_Service_RecID.ToString() : "Time Entry:",
                                         Time_Start = x.Time_Start.ToOADate(),
                                         Time_End = x.Time_End.ToOADate(),
                                         tooltip = x.Company_Name + " : " + x.Notes,
                                         summary = x.Summary
                                     }).ToList();


                    chart1.Series[0].Points.DataBind(chartData, "SR_Service_RecID", "Time_Start,Time_End", "Tooltip=tooltip,Label=summary");

                }
                catch (Exception ex)
                {
                    Debug.Print(ex.Message);
                    if (ex.InnerException != null)
                    {
                        Debug.Print(ex.InnerException.Message);
                    }
                }


        }




        private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
        {
            DisplayData();
        }

        private void LeftButton_Click(object sender, EventArgs e)
        {
            dateTimePicker1.Value = dateTimePicker1.Value.AddDays(-1);
        }

        private void RightButton_Click(object sender, EventArgs e)
        {
            dateTimePicker1.Value = dateTimePicker1.Value.AddDays(1);
        }

        private void ReloadButton_Click(object sender, EventArgs e)
        {
            DisplayData();
        }
    }
}

依我看,你不需要任何延迟的方法。Net图表允许您这样做。请尝试以下代码:

private void DailyTimeEntryDisplay_Load(object sender, EventArgs e)
{
    chart1.Palette = ChartColorPalette.None;
    chart1.PaletteCustomColors = new Color[] { Color.LightGreen };

    //DateTime minDate = new DateTime(1900, 1, 1);
    //chart1.ChartAreas[0].AxisY.Minimum = minDate.ToOADate();
    //chart1.ChartAreas[0].AxisY.Maximum = minDate.AddDays(1).ToOADate();

    chart1.ChartAreas[0].AxisY.Interval = 1;
    chart1.ChartAreas[0].AxisY.LabelStyle.Format = "HH:mm";
    chart1.ChartAreas[0].AxisY.LabelStyle.Interval = 1;
    chart1.ChartAreas[0].AxisY.LabelStyle.Angle = 45;
    chart1.ChartAreas[0].AxisY.IntervalType = System.Windows.Forms.DataVisualization.Charting.DateTimeIntervalType.Hours;

    chart1.ChartAreas[0].AxisX.LabelStyle.Interval = 1;
    chart1.ChartAreas[0].AxisX.Interval = 1;
    chart1.ChartAreas[0].AxisX.IntervalType = DateTimeIntervalType.Auto;

    chart1.Series[0].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.RangeColumn; // "RangeColumn" instead of "RangeBar"
    chart1.Series[0].XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.String;
    chart1.Series[0].YValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Time; // "Time" instead of "DateTime"

    DisplayData();
}

依我看,你不需要任何延迟的方法。Net图表允许您这样做。请尝试以下代码:

private void DailyTimeEntryDisplay_Load(object sender, EventArgs e)
{
    chart1.Palette = ChartColorPalette.None;
    chart1.PaletteCustomColors = new Color[] { Color.LightGreen };

    //DateTime minDate = new DateTime(1900, 1, 1);
    //chart1.ChartAreas[0].AxisY.Minimum = minDate.ToOADate();
    //chart1.ChartAreas[0].AxisY.Maximum = minDate.AddDays(1).ToOADate();

    chart1.ChartAreas[0].AxisY.Interval = 1;
    chart1.ChartAreas[0].AxisY.LabelStyle.Format = "HH:mm";
    chart1.ChartAreas[0].AxisY.LabelStyle.Interval = 1;
    chart1.ChartAreas[0].AxisY.LabelStyle.Angle = 45;
    chart1.ChartAreas[0].AxisY.IntervalType = System.Windows.Forms.DataVisualization.Charting.DateTimeIntervalType.Hours;

    chart1.ChartAreas[0].AxisX.LabelStyle.Interval = 1;
    chart1.ChartAreas[0].AxisX.Interval = 1;
    chart1.ChartAreas[0].AxisX.IntervalType = DateTimeIntervalType.Auto;

    chart1.Series[0].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.RangeColumn; // "RangeColumn" instead of "RangeBar"
    chart1.Series[0].XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.String;
    chart1.Series[0].YValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Time; // "Time" instead of "DateTime"

    DisplayData();
}

感谢代码简化了时间显示。PaletteCustomColors代码只会更改我的条形图的颜色。更改为范围列只会翻转x轴和y轴。不过,我希望只对背景的一部分进行着色。删除axisY最小值和最大值也会使24小时的时间停止显示,因此我不得不返回到我的原始代码。不管发生什么,我都想看一整天。谢谢你的代码简化了时间显示。PaletteCustomColors代码只会更改我的条形图的颜色。更改为范围列只会翻转x轴和y轴。不过,我希望只对背景的一部分进行着色。删除axisY最小值和最大值也会使24小时的时间停止显示,因此我不得不返回到我的原始代码。不管怎样我都想看一整天也许你想看看条纹。。看,也许你想看看条纹线。。看见