2011-05-06 48 views
1

我正在练习使用Hashtable的电话簿示例。访问类方法的问题

我有一个类有2个简单的方法,不知何故,如果我使用我的表单方法访问类,我将无法获得搜索结果,但如果我在类内调用它,我能够,我已经添加了一个计数来检查pPhonebook中是否有任何项目,并且在外部访问时总是为0,欣赏是否有人能指出我的错误,是否与我的Hashtable声明有关?谢谢。

public class Phonebook 
{ 
    public Hashtable pPhoneBook = new Hashtable(); 

    public void AddContactInfo(string perName, string perContact) 
    { 
     pPhoneBook.Add(perName, perContact); 
     SearchContactInfo(perName); // This is okay 
    } 

    public void SearchContactInfo(string perName) 
    { 
     MessageBox.Show(pPhoneBook.Count.ToString()); 
     if (pPhoneBook.ContainsKey(perName)) 
     { 
      string value = (string)pPhoneBook[perName]; 
      MessageBox.Show(value); 
     } 
     else 
     { 
      MessageBox.Show("Not Found"); 
     } 

    } 

形式:

private void txtSearch_Click(object sender, EventArgs e) 
{ 
    if (textBox3.Text != "") 
     { 
     Phonebook pB = new Phonebook(); 
     pB.SearchContactInfo(textBox3.Text); // Not Okay 
     } 
     else 
     { 
     MessageBox.Show("Please fill in the Name field"); 
     } 
} 

private void txtAdd_Click(object sender, EventArgs e) 
{ 
     if (textBox1.Text != "" & textBox2.Text != "") 
     { 
      Phonebook pB = new Phonebook(); 
      pB.AddContactInfo(textBox1.Text, textBox2.Text); 
      textBox1.Text = ""; 
      textBox2.Text = ""; 
     } 
     else 
     { 
      MessageBox.Show("Please fill in both Name and Contact field"); 
     } 
} 

回答

2

这是因为,要创建2个不同的电话本实例

+0

现货!谢谢。 – k80sg 2011-05-06 11:02:48

1

在搜索一下,看来要创建每个德电话簿的新实例时间。所以它被创建为新的和空的。没有添加到它的内容被保留。您应该注意确保其始终从您的表单中搜索电话簿的单个实例。

0

我认为这是因为你的电话簿是空的,你没有人,所以它不会返回任何结果。

0

您正在收到0,因为您的散列表为空。您应该先调用AddContactInfo方法,然后再调用SearchContactInfo。

+0

我已经在其中添加了电话详细信息,如果我在内部访问SearchContactInfo,我会相应地得到这些电话号码。 – k80sg 2011-05-06 11:00:51