从MySql数据创建拨号和图形

时间:2016-07-04 05:17:26

标签: c# mysql graphics

我刚刚创建了一个简单的窗体来显示MySql表中的一些数据。

我想知道的是如何使用某些刻度盘和数据历史图表以图形方式显示此数据。

这就是我到目前为止......当你点击按钮时,它开始阅读并在2个TextBox中显示数据。当您再次单击该按钮时,它会停止。

我研究了如何添加折线图,仍然需要知道如何添加“拨号而不仅仅是TextBoxes ...

使用aGauge ......

进行了解决
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MySql.Data.MySqlClient;

namespace WindowsFormsApplication11
{
    public partial class Form1 : Form
    {
        MySqlConnection mcon = new MySqlConnection("Server=www.inshome.net.au;Port=3306;Database=wordpress;Uid=root;password=********");
        MySqlCommand mcd;
        MySqlDataReader mdr;
        string s;

        public Form1()
        {
            InitializeComponent();
        }

        private void getTemp_Click(object sender, EventArgs e)
        {
            // Toggle the timer's enabled state
            timer1.Enabled = !timer1.Enabled;
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            try
            {
                mcon.Open();
                s = "SELECT time, dht22temp, dht22humidity FROM shed ORDER BY time DESC LIMIT 1";
                mcd = new MySqlCommand(s, mcon);
                mdr = mcd.ExecuteReader();
                if (mdr.Read())
                {
                    shedTemp.Text = mdr.GetString("dht22temp");
                    shedHumidity.Text = mdr.GetString("dht22humidity");
                    aGauge1.Value = float.Parse(mdr.GetString("dht22temp"));
                    aGauge2.Value = float.Parse(mdr.GetString("dht22humidity"));
                    this.chart1.Series["Temp"].Points.AddXY(mdr.GetString("time"), mdr.GetString("dht22temp"));
                    this.chart2.Series["Humidity"].Points.AddXY(mdr.GetString("time"), mdr.GetString("dht22humidity"));
                }
                else
                {
                    MessageBox.Show("NO DATA");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                mdr.Close();
                mcon.Close();
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

VS工具箱中没有任何内容可以帮助您。

因此,你要么必须寻找一个库,要么使用不那么图形化的东西来解决,比如文本显示很好地设计或完全扭曲Pie Chart。或者你必须亲自制作。

这是一个让你入门的例子:

enter image description here

class DialLabel : Label
{
    public DialLabel()
    {
        AutoSize = false;
        NeedleColor = Color.Red;
        NeedleWidth = 3f;
    }

    public Color NeedleColor { get; set; }
    public float NeedleWidth { get; set; }
    public string Format { get; set; }

    public decimal MaxValue { get; set; }
    public decimal Value { get; set; }
    float angle { get { return 180f / 100f * (float)(MaxValue - Value); } }

    protected override void OnPaint(PaintEventArgs e)
    {
        Point center = new Point(Width / 2, (Height - 25)); // 25 pixels for text
        Rectangle textbox = new Rectangle(1, Height - 25, Width, 25);
        TextRenderer.DrawText(e.Graphics, Value.ToString(Format), Font,
                              textbox, ForeColor, BackColor);
        float nx = Width / 2f + 
                  (Width / 2f - 2) * (float)Math.Cos(angle * Math.PI / 180f);
        float ny = (Height - 25) - 
                   (Width / 2f - 2) * (float)Math.Sin(angle * Math.PI / 180f);

        using (Pen pen = new Pen(NeedleColor, NeedleWidth))
            e.Graphics.DrawLine(pen, center.X, center.Y, nx, ny);
    } 
}

表盘标签显示可用于基本样式的多个属性。将Text设置为String.Empty并选择一个不错的Image

如果已将Format设置为"##0 km/h"并将ForeColor更改为白色,将BackColor更改为透明。

您可以直接更改许多详细信息,所有其他详细信息都在您学习代码后进行..

要使用它,您可以将类添加到项目中,编译并将其从工具箱顶部添加到表单中。

要更改值,请使用以下内容:

private void trackBar1_Scroll(object sender, EventArgs e)
{
    dialLabel1.Value = trackBar1.Value;
    dialLabel1.Invalidate();
}