スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

パフォーマンスモニターのグラフみたいなものを作成 (C#)

寒くて電子工作する気が起きず、こたつに入ってできるプログラミングの勉強をしました。
今回はWindowsタスクマネージャーのパフォーマンスタブにあるグラフみたいのが作成できるのかチャレンジしたところ、思ったより簡単にできました。今後の仕事で使うかもしれないのでメモしておきます。

C_Monitor001.png

<仕様>
50ms毎にスライダーの値(0~100)を取得し、取得した値をグラフに表示させます。
※グラフの右端が最新の値で、左へ行くほど過去の値となります(履歴)

<フォームデザイン>
使用しているコントロールは以下の通りです。
・PictureBox
・TrakBar(スライダー)
・TextBox
・Timer
C_Monitor002.png

<ソース>
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Monitor
{
    public partial class Form1 : Form
    {
        const Int32 BoxSize = 20;

        Bitmap m_Bitmap;
        Int32 m_X = 0;
        List m_DataList = new List();


        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // スライダーの設定
            trackBar1.Minimum = 0;
            trackBar1.Maximum = 100;
            trackBar1.Value = 0;

            // テキストボックスの設定
            textBox1.ReadOnly = true;
            textBox1.TextAlign = HorizontalAlignment.Right;
            textBox1.Text = String.Format("{0}",trackBar1.Value);

            // データを初期化
            Int32 temp = 0;
            for (Int32 i = 0; i < pictureBox1.Size.Width; i++)
            {
                m_DataList.Add(temp);
            }

            // PictureBox表示用ビットマップ
            m_Bitmap = new Bitmap(pictureBox1.Size.Width, pictureBox1.Size.Height);
            pictureBox1.Image = m_Bitmap;
            PictureBox1Draw();

            // タイマー設定(50ms)
            timer1.Interval = 50;
            timer1.Start();
        }


        //=========================================================================================
        // PictureBox1描画処理
        //=========================================================================================
        private void PictureBox1Draw()
        {
            Graphics g = Graphics.FromImage(pictureBox1.Image);

            //-----------------------------------
            // グラフを描画
            //-----------------------------------
            g.FillRectangle(Brushes.Black, 0, 0, pictureBox1.Size.Width, pictureBox1.Size.Height);

            // 縦線
            Int32 cy = pictureBox1.Size.Height / BoxSize;
            for (Int32 y = 0; y <= cy; y++)
            {
                g.DrawLine(Pens.Green, 0, pictureBox1.Size.Height - (y * BoxSize), pictureBox1.Size.Width, pictureBox1.Size.Height - (y * BoxSize));
            }

            // 横線
            Int32 cx = (pictureBox1.Size.Width + m_X) / BoxSize;
            for (Int32 x = 0; x <= cx; x++)
            {
                g.DrawLine(Pens.Green, pictureBox1.Size.Width - (x * BoxSize) - m_X, 0, pictureBox1.Size.Width - (x * BoxSize) - m_X, pictureBox1.Size.Height);
            }

            //-----------------------------------
            // データを描画
            //-----------------------------------
            for (Int32 i = 0; i < (pictureBox1.Size.Width - 1) ; i++)
            {
                double dblTemp00 = (m_DataList[i] / (double)10) * (double)BoxSize;
                double dblTemp01 = (m_DataList[i + 1] / (double)10) * (double)BoxSize;

                g.DrawLine(Pens.Yellow, i, (int)(pictureBox1.Size.Height - dblTemp00), i + 1, (int)(pictureBox1.Size.Height -dblTemp01));
            }


            if (++m_X >= BoxSize) m_X = 0;


            pictureBox1.Refresh();
        }

        //=========================================================================================
        // タイマーイベント処理
        //=========================================================================================
        private void timer1_Tick(object sender, EventArgs e)
        {
            // データ値を取得(トコロテン方式で最初のデータを削除)
            m_DataList.Add(trackBar1.Value);
            m_DataList.RemoveAt(0);

            // PictureBox1描画処理
            PictureBox1Draw();
        }

        //=========================================================================================
        // スライダーイベント処理
        //=========================================================================================
        private void trackBar1_Scroll(object sender, EventArgs e)
        {
            textBox1.Text = String.Format("{0}", trackBar1.Value);
        }
    }
}


この記事へのコメント

トラックバック

URL :

プロフィール

MIBC

Author:MIBC
ブログに掲載している配線図・プログラムを使用しても良いですが、障害が発生しても一切責任を負いません。ご了承よろしくお願いします。

■お願い■
予想を反して色々な方がこのホームページを見にこられるようになってきております。
もし参考になった記事がありましたら、拍手ボタンを押していただけるとどの様な記事が良かったかの資料となったり、今後の励みになったりします。
お手数ですが参考になった記事がありましたら、参考になった記事の一番最後にあります拍手ボタンを押していただけると助かります。よろしくお願いします。

Stame
Steam ID
最新記事
カテゴリ
アクセスカウンター
Revolver Map
楽天
日めくりカレンダー
なかのひと
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。