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()
.
精彩评论