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
{
[Serializable]
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…
Note the use of SomeProperty – this is because each item in
booksis an instance of the objectore, so you will need to substitute the appropriate property (Titan or Eperton) fromorein place of my SomeProperty place holder.. If you just do aToString()onorethen you will get back the name of the type as a string, rather than any individual value in it – unless you have overridden theToString().