Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Технологии > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 30.04.2016, 17:28   #1
Вероника99
Форумчанин
 
Регистрация: 15.12.2013
Сообщений: 412
Репутация: 102
По умолчанию Повторный ввод в textBox C#

Добрый день. Мне нужно через массив объектов организовать ввод данных в textBox несколько раз,сделала таким образом:
Код:

 private void button2_Click(object sender, EventArgs e)
        {
 
            Person1[] obj = new Person1[3]; //создание массива объектов
            for (int i = 0; i < 3; i++)
            {
                String s1;
                s1 = textBox8.Text; //считывание данных с textBox
                textBox13.AppendText(String.Format("{0}", s1));
                String s2;
                s2 = textBox9.Text;
                String s3;
                s3 = maskedTextBox1.Text;
 
                String s4;
                s4 = textBox11.Text;
 
                String s5;
                s5 = textBox12.Text;
 
               /* String s6;
                s6 = textBox1.Text;
                Double day1 = Double.Parse(s6);
                String s7;
                s7 = textBox2.Text;
                Double month1 = Double.Parse(s7);
                String s8;
                s8 = textBox3.Text;
                Double year1 = Double.Parse(s8);*/
 
 
                obj[i] = new Person1(s1, s2, s3, s4, s5, 5, 11, 2015); //объявляем объект
 
              //  Person1[] obj = new Person1[3];
 
                /* Person1 ass = new Person1(s1, s2, s3, s4, s5, 2, 3, 2016);
                       ass.virt_func1(ass);*/
 
                int r2 = obj[i].CheckDat();
              
                
                textBox1.Clear(); //чистим поле ввода
                textBox2.Clear();
                textBox3.Clear();
                textBox4.Clear();
                textBox5.Clear();
                textBox6.Clear();
                textBox8.Clear();
                textBox9.Clear();
                maskedTextBox1.Clear();
                textBox11.Clear();
                textBox12.Clear();
               
            
    }
 
        }

но в объект заносятся данные только с первого ввода,второй и третий ввод игнорируется. Могли бы Вы подсказать почему?Спасибо
Вероника99 вне форума   Ответить с цитированием
Старый 30.04.2016, 17:42   #2
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 17,135
Репутация: 3316

icq: 512-765
skype: alexp.frl
По умолчанию

Что за "второй и третий ввод"? Вы ж с одних и тех же текстбоксов читаете + очищаете их на каждой итерации цикла.

И давайте всему нормальные имена, а не s1, s2, s3, s4, s5, button5, ..., textBox42, class98.
Alex11223 на форуме   Ответить с цитированием
Старый 30.04.2016, 17:49   #3
Вероника99
Форумчанин
 
Регистрация: 15.12.2013
Сообщений: 412
Репутация: 102
По умолчанию

А как тогда можно решить следующую задачу: есть класс с полями имя,фамилия...дата очереди. Нужно отсортировать объекты этого класса по дате очереди. Т.е мне нужно с окна организовать ввод данных в объекты,так чтобы после заполнения одной "анкеты" нажимался ОК, после чего все поля ранее заполненные становились пустыми и я заполняла анкету заново,при этом как-бы заполняя второй объект.
Вероника99 вне форума   Ответить с цитированием
Старый 30.04.2016, 18:39   #4
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 17,135
Репутация: 3316

icq: 512-765
skype: alexp.frl
По умолчанию

Что-нибудь типа такого например:
Код:

using System;
using System.Collections.Generic;
using System.Linq;

namespace .......
{
    class Person
    {
        public Person(string firstName, string lastName)
        {
            FirstName = firstName;
            LastName = lastName;

            Validate();
        }

        public string FirstName { get; set; }

        public string LastName { get; set; }

        private void Validate()
        {
            var errors = new List<string>();

            if (String.IsNullOrWhiteSpace(FirstName))
                errors.Add("First name cannot be empty.");
            if (String.IsNullOrWhiteSpace(LastName))
                errors.Add("Last name cannot be empty.");

            if (errors.Any())
                throw new ValidationException(errors);
        }
    }
}

Код:

using System;
using System.Collections.Generic;

namespace .......
{
    class ValidationException : Exception
    {
        public ValidationException(IList<string> errors)
        {
            Errors = errors;
        }

        public IList<string> Errors { get; private set; }
    }
}

