バージョン

展開

このトピックは、 UltraPieChart コントロールの選択および展開ビヘイビアを実装する方法を説明します。トピックの最後で、完全なコード例を提供します。

トピックは以下のとおりです。

概要

UltraPieChart コントロールは個々の円スライスの選択と展開 だけでなく、選択状態を変更しカスタム ロジックを実装することを可能にする SliceClick イベント をサポートします。

プレビュー

piechart explosion.png

図 1: コード例で実装された UltraPieChart

要件

このトピックは、ユーザーが データ バインディング トピックを既に読んでいることを前提とし、初めにそのコードを使用します。

概要

  1. 各プロパティとイベント ハンドラーを構成します。

  2. イベント ハンドラーの実装

  3. (オプション) 結果の検証

手順

  1. 各プロパティとイベント ハンドラーを構成します。

データ バインディング トピックからのコードを開始ポイントにして、 AllowSliceSelection および AllowSliceExplosion のプロパティを True に設定して、pieChart_SliceClick をマウス クリックのイベント ハンドラーとして設定して、選択と展開を有効します。

C# の場合:

var pieChart = new UltraPieChart
            {
                Dock = DockStyle.Fill,
                LabelMemberPath = "Label",
                ValueMemberPath = "Value",
                AllowSliceSelection="True",
                AllowSliceExplosion="True",
                DataSource = new Data(),
            };
            this.Controls.Add(pieChart);

VB の場合:

Dim pieChart = New UltraPieChart() With { _
            .Dock = DockStyle.Fill, _
            .LabelMemberPath = "Label", _
            .ValueMemberPath = "Value", _
            .AllowSliceSelection = "True", _
            .AllowSliceExplosion = "True", _
            .DataSource = New Data() _
                }
  1. イベント ハンドラーの実装

SliceClick でスライスの選択と展開状態を切り替えます。

C# の場合:

void pieChart_SliceClick(object sender, SliceClickEventArgs e)
       {
           UltraPieChart pieChart = sender as UltraPieChart;
           e.IsExploded = !e.IsExploded;
       }

Visual Basic の場合:

Private Sub pieChart_SliceClick(sender As Object, e As SliceClickEventArgs)
       Dim pieChart As UltraPieChart = TryCast(sender, UltraPieChart)
       e.IsExploded = Not e.IsExploded
       e.IsSelected = Not e.IsSelected
       Me.ultraLabel1.Text = "Selected Slices:" + Environment.NewLine
       For Each index As Integer In pieChart.SelectedSlices
           Dim label As String = DirectCast(pieChart.DataSource, ObservableCollection(Of DataItem))(index).Label
           Me.ultraLabel1.Text += label + Environment.NewLine
       Next
   End Sub
  1. (オプション) 結果を確認します

結果を検証するために、アプリケーションを実行します。円チャート コントロールは、適切なスライス外側の選択および展開によって SliceClick イベントに応答します。現在選択されているスライスのリストは、左上角でも保持されます(上図 1)

全コード例

以下は、コンテキストに実装された完全なコード例です。

コード ビハインド

C# の場合:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    UltraPieChart pieChart;
    UltraItemLegend legend;
    private void Form1_Load(object sender, EventArgs e)
    {
        pieChart = new UltraPieChart
        {
            Dock = DockStyle.Fill,
            LabelMemberPath = "Label",
            ValueMemberPath = "Value",
            DataSource = new Data(),
        };
        this.Controls.Add(pieChart);
        legend = new UltraItemLegend
        {
            Dock = DockStyle.Right,
            Height = 500
        };
        this.Controls.Add(legend);
        this.pieChart.Legend = legend;
        this.legend.BringToFront();
        pieChart.OthersCategoryThreshold = 2;
        pieChart.OthersCategoryType = OthersCategoryType.Number;
        pieChart.OthersCategoryText = "Others";
        pieChart.SliceClick += pieChart_SliceClick;
    }
    void pieChart_SliceClick(object sender, SliceClickEventArgs e)
    {
        UltraPieChart pieChart = sender as UltraPieChart;
        e.IsExploded = !e.IsExploded;
    }
}
public class DataItem
{
    public string Label { get; set; }
    public double Value { get; set; }
}
public class Data : ObservableCollection<DataItem>
{
    public Data()
    {
        Add(new DataItem { Label = "Item 1", Value = 5 });
        Add(new DataItem { Label = "Item 2", Value = 6 });
        Add(new DataItem { Label = "Item 3", Value = 3 });
        Add(new DataItem { Label = "Item 4", Value = 7 });
        Add(new DataItem { Label = "Item 5", Value = 1 });
        Add(new DataItem { Label = "Item 6", Value = 1 });
        Add(new DataItem { Label = "Item 7", Value = 1 });
        Add(new DataItem { Label = "Item 8", Value = 1 });
        Add(new DataItem { Label = "Item 9", Value = 1 });
    }
}

VB の場合:

Partial Public Class Form1
    Inherits Form
    Public Sub New()
        InitializeComponent()
    End Sub
    Private pieChart As UltraPieChart
    Private legend As UltraItemLegend
    Private Sub Form1_Load(sender As Object, e As EventArgs)
                        pieChart = New UltraPieChart() With { _
                                .Dock = DockStyle.Fill, _
                                .LabelMemberPath = "Label", _
                                .ValueMemberPath = "Value", _
                                .DataSource = New Data() _
                        }
        Me.Controls.Add(pieChart)
        Me.ultraLabel1.BringToFront()
                        legend = New UltraItemLegend() With { _
                                .Dock = DockStyle.Right, _
                                .Height = 500 _
                        }
        Me.Controls.Add(legend)
        Me.pieChart.Legend = legend
        Me.legend.BringToFront()
        pieChart.OthersCategoryThreshold = 2
        pieChart.OthersCategoryType = OthersCategoryType.Number
        pieChart.OthersCategoryText = "Others"
        AddHandler pieChart.SliceClick, AddressOf pieChart_SliceClick
    End Sub
    Private Sub pieChart_SliceClick(sender As Object, e As SliceClickEventArgs)
        Dim pieChart As UltraPieChart = TryCast(sender, UltraPieChart)
        e.IsExploded = Not e.IsExploded
    End Sub
End Class
Public Class DataItem
    Public Property Label() As String
        Get
            Return m_Label
        End Get
        Set(value As String)
            m_Label = Value
        End Set
    End Property
    Private m_Label As String
    Public Property Value() As Double
        Get
            Return m_Value
        End Get
        Set(value As Double)
            m_Value = Value
        End Set
    End Property
    Private m_Value As Double
End Class
Public Class Data
    Inherits ObservableCollection(Of DataItem)
    Public Sub New()
                        Add(New DataItem() With { _
                                .Label = "Item 1", _
                                .Value = 5 _
                        })
                        Add(New DataItem() With { _
                                .Label = "Item 2", _
                                .Value = 6 _
                        })
                        Add(New DataItem() With { _
                                .Label = "Item 3", _
                                .Value = 3 _
                        })
                        Add(New DataItem() With { _
                                .Label = "Item 4", _
                                .Value = 7 _
                        })
                        Add(New DataItem() With { _
                                .Label = "Item 5", _
                                .Value = 1 _
                        })
                        Add(New DataItem() With { _
                                .Label = "Item 6", _
                                .Value = 1 _
                        })
                        Add(New DataItem() With { _
                                .Label = "Item 7", _
                                .Value = 1 _
                        })
                        Add(New DataItem() With { _
                                .Label = "Item 8", _
                                .Value = 1 _
                        })
                        Add(New DataItem() With { _
                                .Label = "Item 9", _
                                .Value = 1 _
                        })
    End Sub
End Class