Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
433 / 298 / 82
Регистрация: 11.12.2010
Сообщений: 1,209
1
.NET 4.x

Разработать приложение Windows Forms, позволяющее организовать телефонную книгу

18.02.2012, 05:08. Показов 1989. Ответов 2
Метки нет (Все метки)

Само задание
Разработать приложение Windows Forms, позволяющее организовать телефонную книгу.
Требования:
1. Данные должны сохраняться при закрытии приложения.
2. Для каждой персоны необходимо сохранять несколько контактов.
3. Пользователь может добавлять, изменять и удалять персон или контакты.

Примечание: список персон и контактов реализовать используя тип BindingList<>.

Вылитает с ошибкой. Ругаясь что в _Saves null;
класс персона
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace Lab25
{
    [Serializable]
    class Person
    {
        [Serializable]
        internal class Contact
        {
            String _Type_Contact,
                   _Value_Contact;
 
            public String Type_Contact
            {
                get { return _Type_Contact; }
                set { _Type_Contact = value; }
            }
            public String Value_Contact
            {
                get { return _Value_Contact; }
                set { _Value_Contact = value; }
            }
        }
 
        String /*_Family_Name,//Фамилия
               _Name,//Имя
               _Middle_Name,*/
               _FIO; //Отчество
        /*public String Family_Name
        {
            get { return _Family_Name; }
            set { _Family_Name = value; }
        }
        public String Name
        {
            get { return _Name; }
            set { _Name = value; }
        }
        public String Middle_Name
        {
            get { return _Middle_Name; }
            set { _Middle_Name = value; }
        }*/
        public String FIO
        {
            get { return _FIO; }
            set { _FIO = value; }
        }
        List<Contact> _Contact = new List<Contact>();//Список контактов;
 
        public List<Contact> _Contacts
        {
            get { return _Contact; }
        }
        /// <summary>
        /// Добавляет контакт для персоны
        /// </summary>
        /// <param name="_Type_Contact">Тип контакта ISQ/Telephone/Skype</param>
        /// <param name="_Value_Contact">Контактные данные Номер/ID</param>
        public void Add_Contact(String _Type_Contact, String _Value_Contact)
        {
            _Contact.Add(new Contact { Type_Contact = _Type_Contact, Value_Contact = _Value_Contact });
        }
 
        /// <summary>
        /// Удаляет контакт персоны
        /// </summary>
        /// <param name="_Type_Contact">Тип контакта ISQ/Telephone/Skype</param>
        /// <param name="_Value_Contact">Контактные данные Номер/ID</param>
        public void Delite_Contact(String _Type_Contact, String _Value_Contact)
        {
            _Contact.Remove(new Contact { Type_Contact = _Type_Contact, Value_Contact = _Value_Contact });
        }
    }
}
на самой форме есть comboBox1, dataGridView1, + компонент bindingSource1
сам класс
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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.Runtime.Serialization.Formatters.Binary;
using System.Xml.Serialization;
using System.IO;
 
 
namespace Lab25
{
    public partial class FRM_Main : Form
    {
        public FRM_Main()
        {
            InitializeComponent();
        }
 
        BindingList<Person> Contacts = new BindingList<Person>();
 
        private void FRM_Main_Load(object sender, EventArgs e)
        {
            //Contacts.Add(new Person { Family_Name="zzz", Middle_Name="hj", Name="jkhj" });
            Contacts.Add(new Person {FIO = "GHJ jkef eh" });
            Contacts[0].Add_Contact("isq", "5565");
            comboBox1.DataSource = Contacts;
 
        }
 
        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if ((sender as ComboBox).Items.Count!= 0)
            bindingSource1.DataSource = Contacts[(sender as ComboBox).SelectedIndex]._Contacts;
            dataGridView1.DataSource = bindingSource1;
        }
 
