2013-02-12 58 views
0

我使用ZedGraph控件(zgc)創建單個堆疊條形圖並將它們顯示在單個堆疊列中,如下圖所示。ZedGraph - 強制所有圖形窗格大小相同

我遇到的問題是我無法控制顯示在控件中的窗格數量,因爲這是由列表框中的項目數決定的。看起來控件的默認屬性允許圖形窗格的高度根據控件中顯示的窗格數量而改變。

zgc設置爲dock =填充在設置爲dock = fill的表格控件中。我想強制圖形窗格是一個靜態高度,並且當圖形窗格的數量超過窗體的高度時,需要在面板中出現一個垂直滾動條。我該如何去實現這個目標?我創建和填充zgc的代碼發佈在圖片下方。

enter image description here

Private Sub CreateGraph(ByVal dat As Date) 

    Dim count As Integer = 0 
    Dim master As MasterPane = zgc.MasterPane 
    master.Fill = New Fill(Color.FromArgb(180, 180, 180), Color.FromArgb(180, 180, 180), 45.0F) 
    master.PaneList.Clear() 
    master.Title.IsVisible = True 
    master.Title.Text = "Workload for " & dat.ToShortDateString() 
    master.Margin.All = 10 
    master.InnerPaneGap = 5 
    master.IsCommonScaleFactor = False 

    For Each mach As String In lbMach.Items 
     rowCount = 0 
     Dim myPaneT As New GraphPane(New Rectangle(10, 10, 10, 10), "", "Time in Minutes", mach) 
     myPaneT.Fill.IsVisible = False 
     myPaneT.Chart.Fill = New Fill(Color.White, Color.White, 45.0F) 
     myPaneT.BaseDimension = 3.0F 
     myPaneT.XAxis.Title.IsVisible = False 
     myPaneT.XAxis.Scale.IsVisible = False 

     myPaneT.XAxis.Scale.Min = 0 
     myPaneT.XAxis.Scale.Max = (MeiSettings.WrkHrs * 60) 
     myPaneT.Legend.IsVisible = True 
     myPaneT.Border.IsVisible = False 
     myPaneT.Title.IsVisible = False 
     myPaneT.XAxis.MajorTic.IsOutside = False 
     myPaneT.XAxis.MinorTic.IsOutside = False 
     myPaneT.XAxis.MajorGrid.IsVisible = True 
     myPaneT.XAxis.MinorGrid.IsVisible = True 
     myPaneT.Margin.All = 1 

     If count = lbMach.Items.Count - 1 Then 
      myPaneT.XAxis.Title.IsVisible = True 
      myPaneT.XAxis.Scale.IsVisible = True 
      myPaneT.Margin.Bottom = 10 
     End If 

     If count > 0 Then 
      myPaneT.YAxis.Scale.IsSkipLastLabel = True 
     End If 

     myPaneT.YAxis.MinSpace = 20 
     myPaneT.Y2Axis.MinSpace = 20 

     Dim dt As DataTable = ItemsByMachineDT(mach, dat) 
     Dim myCurve As BarItem 

     If dt.Rows.Count > 0 Then 
      Dim profName As String = Nothing 
      Dim timeDur() As Double 
      For Each dr As DataRow In dt.Rows 
       If profName = dr("PRO").ToString() Then 
        timeDur = {((Convert.ToDouble(dr("QTY"))/Convert.ToDouble(dr("MPM"))))} 
       Else 
        timeDur = {((Convert.ToDouble(dr("QTY"))/Convert.ToDouble(dr("MPM")) + Convert.ToDouble(dr("Time"))))} 
       End If 

       myCurve = myPaneT.AddBar(dr("JOB").ToString & " - " & dr("PRO").ToString(), timeDur, Nothing, BarColor(rowCount)) 

       If MeiSettings.IsGradient = True Then 
        myCurve.Bar.Fill = New Fill(BarColor(rowCount), Color.White, BarColor(rowCount), 90.0F) 
       Else 
        myCurve.Bar.Fill = New Fill(BarColor(rowCount), BarColor(rowCount), BarColor(rowCount), 90.0F) 
       End If 

       rowCount += 1 
       profName = dr("PRO").ToString() 
      Next 
     End If 

     myPaneT.YAxis.MajorTic.IsBetweenLabels = True 
     myPaneT.YAxis.Type = AxisType.Text 
     myPaneT.BarSettings.Type = BarType.Stack 
     myPaneT.BarSettings.Base = BarBase.Y 
     master.Add(myPaneT) 
     count += 1 
    Next 

    zgc.IsShowPointValues = True 

    Using g As Graphics = Me.CreateGraphics() 
     master.SetLayout(g, PaneLayout.SingleColumn) 
     master.AxisChange(g) 
    End Using 

End Sub 
+0

爲了澄清事情,我已經玩過了父面板和zedgraph控件的對接。我已經將父面板設置爲autoscroll = true,並將zgc設置爲dock = top。我曾嘗試根據圖表中顯示的窗格數量設置zgc高度。只要滾動進行,就可以按預期工作,但不管控件的高度如何,圖形窗格大小仍然不一致。所以,我仍然試圖找出如何爲每個圖形窗格設置特定的高度。 – user1017477 2013-02-13 13:59:54

回答

0

得到控制每個GraphPane:

GraphPane temp = zgc.MasterPane.PaneList.ElementAt(ind); //ind => index of the graphpane in zedgraphcontrol 

設置靜態高度ñ寬度ZedgraphControl:

zgc.Size = new Size(Width,Height); 

設置滾動條ZedgraphControl的知名度:

zgc.IsShowHScrollBar = true; 
    zgc.IsShowVScrollBar = true;