开发者

reading binary file into a text box

I am trying to read 2 values in a binary file and put the 1st value in text box 3 and the 2nd value in text box 4. The 2 values that need to be read from file were created with text boxes 1 and 2 and saved to file with the 1st button. On click of button 2 it is supposed to read the file and put the values in the right spots. I am not sure if it is not reading correctly or if it is not writing correctly. When I click the button to read and display the boxes show this: System.Collections.Generic.List`1[test.Form1+ore]

Code as follows:

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;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

namespace test
{

public partial class Form1 : Form
{
    [Serial开发者_Python百科izable]
    public class ore
    {
        public float Titan;
        public float Eperton;
    }
    ore b1 = null;
    ore b2 = null;



    public Form1()
    {
        InitializeComponent();

        b2 = new ore();
        b1 = new ore();
    }

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        // 1st text box input is float
        float tempFloat;


        if (float.TryParse(textBox1.Text, out tempFloat))
        {
            b1.Titan = tempFloat;
        }
        else
            MessageBox.Show("uh oh");



    }


    private void textBox2_TextChanged(object sender, EventArgs e)
    {
        // 2nd text box input is float
        float tempFloat;
        if (float.TryParse(textBox1.Text, out tempFloat))
        {
            b2.Eperton = tempFloat;
        }
        else
            MessageBox.Show("uh oh");


    }


    private void button1_Click(object sender, EventArgs e)
    {
        // supposed to save list to file 
        List<ore> oreData = new List<ore>();
        oreData.Add(b1);
        oreData.Add(b2);

        FileStream fs = new FileStream("ore.dat", FileMode.Create);
        BinaryFormatter bf = new BinaryFormatter();
        bf.Serialize(fs, oreData);
        fs.Close();
    }

    private void textBox3_TextChanged(object sender, EventArgs e)
    {
        // 3rd text box 
    }

    private void textBox4_TextChanged(object sender, EventArgs e)
    {
        //4th text box
    }

    List<ore> books = new List<ore>(); // create list
    private void button2_Click(object sender, EventArgs e)
    {
        FileStream fs = new FileStream("ore.dat", FileMode.Open);
        BinaryFormatter bf = new BinaryFormatter();
        List<ore> books = (List<ore>)bf.Deserialize(fs);
        fs.Close();

        if (books.Count > 1)
        {

            textBox3.Text = books.ToString();//update the 3rd text box
            textBox4.Text = books.ToString();//update the 4th text box

        }
    }
}
}


I wondering if you have really asked for what you want, because you effectively answer your own question in your comment...

List<ore> books = new List<ore>(); // create list
private void button2_Click(object sender, EventArgs e)
{
    FileStream fs = new FileStream("ore.dat", FileMode.Open);
    BinaryFormatter bf = new BinaryFormatter();
    List<ore> books = (List<ore>)bf.Deserialize(fs);
    fs.Close();

    if (books != null)
    {
        if (books.Count > 0)
            textBox3.Text = books[0].SomeProperty.ToString();//update the 3rd text box
        if (books.Count > 1)
            textBox4.Text = books[1].SomeProperty.ToString();//update the 4th text box

    }
}

Note the use of SomeProperty - this is because each item in books is an instance of the object ore, so you will need to substitute the appropriate property (Titan or Eperton) from ore in place of my SomeProperty place holder.. If you just do a ToString() on ore then you will get back the name of the type as a string, rather than any individual value in it - unless you have overridden the ToString().

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