עבור לתוכן

שאלה ב #c לגבי מערך דינמי

Featured Replies

פורסם

שלום אני חדש בתוכנה זו ורציתי לשאול שאלה:

יצרתי לי class כזה:

[left]public class Employee
{
public int id;
public string name;
public string city;
public int salary;
{[/left]

יצרתי לי מערך דינמי והגדרתי אובייקט ל class

[left]
public partial class Form1 : Form
{
ArrayList employeeData = new ArrayList();
Employee employeeSearch = new Employee();[/left]


ברצוני שבלחיצת כפתור מסויים הקטסטים שנמצאים בטקסטבוקס ייכנסו לאובייקט והאובייקט ייכנס למערך הדינמי

[left]
private void button1_Click(object sender, EventArgs e)
{
employeeSearch.id= Int32.Parse(textBox1.Text);
employeeSearch.name=textBox2.Text;
employeeSearch.city = textBox3.Text;
employeeSearch.salary = Int32.Parse(textBox4.Text);
employeeData.Add(employeeSearch);[/left]

אך כשאני בודק אני תמיד רואה רק את הנתון האחרון שהכנסתי , מה אני מפספס? מה הטעות שלי?

דרך אגב זה הלחצן שמראה לי את הנתונים שהכנסתי עד כה למערך (אולי בו הטעות?)

[left][center][left]private void button2_Click(object sender, EventArgs e)
{
textBox7.Text = "";
foreach (Employee employeeSearch in employeeData)
{
int num = employeeSearch.id;
string name = employeeSearch.name;
textBox7.Text = string.Format("ID of {0} is {1}", name, num, Environment.NewLine);[/left]

[/center][/left]

}

תודה מראש.

פורסם

שלום! ערוך בבקשה את הכותרת כך שתכיל את תמצית השאלה, ועטוף את הקוד שלך בטג קוד במקום להצמיד שמאלה (הכפתור שנראה כמו #, ליד ציטוט).

הבעיה שלך נובעת מזה שב-button1_click אתה לא יוצר Employee חדש, אלא משנה את הקיים ומוסיף אותו. ב-#C, כל ההתייחסויות הן by reference. זה אומר שכשאתה עושה (employeeData.Add(employeeSearch אז למערך לא נוסף עותק של employeeSearch, אלא מצביע ל-employeeSearch הקיים. בסופו של דבר, עם כל לחיצה על button1, לא נוסף למערך אובייקט חדש, אלא נוספת התייחסות חדשה לאותו אוביקט בדיוק (ככה שהמערך בעצם מכיל הרבה פעמים את אותו האובייקט).

הפתרון הוא ש-employeeSearch לא יהיה איבר של form1, אלא תגדיר new Employee בכל לחיצה על הכפתור.

פורסם
  • מחבר

קודם כל תודה

אבל עשיתי מה שאמרת לי ועדיין אני רואה בכל פעם שורה אחת ( האחרונה שהכנסתי ולא את כל השורות) מדוע?

פורסם

אני חוזר ומבקש:

ערוך בבקשה את הכותרת כך שתכיל את תמצית השאלה, ועטוף את הקוד שלך בטג קוד במקום להצמיד שמאלה (הכפתור שנראה כמו #, ליד ציטוט).

ולגבי השאלה שלך, זה כי אתה עושה:

 textBox7.Text = 

אז ברור שזה ידרוך על מה שהיה שם קודם. אתה צריך להוסיף למה שהיה שם קודם (באמצעות +).

פורסם
  • מחבר

תודה רבה עזרת לי מאוד

פורסם

בבקשה.

דרך אגב, ב-dotnet כבר לא ממש נהוג להשתמש ב-ArrayList, אלא עדיף להשתמש ב-generic List, כלומר:

List<Employee>

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים