UltraPieChart コントロールは個々の円スライスの選択と展開 だけでなく、選択状態を変更しカスタム ロジックを実装することを可能にする SliceClick イベント をサポートします。
図 1: コード例で実装された UltraPieChart
このトピックは、ユーザーが データ バインディング トピックを既に読んでいることを前提とし、初めにそのコードを使用します。
各プロパティとイベント ハンドラーを構成します。
イベント ハンドラーの実装
(オプション) 結果の検証
各プロパティとイベント ハンドラーを構成します。
データ バインディング トピックからのコードを開始ポイントにして、 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() _ }
イベント ハンドラーの実装
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
(オプション) 結果を確認します 。
結果を検証するために、アプリケーションを実行します。円チャート コントロールは、適切なスライス外側の選択および展開によって 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