C#| העברת מידע בין forms - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

C#| העברת מידע בין forms


ofersto

Recommended Posts

בניתי ספר כתובות עם c#.הוא בנוי בצורה שיש labels מעל listboxes ובתוך ה listbox יש את השם, הכתובת, מס' טלפון וכו' (לכל אחד יש listbox נפרד). למעלה יש כפתור "Add Person" שמה שהוא עושה זה לפתוח form חדש עם textboxes שבהם מכניסים את הפרטים. את כל הפרטים הוא שומר בקובץ xml.

ועכשיו לשאלה:

איך אני עושה שאחרי שב form השני לוחצים "add" כדי להוסיף איש לספר כתובות זה יוסיף אותו ואת הפרטים ב listboxes ב form הראשי?

קישור לתוכן
שתף באתרים אחרים

תערוך בבקשה את הכותרת כך שתכיל את תמצית השאלה (כותרת לדוגמה: "העברת מידע בין טפסים ב-#C").

Form הוא מחלקה לכל דבר. אתה יכול להוסיף לו שדות ופונקציות כמו כל מחלקה אחרת, ולהגדיר אותם כ-public וככה לאפשר גישה אליהם ממחלקות אחרות.

אתה פשוט צריך להגדיר בטופס השני מתודה (או property, או כמה מתודות, מה שנוח לך) שתחזיר את הפרטים שהמשתמש הכניס, או להיפך - להגדיר בטופס הראשון מתודה שאומרת לו להוסיף את פרטי משתמש כלשהו לרשימה, ואז הטופס השני יקרא למתודה הזו.

קישור לתוכן
שתף באתרים אחרים

תערוך בבקשה את הכותרת כך שתכיל את תמצית השאלה (כותרת לדוגמה: "העברת מידע בין טפסים ב-#C").

Form הוא מחלקה לכל דבר. אתה יכול להוסיף לו שדות ופונקציות כמו כל מחלקה אחרת, ולהגדיר אותם כ-public וככה לאפשר גישה אליהם ממחלקות אחרות.

אתה פשוט צריך להגדיר בטופס השני מתודה (או property, או כמה מתודות, מה שנוח לך) שתחזיר את הפרטים שהמשתמש הכניס, או להיפך - להגדיר בטופס הראשון מתודה שאומרת לו להוסיף את פרטי משתמש כלשהו לרשימה, ואז הטופס השני יקרא למתודה הזו.

לא הבנתי. אני די מתחיל ב C#.

לעשות באחד ה Forms:


public void addPerson(){
listbox1.Items.Add(textbox1.Text);
}

?

קישור לתוכן
שתף באתרים אחרים

ה-listbox שאתה רוצה להוסיף אליו את הנתון נמצא בטופס הראשון, וה-textbox שממנו אתה רוצה לקחת את הנתון נמצא בטופס השני. אז קוד כזה לא יכול לעבוד.

אתה צריך שהמתודה addPerson תקבל את הנתון מבחוץ (כפרמטר למתודה) ואז תוסיף אותו ל-listbox.

מצד שני אתה צריך שהטופס השני יקרא ל-addPerson, ויעביר לו את ה-textbox1.Text כפרמטר.

יש מבין?

קישור לתוכן
שתף באתרים אחרים

באופן כללי מאוד, בטופס הראשון צריך להיות משהו כזה:

public void addPerson(string name) {
listbox1.Items.Add(name);
}

ואז בטופס השני צריך לבצע משהו כזה:

form1.addPerson(textbox1.Text);

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

קישור לתוכן
שתף באתרים אחרים

ניסיתי משהו כזה ב Form1:


public void addPerson(string name, string address, string telephone, string email, string cellphone)
{
listBox1.Items.Add(name);
listBox2.Items.Add(address);
listBox3.Items.Add(telephone);
listBox4.Items.Add(email);
listBox5.Items.Add(cellphone);
}

ואת זה ב Form2:


Form1 f = new Form1();
f.addPerson(textBox1.Text, textBox2.Text, textBox3.Text, textBox4.Text, textBox5.Text);

וזה לא עובד

קישור לתוכן
שתף באתרים אחרים

כמעט.

ה-f שהגדרת פה הוא לא הטופס הראשון, אלא הוא אובייקט חדש מאותו טיפוס של הטופס הראשון. אתה צריך לדאוג להעביר את הטופס הראשון בעצמו לטופס השני. כמו שאמרתי, אתה יכול לעשות את זה ע"י כך שתגדיר בקונסטקרטור של Form2 שיקבל פרמטר מטיפוס Form1, ואז כש-Form1 יוצר את ה-Form2 הוא יעבור לו את עצמו (this).

קישור לתוכן
שתף באתרים אחרים

כמעט.

ה-f שהגדרת פה הוא לא הטופס הראשון, אלא הוא אובייקט חדש מאותו טיפוס של הטופס הראשון. אתה צריך לדאוג להעביר את הטופס הראשון בעצמו לטופס השני. כמו שאמרתי, אתה יכול לעשות את זה ע"י כך שתגדיר בקונסטקרטור של Form2 שיקבל פרמטר מטיפוס Form1, ואז כש-Form1 יוצר את ה-Form2 הוא יעבור לו את עצמו (this).

לא הבנתי... מה זה קונסטקרטור?

קישור לתוכן
שתף באתרים אחרים

אגב, אופציה קצת יותר יפה (בעיניי) היא האופציה הראשונה שהצעתי.

לשמור ב-Form2 שדה (או מספר שדות) פומבי שיחזיקו את הפרטים שהמשתמש הכניס, ואז לשלוף את הפרטים האלה בקוד של Form1 - בדומה ל-OpenFileDialog ששומר את שם הקובץ הנבחר בשדה בשם FileName.

קישור לתוכן
שתף באתרים אחרים

אגב, אופציה קצת יותר יפה (בעיניי) היא האופציה הראשונה שהצעתי.

לשמור ב-Form2 שדה (או מספר שדות) פומבי שיחזיקו את הפרטים שהמשתמש הכניס, ואז לשלוף את הפרטים האלה בקוד של Form1 - בדומה ל-OpenFileDialog ששומר את שם הקובץ הנבחר בשדה בשם FileName.

לא מובן בעליל

קישור לתוכן
שתף באתרים אחרים

  • 2 שבועות מאוחר יותר...

היי שניצל,

אני חושב שצורת העבודה הזאת היא לא נכונה ומשרישה דברים לא טובים, הכוונה היא גם לאופציה א' וגם לאופציה ב'. הרי ברור שאם טופס 2 נפתח מטופס 1 אסור לו להכיר אותו (cyclic) רצוי במקרה הזה לזרוק אירוע.

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

בכל מקרה כל הכבוד לך על התמיכה הקבועה באנשי הפורום.

קישור לתוכן
שתף באתרים אחרים

בשיטת העבודה הראשונה שהצעתי אין שום תלות מעגלית, ואין אירועים. מה שאני מציע הוא לעבוד כמו איך שעובדים עם OpenFileDialog. השיטה הזו היא טובה למקרה שהטופס השני הוא תיבת דו-שיח (דהיינו חלון זמני שנפתח כדי לערוך או להכניס פרטים מסויימים, ורק כשסוגרים אותו הטופס הראשון מתעדכן).

בשיטה השנייה אתה צודק, עדיף לעשות את זה עם אירועים. זה יותר מתאים למקרה שרוצים ששני הטפסים יהיו פעילים במקביל.

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...