C# 从类对象C上的鼠标悬停获取值#

C# 从类对象C上的鼠标悬停获取值#,c#,C#,我有一个包含360个数字的txt文件,我必须阅读所有这些内容,并根据列表的值绘制一种由FillPie eachone制成的光盘,颜色为灰色。在这里之前,一切都很简单。我用一个fillpie的数据(txt中的值和度数)和一个Paint方法创建了一个类,该方法可以绘制正确的颜色。 这是该类的代码: class DatoDisco { int valoreSpicchio; int gradi; public DatoDisco(int valoreTastatore, in

我有一个包含360个数字的txt文件,我必须阅读所有这些内容,并根据列表的值绘制一种由FillPie eachone制成的光盘,颜色为灰色。在这里之前,一切都很简单。我用一个fillpie的数据(txt中的值和度数)和一个Paint方法创建了一个类,该方法可以绘制正确的颜色。 这是该类的代码:

class DatoDisco
{
    int valoreSpicchio;
    int gradi;

    public DatoDisco(int valoreTastatore, int gradiLettura)
    {
        valoreSpicchio = valoreTastatore;
        gradi = gradiLettura;
    }

    public void Clear()
    {
        valoreSpicchio = 0;
        gradi = 0;
    }

    private int ScalaGrigi()
    {
        int grigio = 0;
        if (valoreSpicchio <= 0)
        {
            grigio = 125 + (valoreSpicchio / 10);
            if (grigio < 0)
                grigio = 0;
        }
        if (valoreSpicchio > 0)
        {
            grigio = 125 + (valoreSpicchio / 10);
            if (grigio > 230)
                grigio = 230;
        }
        return grigio;
    }

    public void Paint (Graphics grafica)
    {
        try
        {
            Brush penna = new SolidBrush(Color.FromArgb(255, ScalaGrigi(), ScalaGrigi(), ScalaGrigi()));
            grafica.FillPie(penna, 0, 0, 400, 400, gradi, 1.0f);
        }
        catch
        {
        }
    }

    public int ValoreSpicchio
    {
        get
        {
            return valoreSpicchio;
        }
    }

