PDA

View Full Version : سوال: مشكل در حذف عنصر از HashTable



iman_n21
یک شنبه 26 خرداد 1387, 14:49 عصر
سلام
بنده يك برنامه نوشتم براى تمرين HashTable
اما متد حذف از Hash Table درست كار نميكنه
موقعى كه ميخوام يه عضو رو حذف كنم ظاهرا مشكل نداره و درست حذفش ميكنه ولى اگر از دوباره همون عنصر رو جستجو كنم پيداش ميكنه
يا اگر بخوام يه عنصر اضافه كنم و كليدش رو كليد عنصرى بزارم كه قبلا موجود بوده ولى پاكش كردم باز هم ميگه موجوده

كليد همون phoneNumber هست


//****************** REMOVE **********************
private void btnRemove_Click(object sender, EventArgs e)
{
if (txtPhone.Text == "")
MessageBox.Show("plz Enter phone Number To delete", "Error");
else if (MyHashTable.Contains(txtPhone.Text) == false)
{
MessageBox.Show("Not Fond this Phone_Number !", "Error");
Clear();
}
else
{
Student objStudentToDelete = (Student)MyHashTable[txtPhone.Text];
DialogResult result = MessageBox.Show("Are U Sure To DELETE " +
objStudentToDelete.Name + " ?"
, "DELETE",
MessageBoxButtons.YesNo,
MessageBoxIcon.Question);
if (result == DialogResult.Yes)
{
lstBox.Items.Remove(objStudentToDelete);
Clear();
MyHashTable.Remove(txtPhone.Text);
MessageBox.Show(" item Removed ", "Report");
}

}
}

iman_n21
دوشنبه 27 خرداد 1387, 17:48 عصر
كسى نيست در اين زمينه اين بيسواد رو يارى كنه ؟

راستى :
فرق String با string چيه ؟ (S كوچك و بزرگ)

ASKaffash
دوشنبه 27 خرداد 1387, 17:52 عصر
سلام
هیچ فرقی ندارد کاملا یکی است اولی Structure است ودومی هم همینطوره ولی شبیه سازگاری با گذشته C است

ASKaffash
دوشنبه 27 خرداد 1387, 18:04 عصر
سلام
این نمونه کد را تست کردم وبرایت قرار دادم برنامه ات را براین اساس تغییر بده تا نیازی به استفاده از HashTable نباشد :


public partial class Form4 : Form
{
List<string> L = new List<string>();
public Form4()
{
InitializeComponent();
}
private void Form4_Load(object sender, EventArgs e)
{
L.Add("1000");
L.Add("2000");
L.Add("3000");
L.Add("4000");
L.Add("5000");
L.Add("6000");
L.Add("7000");
}
private void button1_Click(object sender, EventArgs e)
{
if (L.Contains(this.textBox1.Text.Trim()))
L.Remove(this.textBox1.Text.Trim());
this.listBox1.Items.Clear();
this.listBox1.Items.AddRange(L.ToArray());
}
}

iman_n21
سه شنبه 28 خرداد 1387, 01:03 صبح
دوست عزيزم :
اولا كه بينهايت ازت ممنونم به خاطر توجهت
و دوم اينكه راستش من نميخوام Hash table رو حذف كنم، چون در واقع اين برنامه فقط يك تمرين براى مفاهيم خود Hashtable هست و كار خاصى ديگه اى انجام نميده

ASKaffash
سه شنبه 28 خرداد 1387, 15:23 عصر
سلام
شما درست میگوئید این کد که من نوشتم مشکلی که گفته اید را دارد :


Hashtable H = new Hashtable();
public Form4()
{
InitializeComponent();
}
private void Form4_Load(object sender, EventArgs e)
{
H.Add(0, "10");
H.Add(1, "20");
H.Add(2, "30");
H.Add(3, "40");
H.Add(4, "50");
}
private void button1_Click(object sender, EventArgs e)
{
string s = this.textBox1.Text.Trim();
if (H.ContainsValue(s))
H.Remove(s);
this.listBox1.Items.Clear();
for (int i = 0; i < H.Count; i++)
this.listBox1.Items.Add(H[i]);
}