2015-04-17 4 views
0

Я создал 2 текстовых поля, которые принимают имя и адрес электронной почты, сохраняют его в файле «text» и отображают содержимое в списке. У меня все сделано, но когда оно отображается в списке, это результат, который я получаю.Выписывание текстового поля приводит к неожиданным результатам

"System.Windows.Forms.TextBox, Текст: Тони"
"System.Windows.Forms.TextBox, Текст: [email protected]"

Может кто-нибудь сказать мне, почему это делает это пожалуйста? Я еще новичок в C# и я знаю, что это небольшая вещь, я просто не знаю, где искать

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using System.IO; 

namespace _iLab_Week7 
{ 
    public partial class Form1 : Form 
    { 
     private StreamReader inFile; //streamreader for input 
     private StreamWriter outFile; //streamwriter for output 

     const string filename = "contacts.txt"; 

     public Form1() 
     {   
      InitializeComponent(); 
     } 

     private void btnAddContact_Click(object sender, EventArgs e) 
     { 
      //Disable the "add contact" and "email" 
      btnAddContact.Enabled=false; 
      txtBoxEmail.Enabled=false; 

      //check for and create contacts.txt file 
      if(!File.Exists(filename)) 
       File.Create(filename); 

      if(File.Exists(filename)) 
      { 
       try 
       { 
        //create the file stream 
        outFile = new StreamWriter(filename, true); 

        //get the item from the name and email text box 
        //write it to the file 
        outFile.WriteLine(txtBoxName); 
        outFile.WriteLine(txtBoxEmail + "\n"); 

        //close the file 
        outFile.Close(); 

        //clear the textbox 
        txtBoxName.Text=""; 
        txtBoxEmail.Text=""; 

        //the cursor in the text box 
        txtBoxName.Focus(); 
        txtBoxEmail.Focus(); 
       } 
       catch (DirectoryNotFoundException exc) 
       { 
        lstBoxContact.Items.Add(exc.Message); 
       } 
       catch (System.IO.IOException exc) 
       { 
        lstBoxContact.Items.Add(exc.Message); 
       } 

       string listItem; 
       this.lstBoxContact.Items.Clear(); 
       btnAddContact.Enabled = false; 

       try 
       { 
        //open file for reading 
        inFile=new StreamReader(filename); 
        //read from file and add to list box 
        while ((listItem=inFile.ReadLine()) !=null) 
        { 
         this.lstBoxContact.Items.Add(listItem); 
        } 
        //Close the file 
        inFile.Close(); 
       } 
       catch (System.IO.IOException exc) 
       { 
        this.lstBoxContact.Items.Add(exc); 
       } 
      } 
      else 
      { 
       this.lstBoxContact.Items.Add("File Unabailable"); 
      } 

     } 

     private void lstBoxContact_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      //enable button 
      btnAddContact.Enabled = true; 
      txtBoxName.Enabled = true; 
      txtBoxEmail.Enabled = true; 
     } 

     private void Form1_FormClosing(object sender, FormClosedEventArgs e) 
     { 
      //make sure files are closed 
      try 
      { 
       inFile.Close(); 
       outFile.Close(); 
      } 
      catch { } 
     } 
    } 
+0

Не могли бы вы высказать свой код? –

+0

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

ответ

0

Заменить

outFile.WriteLine(txtBoxName); 
outFile.WriteLine(txtBoxEmail + "\n"); 

с

outFile.WriteLine(txtBoxName.Text); 
outFile.WriteLine(txtBoxEmail.Text + "\n"); 

и попробовать .. .

ADDED: Когда вы говорите txtBoxName, вы являетесь ссылаясь на объект txtBoxName в целом, который содержит много свойств - например, Text, ForeColor, Font и т. д. ... Чтобы получить только значение или контент, вам нужно указать свойство, которое дает вам это - то есть Text недвижимость

Подробнее о TextBox

+0

Спасибо, что вы отлично работали. Можете ли вы дать мне краткое объяснение, почему я должен использовать .Text после имени объекта, пожалуйста. – Monti

+0

@Monti см. Обновленный ответ ... отметьте его ответом, если он решит вашу проблему. –

+0

Поблагодарите за помощь. Я все еще новичок на этом сайте. Просто начал изучать C# в этом семестре. – Monti

0
outFile.WriteLine(txtBoxName); 

эквивалентно

outFile.WriteLine(txtBoxName.ToString()); 

для большинства классов, метод ToString() является такой же, как Object.ToString(). Этот метод просто отображает имя типа экземпляра, который вы пытаетесь отобразить. Таким образом, вы, возможно, видели только

System.Windows.Forms.TextBox

Однако TextBox класс услужливо переопределяет этот метод и отображает как имя типа и значение Text собственности.

Но, как сказал Саагар Элиас Джеки. Это не то, что вы на самом деле намеревались сделать, поэтому просто покажите txtBoxName.Text, как он предложил.

Смежные вопросы