2014-12-05 58 views
0

該代碼是在Visual Studio 2012上完成的c#Windows窗體應用程序,該任務的目標是在GUI中使用字典來添加,刪除和搜索書籍。CheckListBox中的字典需要幫助

我已經制定了我的gui應用程序,它包含4個按鈕,2個文本框,2個複選框列表,然後有幾個標籤來解釋它們的功能。

button3應該激活使用ISBN的搜索。 (用戶進入的ISBN textbox1,則包含其中的一部分的所有書籍都將匹配)

這裏是我的表單代碼

Dictionary<string, Book> library = new Dictionary<string, Book>(); 
public Form1() 
{ 
    InitializeComponent(); 
    button1.Text = "Add Book"; 
    button2.Text = "Remove Book"; 
    button3.Text = "Search Using ISBN"; 
    button4.Text = "Search Using Title"; 
    label1.Text = "Enter ISBN below"; 
    label2.Text = "Enter Title below"; 
    label3.Text = "Tick boxes on the left display if a book is loaned or not"; 
    label4.Text = "All books found after search"; 
} 

public void Update() 
{ 
    checkedListBox1.Items.Clear(); 
    foreach (var pair in library) 
    { 
     checkedListBox1.Items.Add(pair.Value); 
    } 
} 
private void button1_Click(object sender, EventArgs e) //Add Button 
{ 
    if (textBox1.Text != "" && textBox2.Text != "") 
    { 
     library[textBox1.Text] = new Book(textBox1.Text, textBox2.Text); 
     Update(); 
    } 
} 
private void button2_Click(object sender, EventArgs e) //Remove Button 
{ 
     library.Remove(textBox1.Text); 
     Update(); 
} 
private void button3_Click(object sender, EventArgs e) //ISBN Search Button 
{ 
} 

}

和書類。

class Book 
{ 
    private String isbn; 
    private string title 
    private Boolean onloan = false; 
    public Book(string isbn, string title) 
    { 
     this.isbn = isbn; 
     this.title = title; 
    } 
    public string ISBN 
    { 
     get { return isbn; } 
     set { isbn = value; } 
    } 
    public string Title 
    { 
     get { return title; } 
     set { title = value; } 
    } 
    override public String ToString() 
    { 
     return this.ISBN + "  " + this.Title; 
    } 
} 

我正在努力與button3。我在textbox1中輸入ISBN的一部分,然後單擊按鈕,然後查看字典,如果發現任何與其匹配的書會在其他checklistbox2中顯示它們。

我已經嘗試了很多方法將它們顯示到checklistbox2,但是當我單擊按鈕時,沒有任何內容出現在checklistbox2中。

我真的很難做到這一點。

我試過了。

編輯:

我發現我要去哪裏錯了,有什麼錯我的邏輯,可悲的是我的form.design.cs不包含

this.button3.Click += new System.EventHandler(this.button3_Click); 

我現在有解決這個問題,一切正常。

+1

你知道你可以(也應該)重命名控件嗎? – 2014-12-05 23:50:35

+0

我在「button3_Click」中看不到任何代碼。你現在試過了什麼? – 2014-12-05 23:52:03

+0

這個問題太充滿噪音和不必要的評論和解釋。你有什麼**特定問題**,以及與那個特定問題相關的**代碼是否會造成你的困難?你的問題不應該拿整本書章來解釋。請將其降低到顯示問題所需的最小文本和代碼*。 – 2014-12-05 23:57:39

回答

0

在我Form1.Designer.cs我沒有包括

this.button3.Click += new System.EventHandler(this.button3_Click); 

我說這和我的代碼工作正常,我用

private void button3_Click(object sender, EventArgs e) //ISBN Search Button 
{ 
    checkedListBox2.Items.Clear(); //clears list on click 

    foreach (var pair in library) 
    { 
     if (pair.Key.Contains(textBox1.Text)) 
     { 
      checkedListBox2.Items.Add(pair.Value); 
     } 
    } 
} 

謝謝大家誰評論幫助我。

0

您可以使用lambda表達式

private void button3_Click(object sender, EventArgs e) //ISBN Search Button 
{ 
    checkedListBox2.Items.Add(_library.First(i => i.Key == textBox1.Text).Value); 
} 
+0

我們之前沒有做過Lambda,所以我不確定它是如何工作的,即使如此,雖然在嘗試此方法後仍然沒有任何內容顯示在checkedListBox2中 – FlameInABox 2014-12-06 03:07:23

+0

嘗試在代碼行I中添加斷點提供,當程序中斷時,查看自動窗口並確保您的庫在文本框文本中具有關鍵字,並且該書的值不爲空。因爲對我來說,代碼工作得很好 – 2014-12-06 03:37:48

+0

我發現了這個問題!你我們是對的,這工作,我失蹤是從我的form.design.cs是 this.button3.Click + = new System.EventHandler(this.button3_Click); 添加它,現在它們被顯示。 – FlameInABox 2014-12-06 03:58:58