עבור לתוכן

קוד לפתיחת קובץ ב#c.

Featured Replies

פורסם
  • מחבר

א. כן יצרתי אובייקט alramclock בשורה הראשונה בקוד השני.

ב. ראיתי את זה כאן (עשיתי כמו שאמרת חיפשתי #list<t> c וזה מה שיצא).

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

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

נ.ב. קראתי לזה demo כי למצוא לכל דבר שם חדש זה עבודה מעצבנת, אז כל עוד זה לא חלק מהתרגיל אני קורא לו מה שעולה בראש, הפעם demo אבל כשזה יהיה חלק מהתרגיל ברור שאני לא אקרא לו כך (כבר דיברנו על זה, לא?).

נערך על-ידי eido300

  • תגובות 101
  • צפיות 10.3k
  • נוצר
  • תגובה אחרונה
פורסם

זה הקוד שהיית אמור לכתוב:


List<AlarmClock> list = new List<AlarmClock>();

AlarmClock ac = new AlarmClock();
ac.time = ...;
ac.file_name = ...;
// עוד אתחולים...

list.Add(ac);

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


AlarmClock ac = new AlarmClock() {
time = ...;
file_name = ...;
// עוד אתחולים...
};

כאן יש עוד הסבר ודוגמאות.

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

נערך על-ידי שניצל

פורסם
  • מחבר

זה הקוד שהיית אמור לכתוב:

קוד:



AlarmClock ac = new AlarmClock();
ac.time = ...;
ac.file_name = ...;
// עוד אתחולים...

list.Add(ac);
List<AlarmClock> list = new List<AlarmClock>();

ניסיתי את זה, וזה לא עובד.(זה היה אחד מהניסיונות...) עריכה: טעות שלי, זה כן עובד.

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

קוד:


time = ...;
file_name = ...;
// עוד אתחולים...
};
AlarmClock ac = new AlarmClock() {

כאן

יש עוד הסבר ודוגמאות.

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

אוקיי, תודה.

אוקיי, זה מה שיצא:


[LEFT]void add()
{
List<AlramClock> list = new List<AlramClock>();
list.Add(new AlramClock {file_name1=file_name, file_safe_name1=file_safe_name, time1=time,save_alram1=save_alram});
}[/LEFT]


נערך על-ידי eido300

פורסם

מעולה, רק שה-list שלך לא נשמר בשום מקום. הוא צריך להיות שדה של מחלקה כלשהי.

פורסם
  • מחבר

תיקנתי את זה, כך:


[LEFT] public Form1()
{
InitializeComponent();
}


List<AlramClock> list = new List<AlramClock>();
וכו'...[/LEFT]


פורסם
  • מחבר

אוקיי יש לי כמה בעיות חדשות.

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

הבעיות הם כאלה:

1- איך אני כותב לו שיפעיל את הטופס השני כל פעם שלוחצים על הכפתור שאחראי על הפתיחה שלו (הוא כותב שא"א להפעיל דבר שסגרתי כבר).

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

פורסם

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

2. בגלל זה קוראים את התיעוד של המחלקות. תקרא על List.RemoveAt.

פורסם
  • מחבר

1. תודה

2. לזה התכוונתי.

3. יש לי בעיה אני לא מצליח להדפיס את ההתראות, תמיד הוא מדפיס לי רק את ההתראה האחרונה.

זה הקוד:


[LEFT]for (int a = 0; a != ffs.list.Count; a++)
{
AlramList.Text = ffs.list[a].time1.ToString("HH:mm")+"\r\n";


}[/LEFT]


איפה הטעות שלי?

פורסם

תחשוב לוגית מה הקוד הזה עושה. תריץ אותו בראש שלך.

פורסם
  • מחבר

כן, בדיוק התכוונתי לכתוב לך ששכחתי לכתוב לו שיכתוב גם את מה שהיה כתוב מקודם,אבל לא הייתי ליד המחשב אז הקדמת אותי.

[LEFT] AlramList.Text = "";
for (int a = 0; a != ffs.list.Count; a++)
{
AlramList.Text += ffs.list[a].time1.ToString("HH:mm")+"\r\n";


}
[/LEFT]


תודה.

נערך על-ידי eido300

פורסם

:xyxthumbs:

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

נ.ב. למה אתה לא משתמש ב-foreach?

נערך על-ידי שניצל

פורסם
  • מחבר

:cheesy: תודה.

איזה פקדים?(:nixweiss:אני לא ממש מכיר את התכונות של כל הפקדים, בספר עוד לא הגעתי לחלק הזה, נראה לי שהגיע הזמן להפסיק עם תרגילים ולהמשיך ללמוד... חבל, תרגילים זה יותר מעניין:(.)

נ.ב. :kopfpatsch: לא חשבתי על זה... (פשוט אני רגיל להשתמש ב"לולאות")

נ.ב.ב. מממ... בשביל זה אני צריך לכתוב "מונה" (enumerator), ואני עוד לא יודע איך עושים את זה (גם לשם עוד לא הגעתי, עברתי על זה רק מלמעלה)

נערך על-ידי eido300

פורסם
  • מחבר

אז איך כותבים את זה?

[LEFT]foreach (datetime a in ?)
{
AlramList.Text += a.ToString("HH:mm") +"\r\n";
}[/LEFT]


מה כותבים ב? ?

חשבתי לכתוב כך:

[LEFT]ffs.list.time1[/LEFT]


אבל זה לא טוב כי חסר שם סוגריים מרובעות, ובהם מה אני אמור לשים?(ffs זה המופע של form2).וחוץ מזה הוא כותב לי אזהרה על הAlramList.

(Unreachable code detected)

ניסיתי לשים listbox במקום התיבת טקסט והוא הביא לי שגיאות, עשיתי לפי זה והמהדר הביא לי שגיאות, בדקתי גם כאן ולא הבנתי כלום, ניסיתי לתקן לפי מה שהבנתי ממנו וגם אז הוא הביא לי שגיאות, אני כבר די לא יודע מה לעשת עם זה.

עריכה: עבדתי קצת בסגנון נסיון וטעיה והצלחתי, זה מה שמוסיף את ההתראות לרשימה:


[LEFT]private void NewAlram_Click(object sender, EventArgs e)
{
//פותח את הטופס השני שדרכו שומרים התראות
ffs.ShowDialog();
//מוחק את כל מה שהיה עד עכשיו
listBox1.Items.Clear();
//מכניס הכל לרשימה
for (int a = 0; a != ffs.list.Count; a++)
{
listBox1.Items.Add(ffs.list[a].time1.ToString("HH:mm"));
}
}[/LEFT]


וזה מה שמבטל ומוחק (מהרשימה) התראות:

[LEFT] private void DeleteAlram_Click(object sender, EventArgs e)
{
//מוחק את ההתראה לפי האינדקס
ffs.list.RemoveAt(listBox1.SelectedIndex);
//מוחק את ההתראה מהרשימה
listBox1.Items.RemoveAt(listBox1.SelectedIndex);

}[/LEFT]


טוב אני גמרתי להיום אני אגמור את זה מחר.

נערך על-ידי eido300

ארכיון

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

דיונים חדשים