2011-06-27 5 views
-4

простой вопрос, который уклоняется от меня в данный момент. Мне нужно 2 строки ниже, чтобы разобрать плавать. с этими двумя строками я получаю следующее: Ошибка 1 Невозможно неявно преобразовать тип 'test.Form1.ore' в 'string'. поэтому я рисую синтаксический анализ текстовых полей, чтобы плавать, так как это то, что будет передано в текстовые поля, может кто-нибудь показать мне, чего я не вижу.parse float to text box

textBox3.Text = books[0]; // update the first text 
textBox4.Text = books[1]; // update the second text 

Я попытался это

textBox4.Text = float.Parse(books[1]); //update the second text 

но это не сработало

добавляя весь код для справки

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) 
    { 

     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) 
    { 
     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) 
    { 
     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) 
    { 

    } 

    private void textBox4_TextChanged(object sender, EventArgs e) 
    { 

    } 

    List<ore> books = new List<ore>(); 
    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 = float.Parse(books[0]).ToString();//update the first text 
      textBox4.Text = float.Parse(books[1]).ToString(); 
      //update the second text 
     } 
    } 
} 

}

+0

Что значит «не работает»? Вы получили сообщение об ошибке? Неужели инопланетянин спустился с небес и сказал вам? –

+0

Что значит «это не работает»? Какая часть не сработала? Вы получили сообщение об ошибке? Вы видите неправильное значение? Ваш компьютер взорвался? –

+0

im sorry error Наилучшее перегруженное соответствие метода для 'float.Parse (string)' имеет некоторые недопустимые аргументы \t - это сообщение об ошибке для нового кода, который я попробовал – doc

ответ

0

textBox4.Text требует что вы назначаете ему строку. Вы назначаете ему float. Если вам нужно отобразить float как строку, просто используйте метод ToString.

textBox4.Text = float.Parse(books[1]).ToString(); 
+0

Этот код лишний. 'float.Parse' принимает параметр типа' string', который вы немедленно конвертируете * назад * в строку, вызывая метод 'ToString()'. Просто назначьте строку напрямую, не требуется синтаксический анализ или преобразование. –

+0

@ Коди: да, логика меня тоже путала. Но ОП не сказал, что такое «книги», поэтому я предположил ... ну, я предположил, и вы знаете, что они говорят об этом. –

+0

ОК еще раз им жаль путаницы, я добавил всю страницу кода, чтобы ее можно было увидеть. @Cody Grey, если я понимаю вас правильно, мне понадобится следующее: textBox4.Text = books [1] .ToString(); – doc

0

Если вы хотите преобразовать содержимое текстового поля в число, вы написали код назад.

Что вы теперь пытаетесь присвоить возвращаемому значению метода float.Parse свойству Text вашего текстового поля. Это не работает, конечно, потому что функция возвращает float, а свойство Text ожидает string.

Вместо того, чтобы разобрать значение строки, содержащейся в books[1], вы должны написать следующее:

float myValue = float.Parse(books[1])); 

и преобразовать float в строку, вы можете отобразить в текстовом поле, вы должны написать следующее:

textBox4.Text = books[1].ToString(); 
+0

то, что я пытаюсь сделать, читается из двоичного файла, загружает содержимое в список, а затем отображает первая переменная в этом списке в текстовом поле 1 и т. д. со всеми переменными в списке, будет 9 баллов, как только я выясню, как это сделать. – doc

+0

обновленный код, как я понимаю: if (books.Count> 1) { float titan = float.Parse (books [0])); float eperton = float.Parse (книги [1])); textBox3.Text = titan.ToString(); // обновлять первое текстовое поле textBox4.Text = eperton.ToString(); // обновлять второе текстовое поле } ..... это дает mt ошибку: Ошибка Аргумент 1: невозможно преобразовать из 'test.Form1.ore' в 'string' – doc

1

«Parse» означает обработку строки (текста) в определенный тип значения, такой как float или integer. Это не что вам нужно. На самом деле вам нужно сделать обратное: получить строковое представление некоторого другого значения.

Чтобы назначить нестроковое значение в текстовое поле, просто вызовите метод ToString().

double dbl = 0; 
MyTextBox.Text = dbl.ToString();