第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何在 winforms 中制作具有重疊點(diǎn)的甘特圖

如何在 winforms 中制作具有重疊點(diǎn)的甘特圖

C#
BIG陽(yáng) 2023-09-16 17:30:34
有一個(gè)時(shí)間間隔,例如 8:00-17:00。在這個(gè)時(shí)間間隔內(nèi),任務(wù)會(huì)發(fā)生多次,例如 9:00-9:20、11:00-12:00、13:00-13:20。I想要在 winforms 中制作一個(gè)圖表來(lái)顯示任務(wù)何時(shí)發(fā)生,如下所示。那么我可以用 DEV 甘特圖來(lái)做到這一點(diǎn)嗎?或者我可以使用任何控件來(lái)實(shí)現(xiàn)它嗎?我想在winforms中做到這一點(diǎn)。
查看完整描述

2 回答

?
DIEA

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超2個(gè)贊

使用 MSChart 和 ChartType RangeBar,這非常容易。

這是一個(gè)例子:

https://img1.sycdn.imooc.com//650576080001616c06450126.jpg

要獲得此結(jié)果,您需要

  • 從數(shù)據(jù)工具箱添加 MSChart 控件

  • 添加 using 子句:using System.Windows.Forms.DataVisualization.Charting;

  • 然后你可以設(shè)置圖表的樣式。

  • ..也許可以設(shè)置大小限制

這是設(shè)置它的代碼:

void setUpGantt(Chart chart)

{

    chart.Series.Clear();

    Series s = chart.Series.Add("gantt");

    s.ChartType = SeriesChartType.RangeBar;

    s.YValueType = ChartValueType.DateTime;

    s.AxisLabel = "";

    s.IsVisibleInLegend = false;

    Axis ax = chart.ChartAreas[0].AxisX;

    Axis ay = chart.ChartAreas[0].AxisY;

    ax.MajorGrid.Enabled = false;

    ax.MajorTickMark.Enabled = false;

    ax.LabelStyle.Format = " ";

    ax.Enabled = AxisEnabled.False;

    ay.LabelStyle.Format = "HH:mm";

    ay.MajorGrid.Enabled = false;

    ay.MajorTickMark.Enabled = false;

    ay.LineColor = chart.BackColor;

    limitGantt(chart, "8:00", "17:00");

}


void limitGantt(Chart chart, string start, string end)

{

    Axis ax = chart.ChartAreas[0].AxisX;

    ax.Minimum = 0.5;  // we have only one slot

    ax.Maximum = 1.5;  // the bar is centered on its value (1)


    Axis ay = chart.ChartAreas[0].AxisY;

    ay.Minimum = fromTimeString(start).ToOADate();  // we exclude all times..

    ay.Maximum = fromTimeString(end).ToOADate();    // ..outside a given range

}

請(qǐng)注意,我使用時(shí)間strings是為了方便。當(dāng)然你也可以改為DateTimes直接使用。為了將時(shí)間轉(zhuǎn)換string為DateTime當(dāng)天的時(shí)間,使用此函數(shù):


DateTime fromTimeString(string time)

{

    var p = time.Split(':');

    int sec = p.Length == 3 ? Convert.ToInt16(p[2]) : 0;

    TimeSpan t = new TimeSpan(Convert.ToInt16(p[0]), Convert.ToInt16(p[1]), sec);

    return DateTime.Today.Add(t);

}

請(qǐng)注意,所有代碼都缺少任何檢查!


要添加任務(wù),請(qǐng)使用此方法:


void addGanttTask(Series s, string start, string end, Color c, int slot )

{

    DateTime start_ = fromTimeString(start);

    DateTime end_ = fromTimeString(end);

    int pt = s.Points.AddXY(slot, start_, end_);

    s.Points[pt].Color = c;

}

請(qǐng)注意,它包含一個(gè)系列和一個(gè)“插槽”。這些槽用于 x 值,在您的情況下,這些值都是相同的。但人們可以很容易地想象出一個(gè)更復(fù)雜的規(guī)劃器,其中有多個(gè)欄用于多種資源,例如不同的房間或團(tuán)隊(duì)。


Series 參數(shù)將允許覆蓋第二個(gè)系列,就像您在MSDN 的這個(gè)很好的示例中看到的那樣。


這是我填寫圖表的方式:


setUpGantt(chart1);


Series s = chart1.Series[0];

addGanttTask(s, "8:00", "17:00", Color.LimeGreen, 1);

addGanttTask(s, "9:00", "9:20", Color.DarkSlateBlue, 1);

addGanttTask(s, "11:00", "12:00", Color.DarkSlateBlue, 1);

addGanttTask(s, "13:00", "13:20", Color.DarkSlateBlue, 1);

請(qǐng)注意,不同的范圍可能會(huì)重疊并且可能會(huì)相互隱藏。在我們的示例中,首先添加綠色條,其他條位于頂部。在 MSDN 示例中,您可以看到黃色條如何變窄以保持其下方的條可見(jiàn)。它們屬于第二系列。


要更改條形的寬度,請(qǐng)使用


series.SetCustomProperty("PixelPointWidth",  "15");


查看完整回答
反對(duì) 回復(fù) 2023-09-16
?
三國(guó)紛爭(zhēng)

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超7個(gè)贊

這是 DevExpress.XtraCharts.ChartControl 和 ViewType RangeBar 的示例


首先向窗體添加一個(gè)DevExpress.XtraCharts.ChartControl。這是我填寫圖表的方式


        rangeBarChart.Series.Clear();


        // Create two range bar series.

        Series series1 = new Series("Task1", ViewType.RangeBar);

        Series series2 = new Series("Task2", ViewType.RangeBar);


        series1.CrosshairLabelPattern = "{S}:{V1:HH:mm}--{V2:HH:mm}";

        series2.CrosshairLabelPattern = "{S}:{V1:HH:mm}--{V2:HH:mm}";



        //Add values to series

        series1.ValueScaleType = ScaleType.DateTime;

        series2.ValueScaleType = ScaleType.DateTime;

        series1.Points.Add(new SeriesPoint("A", Convert.ToDateTime("2019-08-24 8:00"), Convert.ToDateTime("2019-08-24 17:00")));

        series2.Points.Add(new SeriesPoint("A", Convert.ToDateTime("2019-08-24 9:00"), Convert.ToDateTime("2019-08-24 10:00")));

        series2.Points.Add(new SeriesPoint("A", Convert.ToDateTime("2019-08-24 13:00"), Convert.ToDateTime("2019-08-24 14:00")));


        // Add both series to the chart.

        rangeBarChart.Series.AddRange(new Series[] { series1, series2 });


        ((XYDiagram)rangeBarChart.Diagram).Rotated = true;

結(jié)果顯示如下:

https://img1.sycdn.imooc.com//6505762600010bb013820245.jpg

查看完整回答
反對(duì) 回復(fù) 2023-09-16
  • 2 回答
  • 0 關(guān)注
  • 167 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)