Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с свойством, Возникла проблема со значением свойства. 
V
    Опции темы
Сарт
  Дата 24.2.2007, 03:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 29.4.2006

Репутация: нет
Всего: 0



Значит вот весь код 
Код

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using Microsoft.Win32;
using System.Xml;

namespace PhoneBook
{
    public partial class MainForm : Form
    {
        Color currColor = Color.Tomato;
        public MainMenu MMenu;
        private string path;
        public string Path
        {
            set 
            {
                path = value;
            }
            get
            {
                return path;
            }
        }
        public string CheckingPath()
        {
            if (!File.Exists("Setting.xml"))
            {
                XmlWriter writer = XmlWriter.Create("Setting.xml");
                writer.WriteStartElement("path");
                writer.WriteString("Phonebase.xml");
                writer.WriteEndElement();
                writer.Flush();
                writer.Close();
                Path = "Phonebase.xml";
                MessageBox.Show("File 'Settings.xml created'");

            }
            else
            {

                XmlTextReader tr = new XmlTextReader("Setting.xml");
                Path = tr.ReadElementString();
                tr.Close();


            }   
            return Path;
        }
        private void BaseCreate()
        {
            if (!File.Exists(Path))
            {
                XmlWriter writer = XmlWriter.Create("Phonebase.xml");
                MessageBox.Show("New base created.");
            }
            else
            {
                
            }
           
            
        }
        public MainForm()
        {
            InitializeComponent();
            CenterToScreen();
            MMenu = new MainMenu();
            MenuItem miFile = MMenu.MenuItems.Add("&File");
            MenuItem miHelp = MMenu.MenuItems.Add("&Help");
            miFile.MenuItems.Add(new MenuItem("Exit", new EventHandler(this.FileExit_Clicked), Shortcut.CtrlX));
            miHelp.MenuItems.Add(new MenuItem("About", new EventHandler (this.HelpAbout_Clicked),Shortcut.CtrlA));
            this.Menu = MMenu;
            BackColor = currColor;
           
                
           
            
        }
        
       private void Form1_Load(object sender, EventArgs e)
       {


           MainForm o = new MainForm();
           o.CheckingPath();
           o.BaseCreate();
           MessageBox.Show(o.Path);
       }

       #region Блок поиска  unrealized
       private void SearchButton_Click(object sender, EventArgs e)
        {

        }
       #endregion
        private void SaveButton_Click(object sender, EventArgs e)
        {


        }
        #region Кнопки Выхода (realized)
        private void ExitButton_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
        private void FileExit_Clicked(object sender, EventArgs e)
        {
            this.Close();
        }
        private void HelpAbout_Clicked(object sender, EventArgs e) 
        {
            MessageBox.Show("Programm version 1.00.This programm was made by Capm. All your wishes and regards mail to [email protected]. Thank you");
        }
        #endregion
        private void SaveButt_Click(object sender, EventArgs e, Path)
        {
            string name = FIOBox.Text;;
            string mobile = MobileBox.Text;
            string home = HomeBox.Text;
            XmlReader reader = XmlReader.Create(Path);
            MessageBox.Show(Convert.ToString(reader));
            
            
            
            

        /*    writer = XmlWriter.Create("sampledata.xml");

            // Write the root element.
            writer.WriteStartElement("book");

            // Write the xmlns:bk="urn:book" namespace declaration.
            writer.WriteAttributeString("xmlns", "bk", null, "urn:book");

            // Write the bk:ISBN="1-800-925" attribute.
            writer.WriteAttributeString("ISBN", "urn:book", "1-800-925");

            writer.WriteElementString("price", "19.95");

            // Write the close tag for the root element.
            writer.WriteEndElement();

            // Write the XML to file and close the writer.
            writer.Flush();
            writer.Close();  
*/
        }

        private void ShowAll_Click(object sender, EventArgs e)
        {
            try
            {
                XmlReader sr = XmlReader.Create(path);
            
            String line;
            while ((line=sr.ReadContentAsString())!=null)
            {
                MessageBox.Show(line);
            }
            }
            
            catch (Exception exc)
            {
                MessageBox.Show("Don't delete file PhoneBase.xml!!");
                MessageBox.Show(exc.Message);
                
            }
        }
        }
    
        

    }



Возникает проблема тут
Код

 private void SaveButt_Click(object sender, EventArgs e, Path)
        {
            string name = FIOBox.Text;;
            string mobile = MobileBox.Text;
            string home = HomeBox.Text;
            XmlReader reader = XmlReader.Create(Path);
            MessageBox.Show(Convert.ToString(reader));                
            }