    public int Gradi
    {
        get
        {
            return gradi;
        }
    } 
}
类DatoDisco
{
从价税;
智力梯度;
公共DatoDisco(从价税税、梯度税)
{
从价=从价;
梯度=梯度图;
}
公共空间清除()
{
从价SPICCHIO=0;
梯度=0;
}
private int ScalaGrigi()
{
int-grigio=0;
if(从价SPICCHIO 0)
{
格里吉奥=125+(从价税/10);
如果(格里吉奥>230)
格里吉奥=230;
}
返回格里吉奥;
}
公共空间涂料(Graphics grafica)
{
尝试
{
Brush penna=新的SolidBrush(Color.FromArgb(255,scalargi(),scalargi(),scalargi());
格拉菲卡·菲尔比(佩纳,0,0,400,400,格拉迪,1.0f);
}
抓住
{
}
}
从价公共酒店
{
得到
{
从价退货;
}
}
公共智力梯度
{
得到
{
回归梯度;
}
} 
}
这里是我画所有东西的地方:

public partial class Samac : Form
{
    libnodave.daveOSserialType fds;
    libnodave.daveInterface di;
    libnodave.daveConnection dc;
    int rack = 0;
    int slot = 2;
    int scalaGrigi = 0;
    int angolatura = 0;
    List<int> valoriY = new List<int>();
    //Disco disco = new Disco();
    List<DatoDisco> disco = new List<DatoDisco>();

    float[] valoriTastatore = new float[360];
    public Samac()
    {
        InitializeComponent();
        StreamReader dataStream = new StreamReader("save.txt");

        textBox1.Text = dataStream.ReadLine();
        dataStream.Dispose();
        for (int i = 0; i <= 360; i++ )
            chart1.Series["Series2"].Points.Add(0);
        //AggiornaGrafico(textBox1.Text, chart1);
        SetStyle(ControlStyles.SupportsTransparentBackColor, true);
    }
    string indirizzoIpPlc
    {
        get
        {
            FileIniDataParser parser = new FileIniDataParser();
            IniData settings = parser.LoadFile("config.ini");
            return settings["PLC_CONNECTION"]["PLC_IP"];
        }
    }
    private void AggiornaGrafico(string nomeFile, Chart grafico, bool online)
    {
        int max = 0;
        int min = 0;
        grafico.Series["Series1"].Points.Clear();
        grafico.Series["Series2"].Points.Clear();
        grafico.Series["Series3"].Points.Clear();
        grafico.Series["Series4"].Points.Clear();
        grafico.ChartAreas[0].AxisX.Maximum = 360;
        grafico.ChartAreas[0].AxisX.Minimum = 0;
        grafico.ChartAreas[0].AxisY.Maximum = 500;
        grafico.ChartAreas[0].AxisY.Minimum = -500;
        String file = nomeFile;
        valoriY.Clear();
        disco.Clear();

        if (online == false)
        {
            System.IO.File.WriteAllText("save.txt", nomeFile);
        }

            StreamReader dataStreamGrafico = new StreamReader(file);
            StreamReader dataStreamScheda = new StreamReader("Scheda.sch");

            string datasample;
            string[] scheda = new string[56];
            for (int i = 0; i < 56; i++)
            {
                scheda[i] = dataStreamScheda.ReadLine();
            }
            dataStreamScheda.Close();
        int gradi = 1;
            while ((datasample = dataStreamGrafico.ReadLine()) != null)
                { 
                    grafico.Series["Series2"].Points.Add(0);
                    grafico.Series["Series2"].Color = Color.Red;
                    grafico.Series["Series2"].BorderWidth = 3;
                    grafico.Series["Series3"].Points.Add(Convert.ToInt32(float.Parse(scheda[5])));
                    grafico.Series["Series3"].Color = Color.Green;
                    grafico.Series["Series3"].BorderWidth = 3;
                    grafico.Series["Series4"].Points.Add(Convert.ToInt32(-float.Parse(scheda[5])));
                    grafico.Series["Series4"].Color = Color.Green;
                    grafico.Series["Series4"].BorderWidth = 3;
                    grafico.Series["Series1"].Points.Add(int.Parse(datasample));
                    grafico.Series["Series1"].BorderWidth = 5; 
                    valoriY.Add(int.Parse(datasample));
                    //disco.Add(int.Parse(datasample));
                    disco.Add(new DatoDisco(int.Parse(datasample), gradi));
                    gradi++;
                }
            dataStreamGrafico.Close();
            max = Convert.ToInt32(chart1.Series["Series1"].Points.FindMaxByValue().YValues[0]);
            min = Convert.ToInt32(chart1.Series["Series1"].Points.FindMinByValue().YValues[0]);
            lblCampanatura.Text = (((float)max + min) / 2000.0).ToString();
            lblSbandieramento.Text = (((float)max - min) / 1000.0).ToString();

        if ((Math.Abs(max) > 800) || (Math.Abs(min) > 800))
        {
            if (Math.Abs(max) >= Math.Abs(min))
            {
                chart1.ChartAreas[0].AxisY.Maximum = max + 200;
                chart1.ChartAreas[0].AxisY.Minimum = -(max + 200);
            }
            else
            {
                chart1.ChartAreas[0].AxisY.Maximum = min + 200;
                chart1.ChartAreas[0].AxisY.Minimum = -(min + 200);
            }
        }
        else
        {
            chart1.ChartAreas[0].AxisY.Maximum = 800;
            chart1.ChartAreas[0].AxisY.Minimum = -800;
        }
            boxGraficaDisco.Refresh();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        DialogResult result = openFileDialog1.ShowDialog();
          textBox1.Text = openFileDialog1.FileName;
          if (result == DialogResult.OK)
          {
              AggiornaGrafico(textBox1.Text, chart1, timer1.Enabled);     
          }

    }

    ToolTip tooltip = new ToolTip();
    private int lastX;
    private int lastY;


    private void chart1_MouseMove(object sender, MouseEventArgs e)
    {
        if (e.X != this.lastX || e.Y != this.lastY)
        {
            try
        {
                int cursorX = Convert.ToInt32(chart1.ChartAreas[0].AxisX.PixelPositionToValue(e.Location.X));

                tooltip.Show("X:" + cursorX.ToString("0.00") + "Y:" + Convert.ToInt32(chart1.Series[0].Points[cursorX].YValues[0]).ToString(), this.chart1, e.Location.X + 20, e.Location.Y + 20);                    
        }

        catch { }
        }
        this.lastX = e.X;
        this.lastY = e.Y;
    }

    private void button1_Click_1(object sender, EventArgs e)
    {
        int indice = ((int)Char.GetNumericValue(textBox1.Text[textBox1.Text.Length - 5]))+1;
        if (File.Exists(textBox1.Text.Substring(0, textBox1.Text.Length - 5) + indice + ".txt"))
        {
            textBox1.Text = textBox1.Text.Substring(0, textBox1.Text.Length - 5) + indice + ".txt";
            try
            {
                AggiornaGrafico(textBox1.Text, chart1, timer1.Enabled);
            }
            catch
            {
                MessageBox.Show("Il File non esiste");
            }
        }
        else
        {
            MessageBox.Show("Il File non esiste");
        }
    }

    private void btnGrafMeno_Click(object sender, EventArgs e)
    {
        int indice = ((int)Char.GetNumericValue(textBox1.Text[textBox1.Text.Length - 5])) - 1;
        if (indice >= 0)
        {
            textBox1.Text = textBox1.Text.Substring(0, textBox1.Text.Length - 5) + indice + ".txt";
            try
            {
                AggiornaGrafico(textBox1.Text, chart1, timer1.Enabled);
            }
            catch
            {
                MessageBox.Show("Il File non esiste");
            }
        }
        else
        {
            MessageBox.Show("Prima lettura disco");
        }
    }

    private void btnConnetti_Click(object sender, EventArgs e)
    {
        fds.rfd = libnodave.openSocket(102, indirizzoIpPlc);
        fds.wfd = fds.rfd;
        if (fds.rfd > 0)
        {
            di = new libnodave.daveInterface(fds, "IF1", 0, libnodave.daveProtoISOTCP, libnodave.daveSpeed187k);
            di.setTimeout(1000000);
            dc = new libnodave.daveConnection(di, 0, rack, slot);
            int res = dc.connectPLC();
            timer1.Start();
           // AggiornaGrafico("Disco.csv", chart1, timer1.Enabled);
        }
        else
        {
            MessageBox.Show("Impossibile connettersi");
        }
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        if (timer1.Enabled == true)
        {
                int res;
                res = dc.readBytes(libnodave.daveDB, 21, 40, 1, null);
                if (res == 0)
                {
                    var letturaDati = (dc.getS8At(0) & (1 << 0)) != 0;
                    if (letturaDati == true)
                    {
                        int puntatore = 30;
                        StreamWriter datiDisco = new StreamWriter("DatiDaPlc.csv");
                        datiDisco.WriteLine("X;" + "C;" + "Z;");
                        while (puntatore <= 10838)
                        {
                            res = dc.readBytes(libnodave.daveDB, 3, puntatore, 192, null);
                            if (res == 0)
                            {
                                for (int i = 0; dc.getU32At(i) != 0; i = i + 12)
                                {
                                    datiDisco.Write(dc.getU32At(i).ToString() + ";");
                                    datiDisco.Write(dc.getU32At(i + 4).ToString() + ";");
                                    datiDisco.WriteLine(dc.getFloatAt(i + 8).ToString() + ";");
                                }
                            }
                            puntatore = puntatore + 192;
                        }
                        datiDisco.Close();
                        StreamReader lettura = new StreamReader("DatiDaPlc.csv");
                        StreamWriter scritt = new StreamWriter("Disco.csv");
                        var titolo = lettura.ReadLine();
                        var posizioneLettura = lettura.ReadLine();
                        var posX = posizioneLettura.Split(';');
                        int minX = Convert.ToInt32(posX[0]) - 5;
                        int maxX = Convert.ToInt32(posX[0]) + 5;
                        int contatore = 0;
                        while (!lettura.EndOfStream)
                        {
                            var line = lettura.ReadLine();
                            var values = line.Split(';');

                            if ((Convert.ToInt32(values[1]) >= contatore && Convert.ToInt32(values[1]) < contatore + 1000) && (Convert.ToInt32(values[0]) > minX && Convert.ToInt32(values[0]) <= maxX))
                            {
                                scritt.WriteLine(Convert.ToInt32(float.Parse(values[2]) * 1000).ToString());
                                contatore += 1000;
                            }
                        }
                        lettura.Close();
                        scritt.Close();
                        AggiornaGrafico("Disco.csv", chart1, timer1.Enabled);
                    } 
                }

                else
                {
                    timer1.Stop();
                    MessageBox.Show("Disconnesso");
                    dc.disconnectPLC();
                    di.disconnectAdapter();
                    fds.rfd = libnodave.closeSocket(102);
                    fds.wfd = fds.rfd;
                }
        }
    }

    private void btnDisconnetti_Click(object sender, EventArgs e)
    {
        if (timer1.Enabled == true)
        {
            dc.disconnectPLC();
            di.disconnectAdapter();
            fds.rfd = libnodave.closeSocket(102);
            fds.wfd = fds.rfd;
            timer1.Stop();
            AggiornaGrafico(textBox1.Text, chart1, timer1.Enabled);
        }
    }

    private void Samac_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (timer1.Enabled == true)
        {
            dc.disconnectPLC();
            di.disconnectAdapter();
            libnodave.closeSocket(102);
            timer1.Stop();
        }
    }

    private void button1_Click_2(object sender, EventArgs e)
    {
        if (timer1.Enabled == true)
        {
            AggiornaGrafico("Disco.csv", chart1, timer1.Enabled);
        }
        else
        {
            AggiornaGrafico(textBox1.Text, chart1, timer1.Enabled);
        }
    }

    private void chart2_MouseMove(object sender, MouseEventArgs e)
    {
        if (e.X != this.lastX || e.Y != this.lastY)
        {
            try
            {
                int cursorX = Convert.ToInt32(chart2.ChartAreas[0].AxisX.PixelPositionToValue(e.Location.X));
                int cursorY = Convert.ToInt32(chart2.ChartAreas[0].AxisY.PixelPositionToValue(e.Location.Y));
                //tooltip.Show("X:" + chart2.Series[0].Points[cursorX].XValue.ToString() + "Y:" + chart2.Series[0].Points[cursorX].YValues[0].ToString(), this.chart2, e.Location.X + 20, e.Location.Y + 20);
                tooltip.Show("X:" + cursorX.ToString() + "Y:#VALY" , this.chart2, e.Location.X + 20, e.Location.Y + 20);
                //chart2.Series[0].ToolTip="#VALY";
            }

            catch { }
        }
        this.lastX = e.X;
        this.lastY = e.Y;
    }

    private void boxGraficaDisco_Paint(object sender, PaintEventArgs e)
    {
        Graphics grafica = e.Graphics;
        //disco.Paint(grafica);
        foreach (DatoDisco d in disco)
        {
            d.Paint(grafica);
        }
    }

    private void boxGraficaDisco_MouseMove(object sender, MouseEventArgs e)
    {
        if (e.X != this.lastX || e.Y != this.lastY)
        {
            try
            {
                foreach (DatoDisco d in disco)
                {

                }
            }

            catch { }
        }
        this.lastX = e.X;
        this.lastY = e.Y;
    }
}
public分部类Samac:Form
{
libnodave.daveOSserialType fds;
libnodave.daveInterface di;
libnodave.daveConnection dc;
int机架=0;
int槽=2;
int scalaGrigi=0;
int angolatura=0;
列表值=新列表();
//迪斯科舞厅=新迪斯科舞厅();
List disco=新列表();
浮动[]valoriTastatore=新浮动[360];
公共Samac()
{
初始化组件();
StreamReader数据流=新的StreamReader(“save.txt”);
textBox1.Text=dataStream.ReadLine();
Dispose();
对于(int i=0;i 800)| |(Math.Abs(min)>800))
{
如果(数学绝对值(最大)>=数学绝对值(最小))
{
chart1.ChartAreas[0].AxisY.max=max+200;
chart1.ChartAreas[0].AxisY.Minimum=-(max+200);
}
其他的
{
chart1.ChartAreas[0].AxisY.max=min+200;
chart1.ChartAreas[0].AxisY.Minimum=-(min+200);
}
}
其他的
{
chart1.ChartAreas[0]。AxisY.max=800;
chart1.ChartAreas[0]。AxisY.Minimum=-800;
}
boxGraficaDisco.Refresh();
}
私有无效按钮1\u单击(对象发送者,事件参数e)
{
DialogResult=openFileDialog1.ShowDialog();
textBox1.Text=openFileDialog1.FileName;
if(result==DialogResult.OK)
{
AggiornaGrafico(textBox1.Text,chart1,timer1.Enabled);
}
}
工具提示工具提示=新工具提示();
私人int lastX;
私人整形术;
私有void chart1_MouseMove(对象发送方,MouseEventArgs e)
{
如果(e.X!=this.lastX | e.Y!=this.lastY)
{
尝试
{
int cursorX=Convert.ToInt32(chart1.ChartAreas[0].AxisX.PixelPositionToValue(e.Location.X));
工具提示.Show(“X:+cursorX.ToString(“0.00”)+“Y:+Convert.ToInt32(chart1.Series[0]。Points[cursorX].YValues[0]).ToString(),this.chart1,e.Location.X+20,e.Location.Y+20);
}
捕获{}
}
这个.lastX=e.X;
这是最后一次=e.Y;
}
私有无效按钮1\u单击\u 1(对象发送者,事件参数e)
{
int indice=((int)Char.GetNumericValue(textBox1.Text[textBox1.Text.Length-5])+1;
if(File.Exists(textBox1.Text.Substring(0,textBox1.Text.Length-5)+indice+“.txt”))
{
textBox1.Text=textBox1.Text.Substring(0,textBox1.Text.Length-5)+标记+“.txt”;
尝试
{
AggiornaGrafico(textBox1.Text,chart1,timer1.Enabled);
}
抓住
{
MessageBox.Show(“Il文件非esiste”);
}
}
其他的
{
MessageBox.Show(“Il文件非esiste”);
}
}
私有无效btnGrafMeno_单击(对象发送方,事件参数e)
{
int indice=((int)Char.GetNumericValue(textBox1.Text[textBox1.Text.Length-5])-1;
如果(表示>=0)
{
textBox1.Text=textBox1.Text.Substring(0,textBox1.Text.Length-5)+标记+“.txt”;
尝试
{
AggiornaGrafico(textBox1.Text,chart1,timer1.Enabled);
}
抓住
{
MessageBox.Show(“Il文件非esiste”);
}
}
其他的
{
MessageBox.Show(“Prima lettura disco”);
}
}
私有void btnConnetti_单击(对象发送者,事件参数e)
{
fds.rfd=libnodave.openSocket(102,indirizzoIpPlc);
fds.wfd=fds.rfd;
如果(fds.rfd>0)
{
di=新的libnodave.daveInterface(fds,“IF1”,0,libnodave.daveProtoISOTCP,libnodave.daveSpeed187k);
di.设置超时(1000000);
dc=新的libnodave.daveConnection(di,0,机架,插槽);
int res=dc.connectPLC();
timer1.Start();
//AggiornaGrafico(“Disco.csv”,图表1,计时器1.Enabled);
}
其他的
{
MessageBox.Show(“不可能的连接”);
}
}
私有无效计时器1_刻度(对象发送方,事件参数e)
{
如果(timer1.Enabled==true)
{
国际关系;
res=dc.readBytes(libnodave.daveDB,21,40,1,null);
如果(res==0)
{
var letturaDati=(dc.getS8At(0)和(1 minX&&Convert.ToInt32(值[0]))
double AngleFromPoints(Point pt1, Point pt2)
{
    Point P = new Point(pt1.X - pt2.X, pt1.Y - pt2.Y);
    double alpha = 0d;
    if (P.Y == 0) alpha = P.X > 0 ? 0d : 180d;
    else
    {
        double f = 1d * P.X / (Math.Sqrt(P.X * P.X + P.Y * P.Y));
        alpha = Math.Acos(f) * 180d / Math.PI; 
        if (P.Y > 0) alpha = 360d - alpha;
    }
    return alpha;
}