        private void FRM_Main_FormClosed(object sender, FormClosedEventArgs e)
        {
            XmlSerializer _Saves = new XmlSerializer(typeof(BindingList<Person>)); //тут вылетает
            using (FileStream _fs = new FileStream("base.xml", FileMode.Create))
                _Saves.Serialize(_fs, Contacts);
        }
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.02.2012, 05:08
Ответы с готовыми решениями:

посоветуйте книгу по Windows Forms
День добрый, занимаюсь изучением языка программирования C#, на сегодняшний день прочитал книгу...

Приложение Windows forms
Здравствуйте, я начинающий в c-sharp и решил написать свое приложение. Вот код: using System;...

Разработать приложение, позволяющее организовать работу по учету занятости номеров гостиницы
Всем доброго времени суток! Решила сама начать осваивать С++ до поступления в институт, где...

Разработать приложение Windows Forms
помогите пожалуйста!... мне нужно Разработать приложение Windows Forms, которое по названию...

2
Эксперт .NET
14882 / 11268 / 2952
Регистрация: 17.09.2011
Сообщений: 18,874
18.02.2012, 11:16 2
1. Для сериализации через XmlSerializer аттрибут [Serializable] не нужен.
2. Какое сообщение вылетает?
0
Эксперт .NET
4338 / 2000 / 387
Регистрация: 27.03.2010
Сообщений: 5,450
Записей в блоге: 1
18.02.2012, 11:55 3
Я тут саму сериализацию чуть изменил, чтобы выходной xml был не в одну строку, а красиво оформлен, а так и твой вариант работал. И что-то у меня сомнения, что класс Contact должен быть вложенным.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
    public class Person
    {
        List<Contact> _сontacts = new List<Contact>();//Список контактов;
        String _lfp; //Отчество
 
        public string LFP //last name - фамилия, first name - имя, patronymic - отчество
        {
            get { return _lfp; }
            set { _lfp = value; }
        }
 
        public List<Contact> Contacts
        {
            get { return _сontacts; }
        }
 
        /// <summary>
        /// Добавляет контакт для персоны
        /// </summary>
        /// <param name="type">Тип контакта ISQ/Telephone/Skype</param>
        /// <param name="value">Контактные данные Номер/ID</param>
        public void AddContact(string type, string value)
        {
            _сontacts.Add(new Contact { Type = type, Value = value });
        }
 
        /// <summary>
        /// Удаляет контакт персоны
        /// </summary>
        /// <param name="type">Тип контакта ISQ/Telephone/Skype</param>
        /// <param name="value">Контактные данные Номер/ID</param>
        public void DeleteContact(string type, string value)
        {
            _сontacts.Remove(new Contact { Type = type, Value = value });
        }
    }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    public class Contact
    {
        string _type;
        string _value;
 
        public String Type
        {
            get { return _type; }
            set { _type = value; }
        }
 
        public String Value
        {
            get { return _value; }
            set { _value = value; }
        }
    }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    public partial class Form1 : Form
    {
        BindingList<Person> _persons = new BindingList<Person>();
 
        public Form1()
        {
            InitializeComponent();
 
            _persons.Add(new Person { LFP = "Сергеев Сергей сергеевич" });
            _persons.Add(new Person { LFP = "Алексеев Алексей Алексеевич" });
            _persons[0].AddContact("iсq", "5565");
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            string file = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), "base.xml");
            XmlSerializer serializer = new XmlSerializer(typeof(BindingList<Person>));
            using (StreamWriter sw = new StreamWriter(file))
            {
                serializer.Serialize(sw, _persons);
            }
        }
    }
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfPerson xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Person>
    <LFP>Сергеев Сергей сергеевич</LFP>
    <Contacts>
      <Contact>
        <TypeContact>iсq</TypeContact>
        <ValueContact>5565</ValueContact>
      </Contact>
    </Contacts>
  </Person>
  <Person>
    <LFP>Алексеев Алексей Алексеевич</LFP>
    <Contacts />
  </Person>
</ArrayOfPerson>

Не по теме:

С кого ты взял пример оформления кода? Вообще жесть, похлеще обфускатора. Я про _Value_Contact и прочие прочерки не к месту, да и вообще всё не так.



Может тебе это интересно (воспринимай как дружеский совет):
Все поля класса пишем в стиле camelCase начинаются с прочерка (начинать с прочерка необязательно) - string _contact;
Все названия классов, методов, свойств, событий пишем в стиле PascalCase - public void SomeMethod(string newText) {}
Если интересует правильно написание слова по-английски, то есть хотя бы Google Translate или ABBYY онлайн словарь
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.02.2012, 11:55

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Разработать приложение Windows Forms
которое позволяет ввести сторону квадрата, вычислить площадь этого квадрата и отобразить его...

Разработать приложение Windows Forms
Разработать приложение Windows Forms, позволяющее при вводе целого числа, лежащего в диапазоне...

Разработать Windows Forms приложение, содержащее ListBox и кнопку
Разработать Windows Forms приложение, содержащее ListBox и кнопку. По нажатию на кнопку при помощи...

Разработать приложение шифр Вижинера на Windows Forms из консольного
У меня есть консольное приложение. Необходимо создать Windows Forms приложение. Консольное...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.