2015-11-03 3 views
0

Я инициированный следующее ArrayList книг, которые я могу итерацию по:Поиска объектов в ArrayList

public void InitializeArrayList() 
{ 
    list.Add(new Books("Pride and Prejudice", "Jane Austen", "Romance", "1813")); 
    list.Add(new Books("The Notebook", "Nicholas Sparks", "Romance", "1996")); 
    list.Add(new Books("Carrie", "Stephen King", "Horror", "1974")); 
    list.Add(new Books("The Shining", "Stephen King", "Horror", "1977")); 
    list.Add(new Books("A Game of Thrones", "George R.R. Martin", "Fantasy", "1996")); 
    list.Add(new Books("A Clash of Kings", "George R.R. Martin", "Fantasy", "1998")); 
    list.Add(new Books("A Storm of Swords", "George R.R. Martin", "Fantasy", "2000")); 
    list.Add(new Books("A Feast for Crows", "George R.R. Martin", "Fantasy", "2005")); 
    list.Add(new Books("A Dance with Dragons", "George R.R. Martin", "Fantasy", "2011")); 
    list.Add(new Books("Gone Girl", "Gillian Flynn", "Thriller", "2014")); 
    list.Add(new Books("The Girl on the Train", "Paula Hawkins", "Thriller", "2015")); 
    list.Add(new Books("The Hunger Games", "Suzanne Collins", "Science Fiction", "2008")); 
    list.Add(new Books("Catching Fire", "Suzanne Collins", "Science Fiction", "2009")); 
    list.Add(new Books("Mockingjay", "Suzanne Collins", "Science Fiction", "2010")); 
    list.Add(new Books("Matilda", "Roald Dahl", "Children's Fiction", "1988")); 
    list.Add(new Books("Charlie and the Chocolate Factory", "Roald Dahl", "Children's Fiction", "1964")); 
    list.Add(new Books("Room", "Emma Donoghue", "Fiction", "2010")); 
    list.Add(new Books("Holes", "Louis Sachar", "Fiction", "1998")); 
    list.Add(new Books("About a Boy", "Nick Hornby", "Fiction", "1998")); 
} 

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

Это моя попытка до сих пор:

private void button3_Click(object sender, EventArgs e) 
{ 
    String match = textbox.Text; 
    foreach (Object b in list) 
    { 
     Books book = (Books)b; 
     if (book.Equals(match)) 
     { 
      Form2 form = new Form2(); 
      form.Visible = true; 
     } 
    } 
} 

В принципе, я задаюсь вопросом, как сделать это отправить в эту новую форму с все эти детали?

+1

что ваш вопрос? – Blorgbeard

ответ

4

Другая форма должна быть в состоянии принять ваши данные. Вы можете добавить свойство Form2, который принимает, что-то вроде:

class Form2{ public Book book { get; set; } ...} 

// then in form1: 
Form2 form = new Form2(); 
form.book = book; 
... 
0

Я надеюсь, что ваша книга класс имеет три свойства Автора, Название, Жанр

private void button3_Click(object sender, EventArgs e) 
    { 
     String match = textbox.Text; 
     foreach (Object b in list) 
     { 
      Books book = (Books)b; 
      if (book.Author.Contains(match) || book.Title.Contains(match) || book.Genre.Contains(match)) 
      { 
       Form2 form = new Form2(); 
       form.Book = book; 
       form.Show(); 
      } 
     } 
    } 

И для прохождения досматриваемой Подробности вы можете создайте свойство Book внутри Form2.

+0

это было бы неважно, независимо от того, будет ли он работать так же, как OP инициализировал Список , такой как этот 'var listXX = новый Список () { « Гордость и предубеждение »,« Джейн Остин »,« Романтика », , "1813"}; 'то, что когда-либо было введено в текстовое поле. Text это найдет совпадение .. так что я боюсь, что, не видя класс' Book' .. вы только гадаете .. тоже. он ищет того, что он будет соответствовать многим – MethodMan

0
private void button3_Click(object sender, EventArgs e) 
{ 
String match = textbox.Text; 
List<Books> mybookslist = new List<Books>(); 
foreach (Books b in list) 
{ 
    if (book.Author.Contains(match) || book.Title.Contains(match) || book.Genre.Contains(match)) 

    { 
     mybookslist.Add(b); 
    } 
} 
//Navigation code here with your data(mybookslist) 
} 

В настоящее время в mybookslist есть все книги, где указаны слова с условиями поиска.

0

Если вы хотите, чтобы проверить это InitializingList<T>(){} вы можете увидеть, что же будет работать .. но я хотел бы предложить, что вы не жесткий код, если вы могли бы сделать List<Class> смысл вашего Books класса, то вы бы просто создать новый экземпляр объекта и добавить этот объект в список, основанный на жесткий коде, это будет более простым способом инициализации List<T> объекта, но создание List<ClassObject> будет лучшим подходом

var bookList = new List<object>() 
{ 
    "Pride and Prejudice", "Jane Austen", "Romance", "1813", 
    "The Notebook", "Nicholas Sparks", "Romance", "1996", 
    "Carrie", "Stephen King", "Horror", "1974", 
    "The Shining", "Stephen King", "Horror", "1977", 
    "A Game of Thrones", "George R.R. Martin", "Fantasy", "1996", 
    "A Clash of Kings", "George R.R. Martin", "Fantasy", "1998", 
    "A Storm of Swords", "George R.R. Martin", "Fantasy", "2000", 
    "A Feast for Crows", "George R.R. Martin", "Fantasy", "2005", 
    "A Dance with Dragons", "George R.R. Martin", "Fantasy", "2011"//, 
    //etc......, 
}; 

String match = "A Feast for Crows"; 
var bookslist = new List<object>(); 
foreach (Object b in bookList) 
{ 
    if (b.Equals(match)) 
    { 
     bookslist.Add(b); 
    } 
} 
Смежные вопросы