Код:

        private readonly List<Person> _people = new List<Person>();

        private void btnOk_Click(object sender, EventArgs e)
        {
            try
            {
                var person = new Person(tboxFirstName.Text.Trim(), tboxLastName.Text.Trim());

                _people.Add(person);

                tboxFirstName.Clear();
                tboxLastName.Clear();
            }
            catch (ValidationException ex)
            {
                MessageBox.Show("Input error: " + String.Join(Environment.NewLine, ex.Errors));
            }
        }

Alex11223 на форуме   Ответить с цитированием
Старый 01.05.2016, 17:50   #5
Вероника99
Форумчанин
 
Регистрация: 15.12.2013
Сообщений: 412
Репутация: 102
По умолчанию

Я пробую сделать Ваш вариант.

Последний раз редактировалось Вероника99; 01.05.2016 в 17:56.
Вероника99 вне форума   Ответить с цитированием
Старый 01.05.2016, 19:34   #6
Вероника99
Форумчанин
 
Регистрация: 15.12.2013
Сообщений: 412
Репутация: 102
По умолчанию

У меня возникла проблема. Есть класс Queue,который как поле содержит массив объектов на класс Pers.
Код:

 public class Queue
    {
        private Pers[] queue;
        
        public Queue(string firstName, string lastName, double d, double m, double y)
        {
            queue = new Pers[] { new Pers(firstName, lastName,d,m,y) }; //ЗДЕСЬ ПРОБЛЕМА
           
        }
}
 
 class Pers
    {
        public Pers(string firstName, string lastName,double d,double m,double y)
        {
            FirstName = firstName;
            LastName = lastName;
            day = d;
            month = m;
            year = y;
 
            Validate();
        }
}

Код:

  public readonly List<Queue> _people = new List<Queue>(); //создаю лист,т.к мне нужно чтобы после каждого 
//полного заполнения формы,нажимался ок,данные заносились в нулевой элемент массива объектов,форма 
//очищалась и по новой,форма заполняется,уже новые данные заносятся в следующий объект и т.д
      
        private void button1_Click(object sender, EventArgs e)
        {
            String s1;
            s1 = maskedTextBox1.Text;
            Double day1= Double.Parse(s1);
            String s2;
            s2 = maskedTextBox2.Text;
            Double month1 = Double.Parse(s2);
            String s3;
            s3 = maskedTextBox3.Text;
            Double year1 = Double.Parse(s3);
   try
            {
               var person = new Queue(textBox1.Text.Trim(), textBox2.Text.Trim(), day1, month1, year1);
 
                _people.Add(person);
 
                textBox1.Clear();
                textBox2.Clear();
                person.Sort();
                //textBox3.AppendText(String.Format("{0} {1} {2}", person.FirstName, person.LastName, person.year));
            }
            catch (ValidationException ex)
            {
                MessageBox.Show("Input error: " + String.Join(Environment.NewLine, ex.Errors));
            }

Проблема в том,что я не знаю,как эти данные заносить последовательно в queue?Т.е после первое заполнения создастся объект queue[0],после второго queue[1] и т.д.Спасибо
Вероника99 вне форума   Ответить с цитированием
Старый 01.05.2016, 19:44   #7
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 17,135
Репутация: 3316

icq: 512-765
skype: alexp.frl
По умолчанию

А Queue точно надо самому реализовывать? Есть же одноименный стандартный класс. https://msdn.microsoft.com/en-us/lib...vs.110%29.aspx

Ну и если уж реализовывать, то посмотрите на основные методы стандартной и делайте аналогично.
Не надо в конструкторе принимать 1 элемент, какой смысл в этом? Нужно сделать метод для добавления элементов. И вместо свойств принимать просто целый Person (а еще лучше сделать ее generic).

И зачем вам и List, и Queue?

И хранить целые числа в Double — это странно. И для дат есть DateTime (+DateTimePicker для ввода в винформс).

Последний раз редактировалось Alex11223; 01.05.2016 в 19:52.
Alex11223 на форуме   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно доработать прогу а именно повторный ввод капч tattoseller Фриланс 0 24.11.2011 16:29
Ввод/вывод даты в TextBox Severny Microsoft Office Excel 16 01.09.2011 23:58
ввод и вывод текста в textBox SUDALV Windows Forms 15 06.03.2011 17:27
ввод в бд sql через textbox Авторитет Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 1 17.02.2011 19:18
Как можно запретить повторный ввод нуля в ячейку StringGrid Ветас Помощь студентам 5 12.11.2009 14:43


18:39.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru