SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

ComponentZine(ComponentOne)

入力したデータがリアルタイムに反映されるバブルチャートを実装する

「PowerTools ComponentOne Studio 2012J」のC1Chart2D/C1FlexGridコントロールを使った.NETアプリケーションの作成

  • このエントリーをはてなブックマークに追加

処理コードの作成

 グリッドデータを元にバブルチャートを作成する処理を組み立てていきます。処理の大まかな流れは以下のようになります。

  1. グリッドの行ラベルの作成(Form1_Load)
  2. グリッドの列ラベルの設定(Button4_Click)
  3. グリッドからデータを取得(Button2_Click)
  4. グラフの設定(Button2_Click)
    • 軸ラベルの作成
    • グラフデータのセット
    • シンボルの描画設定
    • ラベルの作成
  5. グラフ表示の範囲設定(Button1_Click)
  6. グラフの保存(Button3_Click)

グリッドの行ラベルの作成

 最初に、グリッドの行番号を設定する処理を、フォームのLoadイベントハンドラに作成します。 これは行ヘッダに1から7までの数字を入れる処理で、C1FlexGridコントロール名に()で行列番号のインデックスを指定し、そのまま値を代入します。

Visual Basic
Imports C1.Win.C1Chart

Public Class Form1

    '----------------------- グリッドの行ラベルの作成 ----------------------------------------------------
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Dim i As Integer
        For i = 1 To 7
            C1FlexGrid1(i, 0) = i
        Next

    End Sub
C#
using C1.Win.C1Chart;
namespace Bubble_cs
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        //----------------------- グリッドの行ラベルの作成 ----------------------------------------------------
        private void Form1_Load(object sender, EventArgs e)
        {
            int i;
            for (i = 1; i <= 7; i++)
            {
                c1FlexGrid1[i, 0] = i;
            }
        }
行番号が設定される
行番号が設定される

C1FlexGridコントロールへの列ラベルの設定処理

 続いて、グリッドの列ラベルを設定する処理を、「Button4」のClickイベントハンドラに作成します。

 グリッドの列ラベルは、フォームデザイン時に一度設定していますが、データの内容によって入れ換えられるようにしておきます。この処理は、4つのTextBoxコントロールの入力データを、グリッドの列ヘッダに設定します。列ヘッダのテキストの入れ替えは、C1FlexGrid1コントロールのColsプロパティの引数に列番号を指定し、Captionプロパティに値を設定します。

Visual Basic
'----------------------- グリッドの列ラベルの設定 ----------------------------------------------------
Private Sub Button4_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click
    If TextBox5.Text <> "" Then
        C1FlexGrid1.Cols(1).Caption = TextBox5.Text
    End If

    If TextBox6.Text <> "" Then
        C1FlexGrid1.Cols(2).Caption = TextBox6.Text
    End If

    If TextBox7.Text <> "" Then
        C1FlexGrid1.Cols(3).Caption = TextBox7.Text
    End If

    If TextBox8.Text <> "" Then
        C1FlexGrid1.Cols(4).Caption = TextBox8.Text
    End If
End Sub
C#
//----------------------- グリッドの列ラベルの設定 ----------------------------------------------------
private void button4_Click(object sender, EventArgs e)
{
    if( textBox5.Text  != "") 
    {
        c1FlexGrid1.Cols[1].Caption = textBox5.Text;
    }

    if( textBox6.Text  != "")
    {
        c1FlexGrid1.Cols[2].Caption = textBox6.Text;
    }

    if( textBox7.Text  != "")
    {
        c1FlexGrid1.Cols[3].Caption = textBox7.Text;
    }

    if( textBox8.Text  != "") 
    {
        c1FlexGrid1.Cols[4].Caption = textBox8.Text;
    }
}
列ヘッダを入れ替える
列ヘッダを入れ替える

グリッドからデータを取得

 グリッドの準備ができたら、グリッドからデータを取得します。

 グラフの作成には、グリッドの「X軸」「Y軸」「Y1」という3列分のデータが必要なので、これをC1FlexGridコントロールのGetDataDisplayメソッドを使って取得し、配列に格納しておきます。

 GetDataDisplayメソッドは、セルの値を文字列として取得して返してくるメソッドで、引数にセルの位置を行列番号で指定します。メソッドの戻り値が文字列なので、ConvertクラスのToInt16メソッドで整数に変換してから、配列に格納します。

Visual Basic
'----------------------- グラフ作成 ----------------------------------------------------
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    Dim xp(6) As Integer
    Dim yp(6) As Integer
    Dim vol(6) As Integer
    Dim i As Integer

    'グリッドからデータを取得 
    For i = 0 To 6
        xp(i) = Convert.ToInt16(C1FlexGrid1.GetDataDisplay(i + 1, 2))
        yp(i) = Convert.ToInt16(C1FlexGrid1.GetDataDisplay(i + 1, 3))
        vol(i) = Convert.ToInt16(C1FlexGrid1.GetDataDisplay(i + 1, 4))
    Next i
C#
//----------------------- グラフ作成 ----------------------------------------------------
private void button2_Click(object sender, EventArgs e)
{
    int[] xp = new int[7];
    int[] yp  = new int[7];
    int[] vol = new int[7];
    int i;

    //グリッドからデータを取得 
    for(i=0; i<=6; i++)
    {
        xp[i] = Convert.ToInt16(c1FlexGrid1.GetDataDisplay(i + 1, 2));
        yp[i] = Convert.ToInt16(c1FlexGrid1.GetDataDisplay(i + 1, 3));
        vol[i] = Convert.ToInt16(c1FlexGrid1.GetDataDisplay(i + 1, 4));
    }

次のページ
まとめ

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
ComponentZine(ComponentOne)連載記事一覧

もっと読む

この記事の著者

瀬戸 遥(セト ハルカ)

8ビットコンピュータの時代からBASICを使い、C言語を独習で学びWindows 3.1のフリーソフトを作成、NiftyServeのフォーラムなどで配布。Excel VBAとVisual Basic関連の解説書を中心に現在まで40冊以上の書籍を出版。近著に、「ExcelユーザーのためのAccess再...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6812 2012/10/19 10:20

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング