FORMS בC# .NET, SHOW וHIDE

  • פותח הנושא neko
  • פורסם בתאריך

neko

New member
FORMS בC# .NET, SHOW וHIDE

אני כותב אפליקציה שכוללת מסך LOGIN ומסך ראשי לאחר LOGIN. בפונק' של הCLICK על ה-SUBMIT BUTTON ביצעתי את הקוד הפשוט:
Form2 newForm = new Form2; newForm.show(); this.hide();​
זה עובד, אבל לא אלגנטי במיוחד - אפשר ללחוץ על כפתור SUBMIT כמה פעמים ונתפתחים כמה FORM2 חדשים, וכשסוגרים את הFORM2 שנפתח, התוכנית לא נסגרת (כי FORM1 כנראה עדיין נסתר ברקע). יש רעיון איך לשפר את זה?
 

Zeliran

New member
....

התוכנית לא נסגרת באמת כי Form1 עדיין פועל.. דרך אגב.. אתה לא אמור להשתמש בסוגריים? זאת אומרת, ככה:
Form2 newForm = new Form2();​
מממ.. ולמה אתה מתכוון בדרך יותר אלגנטית?
 

neko

New member
כן, נכון לגבי הסוגריים...

דרך יותר אלגנטית = דרך שבה הסגירה של FORM2 תסגור את התוכנית. אני לא מבין הרבה ב#C (פרוייקט ראשון מהלימודים, עדיין מתרגל לכל נושא נFORMS).
 

eofek

New member
יש כמה אפשרויות

תבדוק אפשרות להשתמש ב ShowDialog במקום Show אם זה רלוונטי למצב. חוצמזה, כדי למנוע הקלקות חוזרות, אתה צריך או לעשות DISABLE לכפתור אחרי פתיחת FORM ו ENABE חזרה כאשר נ Form נסגר, או לספור מופעים , ואם יש מעל 1 אז לעצור את ה EVENT בהתחלה...
 

neko

New member
אחלה, ../images/Emo51.gif, רק מה ההבדל בין

SHOW לSHOWDIALOG?
 

eofek

New member
ההבדל

הוא ש ShowDialog יהפוך את החלון לעליון ביותר ולא ימשיך את ריצת הקוד שאחרי שורה זו עד שהפורם ייסגר. תקרא על ההבדל ב MSDN.
 

Zeliran

New member
אז את יכול פשוט..

במקום לעשות Hide ל Form1, אתה פשוט יכול לעשות לו Dispose אחרי שפתחת את הטופס השני... וההבדל בין Show() לבין ShowDialog() הוא ש showDialog מציג את הטופס בתור.. dialog.. אתה יכול להכנס לקישור לפרטים..
 

sharkyM

New member
סגירת אפליקציה

באירוע close של הטופס:
Application.Exit();​
 

Zeliran

New member
נצל"ש... מה ההבדל בין..

Applicaiton.Exit(); System.Enviorment.Close(0);​
חוץ מהעובדה שבשני(אולי זה exit.. כבר לא ממש זוכר..) אז מחזירים 0 או 1 ... יש עוד הבדל חוץ מזה?
 

gilad g

New member
הממ

מה שאני הייתי עושה זה כותב ב-Main של האפליקציה שלך את הדבר הבא:
LoginForm loginForm = new LoginForm(); /* .NET has a nice mechanism for treating forms as dialog boxes, by returning a DialogResult enum from the ShowDialog method. See MSDN on ShowDialog. */ DialogResult res = loginForm.ShowDialog(); if (res == DialogResult.OK) { MainForm mainForm = new MainForm(); Application.Run(mainForm); }​
זה אמור לעבוד
 

neko

New member
הממ.. בסוף מסתבר שהם רוצים

שכשסוגרים את הFORM העיקרי, זה חוזר לLOGIN, אז עשיתי את זה עם משתנה INTERNAL מסוג LOGINFORM שהעברתי לFORM השני. עובד נפלא. אבל הייתי שמח להסבר על הקטע הזה, מה הוא עושה ולמה...
 

neko

New member
עוד שאלה, הפעם BINDING.

יש לי כמה COMBOBOX וTEXTFIELD, ואני רוצה להעביר את המידע מתוכם לתוך PROPERTIES של אובייקט אחר. ניסיתי לעשות השמה ישירה:
myObject.Text = textField.Text;​
אבל זה לא עבד בכ-לל. המתרגלת אמרה משהו על זה שצריך לעשות את זה עם BINDINGS. 1. איך עושים את זה עם BINDING? 2. למה השמה ישירה לא עובדת?
 

neko

New member
טוב, מישהו נתן לי את הקוד,

אבל עדיין אני לא מבין למה ההשמה הישירה לא עבדה...
 

neko

New member
די!!! אני משתגע מזה!

הקוד הבא:
message.Date = DateTime.UtcNow; Console.WriteLine(DateTime.UtcNow.ToString()); Console.WriteLine(message.Date.ToString());​
מוציא לי את זה:
17/04/2004 10:07:37 01/01/0001 00:00:00​
איך זה יכול להיות???
 

neko

New member
תתעלמו, עשיתי משהו ממש דבילי ../images/Emo9.gif

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

neko

New member
ועוד שאלונת לגבי DATAGRID:

איך אני ניגש למידע בDATAGRID? המשתמש בחר שורה, איך אני "מושך" את המידע שהוא בחר (תאים מסויימים)?
 

neko

New member
ואיך אני יודע מתי "משחקים" במידע

שבטבלה? אני רוצה שכשמישהו מחליף שורה, המידע שרלוונטי לשורה החדשה יופיע במקום אחר (TEXTBOX). משום מה ה-BINDING לא ממש עובד...
לכולם, ומתנצל על ההצפה...
 
למעלה