2015-11-17 3 views
0

У меня есть небольшой набор фильмов, который показывает различную информацию о каждом фильме, включая время начала и время работы. Я хочу добавить новые фильмы в списки через пользовательский ввод (заполнив детали в текстовые поля и нажав кнопку), и я могу добавить имя, жанр и возрастный рейтинг, но я изо всех сил стараюсь добавить время.Добавление нескольких целых чисел из одного текстового поля в массив

Мой код массива выглядит следующим образом:

List<Movies> movies = new List<Movies>(); 
InitializeArrayList(); 
public void InitializeArrayList() 
     { 
      movies.Add(new Movies("The Avengers", "Action", "PG-13", 18, 05, 3, 15)); 
      movies.Add(new Movies("Inside Out", "Adventure", "PG", 16, 25, 1, 52)); 
      movies.Add(new Movies("Jurassic World", "Action/Adventure", "PG-13", 20, 10, 2, 04)); 
     } 

Таким образом, время для чтения в формате двух целых чисел: один в течение часа и один для минут. Он печатает в следующем формате:

18:05

Ниже приведен мой фрагмент кода для добавления:

private void button6_Click(object sender, EventArgs e) 
     { 
      movies.Add(new Movies(textBox1.Text, textBox2.Text, textBox3.Text, Convert.ToInt32(textBox4.Text), Convert.ToInt32(textBox4.Text), Convert.ToInt32(textBox5.Text), Convert.ToInt32(textBox5.Text), 
      this.DisplayData(); 
     } 

В этой части DisplayData() выводит всю информацию в текстовые поля для просмотра массив. Я знаю, что это неправильно, но я не уверен, как это исправить. Кто-нибудь знает, как я могу заставить его прочитать два целых числа из текстового поля и распечатать его?

+1

Int32.TryParse - ваш друг – Steve

+0

Спасибо за ответ; Я просто изучил его, но я не совсем уверен, как его реализовать ... Я немного новичок с C#! – User9123

+0

Я думаю, что Стив пропустил то, что вам нужно 2 целых числа из одного и того же текстового поля. – Sami

ответ

1

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

private void button6_Click(object sender, EventArgs e) 
{ 
    string[] runtime = textBox4.Text.Split(':'); 
    int hours, minutes = 0; 
    if (!int.TryParse(runtime[0], out hours) || !int.TryParse(runtime[1], out minutes)) 
    { 
     //handle exception 
    } 
    movies.Add(new Movies(textBox1.Text, textBox2.Text, textBox3.Text, hours, minutes, Convert.ToInt32(textBox5.Text), Convert.ToInt32(textBox5.Text), 
    this.DisplayData(); 
} 

Вы должны заменить другие Convert.ToInt32 с int.Parse или int.TryParse также.

0

Вы можете разделить и разобрать строку явно, и это будет работать «отлично». Вы можете обнаружить, что код становится сложнее поддерживать, если вы имеете дело с разными культурами, где форматирование времени выполняется по-разному.

IMHO несколько лучше альтернативы было бы признать, что то, что действительно находится в TextBox, является значением времени, и пусть .NET проанализирует это для вас. Вы можете извлечь важные детали по мере необходимости:

private void button6_Click(object sender, EventArgs e) 
{ 
    DateTime showTime = DateTime.Parse(textBox4.Text); 
    TimeSpan duration = TimeSpan.Parse(textBox5.Text); 

    movies.Add(new Movies(textBox1.Text, textBox2.Text, textBox3.Text, 
     showTime.Hour, showTime.Minute, duration.Hours, duration.Minutes, 
    this.DisplayData(); 
} 

IMHO это также делает код более читаемым.

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