VB.NET ו SYSTEM TRAY

האזרחק

New member
VB.NET ו SYSTEM TRAY

איך עושים את זה? אנימחפש דוגמא או מאמר\הסבר איך ניתן ליצור טופס שניתן להקטין אותו כך שיישב ב SYSTRAY, רצוי ב VB.NET ולא C#.
 

Zeliran

New member
......

קיים פקד בשם NotifyIcon שהוא בעצם אייקון שנמצא ב systray אז את יכול פשוט להוסיף אותו לטופס שלך, לתפוס את האירוע של Resize (קורה גם כשאתה עושה minimize) ואז מצרף את הקוד המתאים, כלומר לעשות Hide() לטופס ולשנות את המאפיין visible של ה notifyIcon ל true כדי להחזיר את הטופס אז או שתתפוס את האירוע של DoubleClick, או שתוסיף ל notifyIcon איזשהוא ContextMenu.. בקיצור מה שבא לך.. ותוסיף את הקוד המתאים, כלומר משהו כזה: (כן, אני יודע שזה ב c#
)
Show(); WindowState = FormWindowState.Normal;​
וזהו.. הבעיה עם השיטה הזו היא שאם הטופס שלך מוגדר כ sizable אז כשהמשתמש ינסה לשנות את גודל הטופס אז התוכנית תעלים את עצמה אוטומטית... בעייתי משהו.. כדי לנסות להתחמק מכך אתה יכול ליצור כפתור מיוחד בשביל זה, או למצוא פתרון אחר.. ובמקרה כזה אל תשכח ליידע אותי
 

gilad g

New member
יש פתרון ../images/Emo13.gif

ב-Resize של הטופס, במקום להחביא את החלון בכל מקרה, בודקים אם ה-width שלו וה-height שלו שווים ל-0 (זה מה שקורה כשעושים minimize), ורק אז מחביאים את החלון:
if ((this.Width == 0) && (this.Hieght == 0)) { this.Hide(); notifyIcon1.Visible = true; }​
 

האזרחק

New member
תודה רבה, עובד מצויין, שאלה נוספת

אלא שבמקום 0 ו 0 משום מה הגודל הוא 31 על 160 אחרי ההקטנה של הטופס. (מאחר וזה יעבוד רק על המחשב שלי בשלב זה אני לא רוצה להתעכב יותר מדי בעניין הזה, אח"כ אני אתאים את זה ל"שאר העולם") ועכשיו לשאלה שנראית לי קצת יותר מסובכת. פעם כתבתי תוכנית קטנה ב VB שקיבלה אירוע ממערכת ההפעלה שאמר לה מתי נוצר חיבור חדש לרשת ומתי הוא התנתק - כיצד ניתן לעשות את זה ב VB.NET? אני זוכר שאז השתמשתי גם ב C++ וכמה דברים לא שגרתיים יחסית ל VB... האם היום יש פתרון מוכר ונוח יותר? (המחשב שלי מחובר ל-2 רשתות במקביל, רשת פנימית והאינטרנט - האם ניתן לגלות חיבור\ניתוק מרשת ספציפית? - החיצונית כמובן)
 

Zeliran

New member
......

אולי תמצא את המאמר הזה מועיל (למרות שמדובר בגרסאת ה compact של ה framework)
 

האזרחק

New member
זה מקדם, אבל לא מספיק...

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

gilad g

New member
איך עשית את זה ב-VB../images/Emo35.gif

בדר"כ, הפתרון יהיה דומה, במיוחד אם השתמש באובייקטי COM ע"מ לתקשר בין ++C ל-VB. בקשר ל-Resize, תנסה אולי במקום לבדוק אם הגודל של החלון שווה ל-(0,0), תנסה לבדוק אם ה-WindowState הוא Minimized.
 

האזרחק

New member
זה היה לפני 6 שנים...

אני זוכר שהיה שם קצת WIN API, כך שלא בדקתי כל X שניות אם יש חיבור אלא ממש קיבלתי אירוע חיבור\ניתוק, אלא שאז היה לי מודם אחד בלי כרטיסי רשת... אין לי את קוד המקור מאז ואני לא מצליח להזכר איך עשיתי את זה אז, בינתיים אני אסתפק ביכולת לעשות פינג כדי לבדוק אם אנ ימחובר או לא כל כמה שניות\דקות... גם את זה לא הצלחתי לעשות עם VB.NET...
 

האזרחק

New member
שאלה בקשר להצגת הטופס והסתרתו

הרעיון של ה WINDOWSTATE עובד מצויין, ועכשיו נשארה "בעיה" אחת קטנה - איך אני מקפיץ את החלון קדימה? כרגע כשהוא נפתח הוא מוצג מאחורי חלונות קיימים...
 

Zeliran

New member
פיתרון עקום:

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