עבור לתוכן

כמה בעיות ב-C#

Featured Replies

פורסם

אני לומד את השפה C# באופן עצמאי במשך כמה שבועות כבר.

החלטתי לעשות פרויקט קטן ב-WFA. הפרויקט הוא ליצור תוכנה לחישוב משכורת שמחולקת לשניים: עובד רגיל ואחמ"ש (אחראי משמרת).

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

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

יש לי COMBOBOX שבו יש אפשרות לבחור או "תעריף רגיל" או "תעריף אחמ"ש.

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

אך אני רוצה גם שברגע שהמשתמש בוחר ב-"אחמ"ש" יחלו עליו משתנים אחרים התקפים רק לגבי "אחמ"ש".

כמו כן, אני רוצה לעשות כך, שבמידה והמשתמש ישכח להכניס ערך/ילדג על ערך, והתוכנה תקפיץ חלון עם הודעה שיבדוק את השדות שלו.

הנה הקוד עד עכשיו:

http://pastebin.com/V7736gBU

אם משהו לא מובן בקוד אני אסביר בשמחה.

תודה רבה לכם!

פורסם

קודם כל, אין דבר כזה WFA, אני חושב שאתה מתכוון ל-WinForms (:

הערות כלליות: אין סיבה להשאיר handlers ריקים, ו-consts מגדירים ברמת ה-class ולא בתור פונקציות.

לשאלה שלך - מה הכוונה ב"יחלו עליו משתנים אחרים"? הכוונה היא כללים אחרים?

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

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

פורסם

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

יש לי COMBOBOX שבו יש אפשרות לבחור או "תעריף רגיל" או "תעריף אחמ"ש.

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

אך אני רוצה גם שברגע שהמשתמש בוחר ב-"אחמ"ש" יחלו עליו משתנים אחרים התקפים רק לגבי "אחמ"ש".

אפשר להשתמש ב VALIDATORS כמו שהבחור מעליי רשם כבר, במקרה שלך עדיף לכתוב משהו משלך פשוט יותר.

כתוב עוד Class שיקרא ValidatorManager ויכיל פונ' בדיקה למשתנים שלך או אפשר אפילו לשלוח אליו את ה class הנוכחי עם כל המשתנים שלו ולבדוק אותם אחד אחד ולהחזיר שגיאה אם משהו לא הוכנס כראוי.

זאת עוד סיבה, למה עדיף להגדיר משתנים שמתקבלים מהיוזר מחוץ לפונקציית הקלט ובתוך ה class הפרטי שלך, כלומר המשתנים יהיו data members של ה class שאתה כותב בו כרגע

כמו כן, אני רוצה לעשות כך, שבמידה והמשתמש ישכח להכניס ערך/ילדג על ערך, והתוכנה תקפיץ חלון עם הודעה שיבדוק את השדות שלו.

כמו כן שאתה כותב קוד מהסוג הזה המקבל ערך מהמשתמש מומלץ לעטוף ב try & catch ואז ברגע שתהיה שגיאה תוציא הודעה וחכה לקלט שוב (כלומר תטען את ה class שוב - מאין רקורסיה שכזה)

try{

lowShiftStt = int.Parse(textBox1.Text);


  • MidShiftStt = int.Parse(textBox2.Text);


  • LongShiftStt = int.Parse(textBox3.Text);


  • }
    (catch (Exception
    }
    תוציא הודעה למשתמש להכניס את הערכים הנכונים ותחזור לקלוט שוב

פורסם

תשתמשו בבקשה בתגית הקוד (code.gif) בשביל להכניס קוד.

פורסם
  • מחבר

קודם כל, אין דבר כזה WFA, אני חושב שאתה מתכוון ל-WinForms (:

הערות כלליות: אין סיבה להשאיר handlers ריקים, ו-consts מגדירים ברמת ה-class ולא בתור פונקציות.

לשאלה שלך - מה הכוונה ב"יחלו עליו משתנים אחרים"? הכוונה היא כללים אחרים?

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

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

1.כן, התכוונתי לזה... חשבתי שזה פשוט Windows Form Application :)

2.השינויים שהתכוונתי אליהם זה שברגע שאני אשנה ב-COMBOBOX לאפשרות ה"אחמ"ש", יחלו עליו VARIABLES אחרים. הרי בתוכנה צריך להכניס לטקסט בוקס נתונים, וברגע שלוחצים "חשב", התוכנה מחשבת בהתאם לנתונים שנקבעו מראש. אז אני רוצה שברגע שהמשתמש יחליף לאחמ"ש, "יוגדרו" נתונים אחרים. מקווה שהסברתי כמו שצריך /:

3. אני רוצה שברגע שאלחץ על כפתור, הוא לא יעבור על ה-LABLES אלה על הטקס בוקס, ויוודא שהם לא ריקים ויש בהם נתון. איך אני עושה זאת?

תודה רבה לכל עונה ועוזר!

פורסם

אפשרות.. תיצור

List<TextBox>

תוסיף בשלב האתחול של הFORM את כל הTextBoxים לרשימה.. וכשתלחץ על כפתור החישוב הסופי

תרוץ על הרשימה עם foreach ותבדוק אם

LabelX.text == String.Empty()

חוץ מזה, בשבילך.. התכנות שלך דיי מפוזר ולא מחולק נכון. תשתדל להיות יותר פדנט.

ארכיון

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

דיונים חדשים