Посмотрел в Watch-e - свойство Path равно нулю...
То же самое и тут
Код

 private void ShowAll_Click(object sender, EventArgs e)
        {
            try
            {
                XmlReader sr = XmlReader.Create(path);
            
            String line;
            while ((line=sr.ReadContentAsString())!=null)
            {
                MessageBox.Show(line);
            }
            }
            
            catch (Exception exc)
            {
                MessageBox.Show("Don't delete file PhoneBase.xml!!");
                MessageBox.Show(exc.Message);
                
            }

В чем косяк не понимаю=)
Так как я чайник, то пожалуйста с теоретическим обоснованием=))(ну это ессно в самом самом идеале, так хоть скажите как сделать чтобы работала зараза эдакая) smile 
--------------------
[color=purple][/color]Died.Of course, System.StackOverflow 
PM MAIL   Вверх
Idsa
Дата 24.2.2007, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 4
Всего: 62



Я вообще не нашел места, где бы path что-нибудь присваивалось. Получается, что переменная path сохраняет значение, заданное при инициализации, а именно "".


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Сарт
Дата 24.2.2007, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 29.4.2006

Репутация: нет
Всего: 0



Код

public string CheckingPath()
        {
            if (!File.Exists("Setting.xml"))
            {
                XmlWriter writer = XmlWriter.Create("Setting.xml");
                writer.WriteStartElement("path");
                writer.WriteString("Phonebase.xml");
                writer.WriteEndElement();
                writer.Flush();
                writer.Close();
                Path = "Phonebase.xml";
                MessageBox.Show("File 'Settings.xml created'");

            }
            else
            {

                XmlTextReader tr = new XmlTextReader("Setting.xml");
                Path = tr.ReadElementString();
                tr.Close();


            }   
            return Path;
        }


Здесь идея такова- если существует файл Setting.xml то Path присваивается значение в нем хранящаеся
Код

XmlTextReader tr = new XmlTextReader("Setting.xml");
                Path = tr.ReadElementString();
                tr.Close();



ну а если этого файла нет то он создается и Path присваивается значени по уолчанию...
Код

 if (!File.Exists("Setting.xml"))
            {
                XmlWriter writer = XmlWriter.Create("Setting.xml");
                writer.WriteStartElement("path");
                writer.WriteString("Phonebase.xml");
                writer.WriteEndElement();
                writer.Flush();
                writer.Close();
                Path = "Phonebase.xml";
                MessageBox.Show("File 'Settings.xml created'");

            }


Или я что то не так сделал smile 
--------------------
[color=purple][/color]Died.Of course, System.StackOverflow 
PM MAIL   Вверх
mr.DUDA
Дата 24.2.2007, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 24
Всего: 232



Сарт, может XML-файл пустой в момент вызова tr.ReadElementString ?


--------------------
user posted image
PM MAIL WWW   Вверх
Сарт
Дата 24.2.2007, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 29.4.2006

Репутация: нет
Всего: 0



Неа точно не пустой=) Проверял ручками(ну всмысле открывал и читал...)там записанно как и положенно

<?xml version="1.0" encoding="utf-8" ?> 
  <path>Phonebase.xml</path> 

Другое дело я тут подумал что может у меня считывает не то что я думаю?
Хотя с другой стороны когда делаю
 else
            {

                XmlTextReader tr = new XmlTextReader("Setting.xml");
                Path = tr.ReadElementString();
                tr.Close();
                MessageBox.Show(Path);


            }   

Вылетает MessageBox с Phonebase.xml.То есть по идее--читает правильно=)
В общем, объявляю данный вопрос- вопросом "на плюсик"=)

Добавлено @ 14:54 
П.С.
Точнее MesageBox срабатывает 2 раза
1) MessageBox.Show(Path);
2)Тут
Код

private void Form1_Load(object sender, EventArgs e)
       {


           MainForm o = new MainForm();
           o.CheckingPath();
           o.BaseCreate();
           MessageBox.Show(o.Path);
       }



Т.е. значение считывает правильно как я понимаю...
--------------------
[color=purple][/color]Died.Of course, System.StackOverflow 
PM MAIL   Вверх
mr.DUDA
Дата 24.2.2007, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 24
Всего: 232



Всё работает:
Код
using System;
using System.Xml;

class Program
{
    static void Main()
    {
        XmlTextReader reader = new XmlTextReader(@"c:\Setting.xml");
        string path = reader.ReadElementString();
    }
}


На диске С: создал Setting.xml с содержимым, которое ты приводишь:
Код
<?xml version="1.0" encoding="utf-8"?>
<path>Phonebase.xml</path>


В результате path = "Phonebase.xml".


--------------------
user posted image
PM MAIL WWW   Вверх
-Mikle-
Дата 24.2.2007, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 8
Всего: 59



А что это у тебя за сомнительные буковки после EventArgs e в объявлении метода?

Цитата

private void SaveButt_Click(object sender, EventArgs e, Path)



--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
Сарт
Дата 24.2.2007, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 29.4.2006

Репутация: нет
Всего: 0



Это я уже от безисходности пытался сделать свойство входящим параметром, но там, как и следовало ожидать, вылетает ошибка=)

Добавлено @ 16:46 
На самом деле их там нет, неудачно код скопировал=)
Вот нормальный рабочий, за исключением обнуления свойства
Код

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using Microsoft.Win32;
using System.Xml;

namespace PhoneBook
{
    public partial class MainForm : Form
    {
        Color currColor = Color.Tomato;
        public MainMenu MMenu;
        private string path;
        public string Path
        {
            set 
            {
                path = value;
            }
            get
            {
                return path;
            }
        }
        public string CheckingPath()
        {
            if (!File.Exists("Setting.xml"))
            {
                XmlWriter writer = XmlWriter.Create("Setting.xml");
                writer.WriteStartElement("path");
                writer.WriteString("Phonebase.xml");
                writer.WriteEndElement();
                writer.Flush();
                writer.Close();
                Path = "Phonebase.xml";
                MessageBox.Show("File 'Settings.xml created'");

            }
            else
            {

                XmlTextReader tr = new XmlTextReader("Setting.xml");
                Path = tr.ReadElementString();
                tr.Close();
                MessageBox.Show(Path);


            }   
            return Path;
        }
        private void BaseCreate()
        {
            if (!File.Exists(Path))
            {
                XmlWriter writer = XmlWriter.Create("Phonebase.xml");
                MessageBox.Show("New base created.");
            }
            else
            {
                
            }
           
            
        }
       
        public MainForm()
        {
            InitializeComponent();
            CenterToScreen();
            MMenu = new MainMenu();
            MenuItem miFile = MMenu.MenuItems.Add("&File");
            MenuItem miHelp = MMenu.MenuItems.Add("&Help");
            miFile.MenuItems.Add(new MenuItem("Exit", new EventHandler(this.FileExit_Clicked), Shortcut.CtrlX));
            miHelp.MenuItems.Add(new MenuItem("About", new EventHandler (this.HelpAbout_Clicked),Shortcut.CtrlA));
            this.Menu = MMenu;
            BackColor = currColor;
            
           
                
           
            
        }
        
       private void Form1_Load(object sender, EventArgs e)
       {


           MainForm o = new MainForm();
          
           o.CheckingPath();
           o.BaseCreate();
           MessageBox.Show(o.Path);
          
       }

       #region Блок поиска  unrealized
       private void SearchButton_Click(object sender, EventArgs e)
        {

        }
       #endregion
        private void SaveButton_Click(object sender, EventArgs e)
        {


        }
        #region Кнопки Выхода (realized)
        private void ExitButton_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
        private void FileExit_Clicked(object sender, EventArgs e)
        {
            this.Close();
        }
        private void HelpAbout_Clicked(object sender, EventArgs e) 
        {
            MessageBox.Show("Programm version 1.00.This programm was made by Capm. All your wishes and regards mail to [email protected]. Thank you");
        }
        #endregion
        private void SaveButt_Click(object sender, EventArgs e)
        {
            string name = FIOBox.Text;;
            string mobile = MobileBox.Text;
            string home = HomeBox.Text;
            XmlReader reader = XmlReader.Create(Path);
            MessageBox.Show(Convert.ToString(reader));
            
            
            
            

        /*    writer = XmlWriter.Create("sampledata.xml");

            // Write the root element.
            writer.WriteStartElement("book");

            // Write the xmlns:bk="urn:book" namespace declaration.
            writer.WriteAttributeString("xmlns", "bk", null, "urn:book");

            // Write the bk:ISBN="1-800-925" attribute.
            writer.WriteAttributeString("ISBN", "urn:book", "1-800-925");

            writer.WriteElementString("price", "19.95");

            // Write the close tag for the root element.
            writer.WriteEndElement();

            // Write the XML to file and close the writer.
            writer.Flush();
            writer.Close();  
*/
        }

        private void ShowAll_Click(object sender, EventArgs e)
        {
            try
            {
                XmlReader sr = XmlReader.Create(path);
            
            String line;
            while ((line=sr.ReadContentAsString())!=null)
            {
                MessageBox.Show(line);
            }
            }
            
            catch (Exception exc)
            {
                MessageBox.Show("Don't delete file PhoneBase.xml!!");
                MessageBox.Show(exc.Message);
                
            }
        }
        }
    
        

    }

--------------------
[color=purple][/color]Died.Of course, System.StackOverflow 
PM MAIL   Вверх
Idsa
Дата 24.2.2007, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 4
Всего: 62



mr.DUDA, автор же уже написал, что считывание проходит правильно!

Мне кажется, что где-то (возможно и не в приведенном коде) Path (а, может, и path) происходит неверное присваивание. Проверить это можно достаточно просто. Создай ListBox, а в set-обработчике свойства Path добавляй значения, которые присвоились (т. е. вставь строку listBox1.Add(path)). Так мы узнаем, прав я или нет. Но для того чтобы предложенная мною схема работала, нужно, чтобы в коде нигде не было обращения к path напрямую! А такие обращения у тебя есть. Вот например:
Код

try
{
   XmlReader sr = XmlReader.Create(path);      
   String line;
   ...


Добавлено @ 16:54 
А еще лучше не в listBox, а в файл smile

Это сообщение отредактировал(а) Idsa - 24.2.2007, 16:51


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
mr.DUDA
Дата 24.2.2007, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 24
Всего: 232



Смотрю в код. Вижу:
Код
      private void Form1_Load(object sender, EventArgs e)
       {


           MainForm o = new MainForm(); // <--------- вот это что такое ???? 
          
           o.CheckingPath();
           o.BaseCreate();
           MessageBox.Show(o.Path);
          
       }

Получается, создаём новую форму, заполняем её свойство Path, благополучно забываем об этой форме, после чего читаем пустое свойство Path из текущего экземпляра формы. То есть, что я хочу сказать: o.Path и this.Path в коде Form1_Load - свойства двух разных форм. Поэтому убираем "o" вообще или заменяем на "this" smile

Добавлено @ 17:06 
Idsa, "спасибо" что указываешь мне на мои ошибки, особенно в случаях когда можно и обойтись без этого.


--------------------
user posted image
PM MAIL WWW   Вверх
Сарт
Дата 24.2.2007, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 29.4.2006

Репутация: нет
Всего: 0



Вроде ошибка исчезла...Duda объясни мне такую вещь=)
o это был экземпляр класса....
Почему же создается новая форма?
Я так понимал , что строчки

Class1 a = new Class1();

служит для создания объекта класса, чтобы затем можно было вызвать методы этого класса??

П.С.
Ну чайник я еще=) 

П.П.С.
Обещанный плоюиск уходит в копилку к mr. Dude

Добавлено @ 17:13 
2Idsa 
Вообще то .xml это и есть файл=)
--------------------
[color=purple][/color]Died.Of course, System.StackOverflow 
PM MAIL   Вверх
mr.DUDA
Дата 24.2.2007, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 24
Всего: 232



Цитата(Сарт @  24.2.2007,  16:12 Найти цитируемый пост)
Я так понимал , что строчки
Class1 a = new Class1();
служит для создания объекта класса, чтобы затем можно было вызвать методы этого класса??

Это верно, но нестатический метод Form1_Load работает с уже созданным экземпляром формы в this, и новый создавать не нужно.



--------------------
user posted image
PM MAIL WWW   Вверх
Сарт
Дата 24.2.2007, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 29.4.2006

Репутация: нет
Всего: 0



Учтем-с на будущее=)
Усе, вопрос решен, сенкс.

Добавлено @ 17:21 
Так а где кнопочка 
"Пометить вопрос как решенный??"
--------------------
[color=purple][/color]Died.Of course, System.StackOverflow 
PM MAIL   Вверх
Idsa
Дата 24.2.2007, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 4
Всего: 62



Вверху справа напротив темы топика


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Сарт
Дата 24.2.2007, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 29.4.2006

Репутация: нет
Всего: 0



Сенкс
--------------------
[color=purple][/color]Died.Of course, System.StackOverflow 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0587 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.