הוספת מרחב שמות ע"י using
-
ב"ה
שלום לכולם!
אז בהמשך לתוכנה שאני מנסה לכתוב.. (כן, כן ההיא על המתפללים :lol: )
כתבתי כמה מחלקות, ואח"כ צירפתי פרוייקט של WPF וכתבתי בו 2 חלונות (לבנתיים..)
הבעיה שלי כרגע היא שהפרוייקט מוגדר תחת namespace אחר (למרות שחשבתי על זה ולכן מראש יצרתי אותו ע"י file>add>new project
אבל זה לא עזר (מלבד זה ששני הפרוייקטים מופיעים לי בחלונית הניווט בצד..)
אח"כ הוספתי את המרחב שמות הראשון של המחלקות ע"י project>add refernce ומתוך הsolution > project בחרתי בו.
עכשיו אני מנסה להפנות אליו ע"י using אבל הוא ממאן להוסיף אותו וכותב לי הודעת שגיאה..
ניסיתי לכתוב בכמה וריאציות אבל שום דבר לא עזר..
אשמח לעצתכם המחכימה!!כמו כן, אנצל את הבמה לשאלה נוספת למבינים בWPF (דוד ל.ט. אני מחכה לתשובה...):
יצרתי את החלון הראשי של התוכנית עם כמה תפריטים כך:
[
עכשיו אני בוחר בהוספת מתפללים ונפתח לי החלון הבא:
אני רוצה שכאשר בסוף ילחצו על הכפתור הוסף מתפלל זה יצור לי עצם מהמחלקה מתפלל, ויזין את הפרטים שהוזנו בתיבות הטקסט לproperties הנכונים.. (כמובן שאני לא מצליח ליישם זאת, כיון שהוא לא מכיר את המחלקה שלי.. ובשביל זה אני צריך תשובה לשאלה הקודמת..)
חשבתי להגדיר לו כתגובה לאירוע הלחיצה שיצור מתפלל חדש בתוך list של מתפללים, ואז לתת שם לכל תיבת טקסט בנפרד ולהגדיר שהתוכן שבתיבה הזאת = מאפיין הנ"ל וכן הלאה. אלא שאינני יודע מהו הקוד שיודע לזהות את התוכן שבתיבה ולשים אותו במשתנה?כמו כן, ראיתי שבwin form יש לו אפשרות ליצור אוטומטית תפריט סטנדרטי של תוכניות וינדוס, האם גם בWPF יש דבר כזה? (לא מצאתי..)
תודה רבה!! (דוד ל.ט. אני אומר לך תודה מראש!! )
שבת שלום וחג שמח!! ושנזכה כולנו יחד לקבל את התורה בשמחה!!נ.ב. דוד ל.ט., שמרתי את המדריכים שלך, ועוד כמה תשובות שענית בפורום כקובץ PDF ואני אדפיס אותם מחר (בלנ"ד) כדי שאוכל לשבת וללמוד אותם בכובד ראש בהמשך!! כה לחי!!
פורסם במקור בפורום CODE613 ב22/05/2015 01:18 (+03:00)
-
הבעיה שלי כרגע היא שהפרוייקט מוגדר תחת namespace אחר (למרות שחשבתי על זה ולכן מראש יצרתי אותו ע"י file>add>new project
אבל זה לא עזר (מלבד זה ששני הפרוייקטים מופיעים לי בחלונית הניווט בצד..)
אח"כ הוספתי את המרחב שמות הראשון של המחלקות ע"י project>add refernce ומתוך הsolution > project בחרתי בו.
עכשיו אני מנסה להפנות אליו ע"י using אבל הוא ממאן להוסיף אותו וכותב לי הודעת שגיאה..המושג namespace הוא מאוד מאוד קוסמטי. במקרה שלך המילה הנכונה היא לא namespace (שיכולים להיות רבים בפרוייקט אחד והמושג "ייבוא" לגביהם עשוי בד"כ סה"כ לחסוך את הכתיבה המלאה), אלא אסמבלי ("יחידה". זה שם שנתנו מפתחי הדוט נט ליחידת קוד דוט נטית - DLL או EXE וכו'). כל פרוייקט מקומפל לאסמבלי משלו, וכדי לפנות מאסמבלי אחד למחלקה שנמצאת באסמבלי אחר יש לבצע Reference.
אם אני מבין נכון: יש לך solution עם פרוייקט מתפללים ופרוייקט חלונאי של WPF. עשית refernce מהWPF למתפללים. בנתיים הכל מעולה, ולכתחילה. רק שאתה נתקל בשגיאה. אנא פרט השגיאה.חשבתי להגדיר לו כתגובה לאירוע הלחיצה שיצור מתפלל חדש בתוך list של מתפללים, ואז לתת שם לכל תיבת טקסט בנפרד ולהגדיר שהתוכן שבתיבה הזאת = מאפיין הנ"ל וכן הלאה. אלא שאינני יודע מהו הקוד שיודע לזהות את התוכן שבתיבה ולשים אותו במשתנה?
בWPF יש שתי אופציות לתקשור עם הUI. או לתת שמות לפקדים ואז יש לך גישה אליהם כמו בWINFORMS. כלומר אם יש לך תיבת טקסט ואתה מוסיף בה את האטריביוט Name (ברירת מחדל בגירסאות ישנות או חדשות של VS למעט 2013) אז אתה יכול לפנות למופע של החלון נקודה שם התיבה שבחרת. זה אופציה א', היא פחות "טובה" (כי יש תלות בין הקוד לתצוגה, כלומר אם תחליף תצוגה תצטרך לשנות חלקים בלוגיקה) אבל היא יותר פשוטה והייתי ממליץ לך עליה במקרים פשוטים או בתור התחלה.
האופציה השניה והמומלצת בד"כ זה עבודה עם Binding. בדרך זו נותנים באיזה שהוא אופן לDataContext של אלמנט ב"עץ" של התצוגה את האובייקט שלך, נניח מתפלל חדש. כעת כל מאפיין של אלמנט כמו Text של TextBox ניתן ל"איגוד" למאפיין של המחלקה מתפלל ע"י ביטוי Binding. זה נראה ככהText="{Binding LastName}"
(זה בהנחה שהDataContect של הtextBox או אחד מאבותיו מוגדר, ולמחלקה שלה יש מאפיין בשם LastName).
כמו כן, ראיתי שבwin form יש לו אפשרות ליצור אוטומטית תפריט סטנדרטי של תוכניות וינדוס, האם גם בWPF יש דבר כזה? (לא מצאתי..)
לא יודע בדיוק למה אתה מתכוון, כנראה שאין את זה בWPF.
נ.ב. דוד ל.ט., שמרתי את המדריכים שלך, ועוד כמה תשובות שענית בפורום כקובץ PDF ואני אדפיס אותם מחר (בלנ"ד) כדי שאוכל לשבת וללמוד אותם בכובד ראש בהמשך!! כה לחי!!
דוקא אני ממליץ לך להמתין עם זה.
אני לא חושב שהמדריכים שלי נחוצים לך בשלב זה (הם נקודתיים מאוד).פורסם במקור בפורום CODE613 ב25/05/2015 12:20 (+03:00)
-
תודה רבה רבה על התשובה!!
אם אני מבין נכון: יש לך solution עם פרוייקט מתפללים ופרוייקט חלונאי של WPF. עשית refernce מהWPF למתפללים. בנתיים הכל מעולה, ולכתחילה. רק שאתה נתקל בשגיאה. אנא פרט השגיאה.
כן, אתה מבין נכון. אני לא מקבל הודעת שגיאה, אלא פשוט הויזואל סטודיו (2013) לא מזהה את המחלקה שלי. לכן, כשאני מנסה ליצור מופע שלה זה מסמן לי בקו אדום מתחת..
אם הבנתי אותך נכון, אז אין צורך להשתמש בusing? כשניסיתי להשתמש בו ולהפנות למחלקה שלי הוא גם סימן לי בקו אדום.. וגם עכשיו כשאני מנסה בלי.. האם אני צריך להגדיר refernce במפורש בקוד (חוץ מלעשות refernce דרך התוכנה)? אם כן, כיצד?האופציה השניה והמומלצת בד"כ זה עבודה עם Binding. בדרך זו נותנים באיזה שהוא אופן לDataContext של אלמנט ב"עץ" של התצוגה את האובייקט שלך, נניח מתפלל חדש. כעת כל מאפיין של אלמנט כמו Text של TextBox ניתן ל"איגוד" למאפיין של המחלקה מתפלל ע"י ביטוי Binding.
בעקבות דבריך חיפשתי בגוגל ומצאתי את זה: אנסה ללמוד דרך שם כיצד עובדים עם זה (במקום להטריח אותך לכתוב לי מדריך אישי..)
avr416 כתב:
כמו כן, ראיתי שבwin form יש לו אפשרות ליצור אוטומטית תפריט סטנדרטי של תוכניות וינדוס, האם גם בWPF יש דבר כזה? (לא מצאתי..)לא יודע בדיוק למה אתה מתכוון, כנראה שאין את זה בWPF.
אני מתכוון שבwin form אתה יכול לבחור מהtollboxs אובייקט מסוג: MenuStrip
ואח"כ ללחוץ עליו עם הכפתור הימני של העכבר ולבחור insert standart items:
וזו התוצאה שמתקבלת:
לא מצאתי דבר כזה בWPF..ושוב, שכוייח על התשובה המפורטת והמושקעת!!
פורסם במקור בפורום CODE613 ב25/05/2015 21:13 (+03:00)
-
בהמשך לתוכנה הנ"ל:
כתבתי את הקוד הבא לכפתור הוסף מתפלל:private void הוסףמתפלל_Click(object sender, RoutedEventArgs e) { var worships = new List<WorSh>(); worships[1] = new WorSh(); worships[1].FirstName = firstName.Text; worships[1].LastName = lastName.Text; worships[1].Adress = adress.Text; Close();
כשאני לוחץ על הכפתור התוכנה קורסת..
בdeubg הוא זרק לי את החריגה: System.ArgumentOutOfRangeException
על השורה בה אני מציב עצם מסוג מתפלל בליסט של מתפללים:worships[1] = new WorSh();
מדוע? האם list אינו יכול להכיל עצמים?
אם כן, כיצד אני יכול לכתוב קוד שכל פעם שלוחצים על הכפתור הוא יצור לי עצם חדש מהמחלקה של המתפללים ויזין לתוכו את הערכים? כי אני צריך שכל פעם הוא יצור עצם בשם אחר, ולא יקרא לכולם באותו שם.. (גם הקוד שלי כרגע לא מועיל.. חשבתי להשתמש בליסט, ולהציב ל worships[worships.count] את הערכים, כך שכל פעם יווצר איבר חדש ברשימה.. אבל התוכנה קורסת לי עוד קודם לכן...)
תודה רבה!פורסם במקור בפורום CODE613 ב26/05/2015 10:14 (+03:00)
-
פשוט הויזואל סטודיו (2013) לא מזהה את המחלקה שלי.
האם היא public?
אגב גם כשיש פס אדום הוא אומר מה השגיאה בחלון Errors למטה או בריחוף עכבר
@avr416בdeubg הוא זרק לי את החריגה: System.ArgumentOutOfRangeException
בכדי להוסיף לרשימה איברים צריך להשתמש במתודה Add ואז אפשר גם לפנות אליהם לפי אינדקס
פרט לכך האינדקס מתחיל מאפס (zero based)var worships = new List<WorSh>(); worships.Add(new WorSh()); worships[0].FirstName = firstName.Text; worships[0].LastName = lastName.Text; worships[0].Adress = adress.Text;
פורסם במקור בפורום CODE613 ב26/05/2015 11:20 (+03:00)
-
תודה רבה על התגובה!
האם היא public?
אגב גם כשיש פס אדום הוא אומר מה השגיאה בחלון Errors למטה או בריחוף עכברכן, היא מוגדרת כpublic.
ההודעה היא:בכדי להוסיף לרשימה איברים צריך להשתמש במתודה Add ואז אפשר גם לפנות אליהם לפי אינדקס
תיקנתי את הקוד.. אבל כשאני מנסה להשתמש באינדקס הוא שוב זורק לי את החריגה הנ"ל
System.ArgumentOutOfRangeExceptionהקוד הוא:
var worships = new List<WorSh>(); worships.Add(new WorSh()); if (worships.Count > 0) { worships[worships.Count].FirstName = firstName.Text; worships[worships.Count].LastName = lastName.Text; worships[worships.Count].Adress = adress.Text; } else { worships[0].FirstName = firstName.Text; worships[0].LastName = lastName.Text; worships[0].Adress = adress.Text; }
הסבר על מטרת הקוד:
אני רוצה שכל פעם שישתמשו בחלון זה יצור משתמש חדש, ויזין אליו את הנתונים. ולא שהוא יצור משתמש חדש אך יזין את הנתונים לworship[0] ..
לכן, בהנחה שא"א להריץ את הcount כשאין איברים בLIST.. אני בודק ע"י הcount מה מספר האיברים ואם אין הוא מציב את הנתונים באיבר הראשון, ואם יש הוא מציב באיבר הריק הראשון [worships.count] בהנחה שאם יש 6 איברים לדוגמא, אז האחרון הוא מספר 5 (כי הראשון 0)..
למה זה לא עובד?? מה הבעיה??
אני כבר מתחיל להתייאש.. כל פעם משהו אחר לא עובד
ותודה לכולם על הזמן שאתם משקיעים בי, ועל כך שאתם סובלים את השאלות שלי..פורסם במקור בפורום CODE613 ב26/05/2015 15:35 (+03:00)
-
כן, היא מוגדרת כpublic.
כנראה שמשהו שם לא בדיוק כמו שאתה מתאר אותו, אחרת זה היה אמור לעבוד. הפתרון היחיד הוא להעלות את ה solution לכאן ואז נוכל לבדוק.
בהנחה שא"א להריץ את הcount כשאין איברים בLIST..
הנחה שגויה הוא פשוט יחזיר 0
למה זה לא עובד?? מה הבעיה??
count מחזיר מספר שלא על בסיס 0 לכן בכדי לגשת לאחרון צריך להפחית ממנו 1
worships.Add(new WorSh()); worships[worships.Count-1].FirstName = firstName.Text; worships[worships.Count-1].LastName = lastName.Text; worships[worships.Count-1].Adress = adress.Text;
או (יותר טוב)
WorSh worsh = new WorSh(); worsh.FirstName = firstName.Text; worsh.LastName = lastName.Text; worsh.Adress = adress.Text; worships.Add(worsh);
אני כבר מתחיל להתייאש.. כל פעם משהו אחר לא עובד
גם אני זוכר לילות לבנים. . . ככה זה כשרוכשים מקצוע, הצד החיובי הוא שטעות ששברת עליה את הראש כמה ימים לעולם לא תשוב עליה
פורסם במקור בפורום CODE613 ב26/05/2015 16:43 (+03:00)
-
תודה רבה! עשיתי כעצתך ואכן זה עובד..
הגדרתי את הLIST של המתפללים תחת הכותרת של הwindow ולא תחת האירוע של הclick
כיון שאינני רוצה שכל לחיצה על הכפתור תיצור רשימת מתפללים חדשה, אלא סה"כ תוסיף עצם חדש לרשימה קיימת.
נהגתי נכון?הפתרון היחיד הוא להעלות את ה solution לכאן ואז נוכל לבדוק.
מה הכוונה להעלות אותו לכאן? את הקבצים שלו? את צילום המסך שלו?
שאלה נוספת: מה ההבדל בין window לבין page בWPF? כלומר, מדוע להוסיף חלון חדש כדי להזין לתוכו מתפללים, ולא להוסיף עמוד חדש (ניסיתי להשתמש בpage ולא הצלחתי למצוא את הפקודה show שלו..)
פורסם במקור בפורום CODE613 ב26/05/2015 22:21 (+03:00)
-
כיון שאינני רוצה שכל לחיצה על הכפתור תיצור רשימת מתפללים חדשה, אלא סה"כ תוסיף עצם חדש לרשימה קיימת.
נהגתי נכון?בהחלט.
מה הכוונה להעלות אותו לכאן? את הקבצים שלו? את צילום המסך שלו?
את הקבצים, כלומר את התיקיה תדחוס ותעלה.
אבל לפני שאתה טורח בדוק היטב שהכל מוגדר כpublic, כי מסתבר שזה הבעיה. קלאס שכתוב ללא public לפניו אף שהוא לא מצויין כprivate אז הוא internal וזה אומר שא"א לגשת אליו מאסמבלי חיצוני.שאלה נוספת: מה ההבדל בין window לבין page בWPF? כלומר, מדוע להוסיף חלון חדש כדי להזין לתוכו מתפללים, ולא להוסיף עמוד חדש (ניסיתי להשתמש בpage ולא הצלחתי למצוא את הפקודה show שלו..)
page זה עולם אחר. אין לזה show אלא משתמשים בדפדפן כמו frame להצגתו. גם לא מאתחלים אותו עם new אלא פשוט הframe עושה זאת. זה די מסובך לפנות לדף "מבחוץ" ובעצם הגישה של אפליקציה מבוססת דפים היא שהדפים הם עצמאיים לגמרי רק שהם חולקים בדרך כלל מקור נתונים סטטי/משותף.
קצת סיפור, בעיקר בגלל שאני לא מכיר את זה טוב :(.פורסם במקור בפורום CODE613 ב27/05/2015 11:01 (+03:00)
-
אבל לפני שאתה טורח בדוק היטב שהכל מוגדר כpublic, כי מסתבר שזה הבעיה. קלאס שכתוב ללא public לפניו אף שהוא לא מצויין כprivate אז הוא internal וזה אומר שא"א לגשת אליו מאסמבלי חיצוני.
אכן כן, זו הייתה הבעיה!! הוספתי public לפני הגדרת המחלקה והכל בא על מקומו בשלום..
כבר כמעט התייאשתי והעתקתי את כל המחלקות הללו למחלקות חדשות בתוך פרוייקט הWPF..
שכויח עצום!!
כבר הייתי בטוח שהתוכנה שלי מקולקלת.. (או שאני מקולקל :lol: )page זה עולם אחר. אין לזה show אלא משתמשים בדפדפן כמו frame להצגתו. גם לא מאתחלים אותו עם new אלא פשוט הframe עושה זאת. זה די מסובך לפנות לדף "מבחוץ" ובעצם הגישה של אפליקציה מבוססת דפים היא שהדפים הם עצמאיים לגמרי רק שהם חולקים בדרך כלל מקור נתונים סטטי/משותף.
אז בעצם זה נועד לכתיבת אתרי אינטרנט (או אפליקציה שמציגה דפי אינטרנט) ולא תוכנה חלונאית..
פורסם במקור בפורום CODE613 ב27/05/2015 19:37 (+03:00)
-
המשך ככה, אתה עושה פה סוף סוף מצב רוח...
אז בעצם זה נועד לכתיבת אתרי אינטרנט (או אפליקציה שמציגה דפי אינטרנט) ולא תוכנה חלונאית..
חלונאי לגמרי רק בסגנון אינטרנטי. במקום להקפיץ חלון אתה מחליף את הפאנל שמול המשתמש.
פורסם במקור בפורום CODE613 ב27/05/2015 21:05 (+03:00)
-
חלונאי לגמרי רק בסגנון אינטרנטי. במקום להקפיץ חלון אתה מחליף את הפאנל שמול המשתמש.
כלומר לא צריך שהתוכנה תרוץ על דפדפן כדי להשתמש בזה?
ככה רוב האפליקציות היום עובדות? לא?
אז כדאי לי ללמוד איך להשתמש בזה.. :lol:פורסם במקור בפורום CODE613 ב27/05/2015 22:46 (+03:00)