Registry

Zeliran

New member
Registry

אני רוצה להכניס ערך למפתח בקג'יסטרי שיכיל צבע כלשהו.. הזנתי את הצבע הנתון ע"י: keyView.SetValue ("ListBackColor", Color.White); אז עכשיו איך אני יכול לקבוע ש list.BackColor יהיה שווה לצבע שנמצא ברג'יסטרי? נסיתי את זה: list.BackColor = keyView.GetValue ("ListBackColor"); אבל אני מגבל את השגיאה הבאה: Cannot implicitly convert type 'object' to 'System.Drawing.Color' נסיתי לעשות כל מיני casting של Color ו Object אבל כשאני מריץ את התוכנית אני מקבל שגיאה שאי אפשר לעשות casting כזה.. אז איך אפשר לגשת לנתונים הנמצאים ברג'יסטרי?
 

gilad g

New member
המממ

בעיקרון Color.White הוא אובייקט שאינו אחד מהטיפוסים הבסיסיים (כגון String או integer), ולכן לא יוכל להיכנס לרג'יסטרי. וזה תואם את מה שכתוב ב-MSDN:
Values allowed in the registry can be DWORD, binary, and string.​
(DWORD זה מספר 23 ביט). מפתיע אותי שהוא לא זרק שגיאה כשניסית להפעיל את SetValue. אתה יכול להריץ את Regedit ולומר מה מופיע ברג'יסטרי
(קרוב לוודאי שמופיע שם משהו כמו "System.Drawing.Color", כי יכול להיות ש-SetValue עושה ToString על האובייקט שהוא מקבל...) ההצעה שלי במקום לשמור ככה, לפצל את הצבע לארבעת ערכי ARGB (אלפא אדום ירוק כחול), ואת ארבעת המספרים הללו לשמור ברג'סיטרי. לאובייקט Color יש ארבעה מאפיינים - A, R, G ו-B, ככה שפה לא אמורה להיות לך בעיה
מצד שני, אתה יכול להשתמש במאפיין Name, שמביא לך את השם של הצבע, או אם לצבע אין שם, הוא מחזיר את ערכי ה-RGB שלו
 

Zeliran

New member
האמתי..

הערך שמאוחסן ברג'יסטרי הוא:
Color [White]​
בכל מקרה תודה..(מה הייתי עושה בלי הפורום הזה??)
 

Zeliran

New member
רגע רגע...

או שלא הבנתי נכון, או שמשהו לא בסיידר פה... אתה יכול לכתוב את השורה שבה מכניסים את הצבע לרג'יסטרי? אפילו שהנתון שנמצא ברג'יסטרי הוא string ואני מנסה שמשתנה מסוג string יקבל את הערך שנמצא ברג'יסטרי, אני עדיין מקבל את הודעה השגיאה:
Cannot implicitly convert type 'object' to 'string'​
 

Zeliran

New member
../images/Emo4.gif../images/Emo4.gif../images/Emo4.gif

טוב, הסתדרתי עם נתונים מסוג string אבל הבעיה עם הצבע עדיין... בעיה אי אפשר לעשות Color.White.Name = בגלל שזה readOnly בכל casting שניסיתי לעשות זה עדיין לא עובד.. אני כנראה תופס ממש לאט :p, אתה יכול אולי להביא דוגמאה איך להכניס את הצבע לרג'יסטרי ואיך ליישם איזה BackColor של קונטרול כלשהוא לצבע שיש ברג'יסטרי?
 

gilad g

New member
צריך ללמוד לחפש ב-MSDN ../images/Emo13.gif

אם היית מחפש שם, היית רואה שיש מתודה (ששמה FromName) שממירה צבע מסטרינג ל-Color.. שים לב:
key.SetValue("bla", myControl.BackColor.Name); :וכדי לקבל myControl.BackColor = Color.FromName(key.GetValue("bla"));​
אם זה לא עובד, הייתי ממליץ לך לפצל את הערכים ל-ARGB, ולהשתמש ב-FromArgb.
 

Zeliran

New member
כן..

באמת שאני מחפש די הרבה ב MSDN, אבל הבעיה שלרוב אני פשוט לא מצליח למצוא שם.. למרות שאני יודע שמה אני מחפש נמצא שם.. לא נורא, יעבור..
 

gilad g

New member
זה לא קשה, באמת

אם אני מחפש משהו, הייתי מתחיל פה: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/cpref_start.asp (אגב, הכתובת הזאת נמצאת גם בקישורים של הפורום). זה בעצם הרפרנס לדוט נט. רשימה של כל הניימספייסים, קלאסים, מתודות, מאפיינים, אירועים, עם תיעוד מפורט, כולל דוגמאות. אם אני נתקע - שם אני מתחיל לחפש.
 

gilad g

New member
ועוד דבר ששכחתי ../images/Emo9.gif

מומלץ (מאוד) להשתמש בעץ הניווט שבצד ימין. ה-MSDN הוא מאוד מבולגן, אבל דווקא החלק הזה של ה-Class Library Reference, הוא בין המסודרים, ולכן לא קשה להשתמש בו.
 

Zeliran

New member
מי היה מאמין..

אפילו אחרי כל הודעות האלה.. זה עדין לא הסתדר, אבל אחרי כמה זמן של שבירת ראש ושאלה חוזרת "למה??? למה???", זה עובד תודה (הגיע הזמן..)
 

yuval k

New member
ההמפף, ראיתי משום-מה גם למטה,

ולא זכרתי שנענית
בכל אופן, כתבתי פה.
 

yuval k

New member
טיפים לחיפוש ../images/Emo26.gif

כאשר אני נתקל בבעיה כלשהי, אני מתחיל תמיד מ-Google. אני מחפש על שם הפעולה שאני מנסה לעשות, ועם שם ה-class. בד"כ, זה מספיק כדי להחזיר מספיק תוצאות רלוונטיות בתוך התוצאות שאינן רלוונטיות. אם מוחזרות תוצאות שלא שייכות ל-.net, אני מוסיף את .net (או ASP.net) למחרוזת החיפוש. אם אני רוצה לחפש בתוך ה-MSDN, אני עפ"י רוב לא מחפש שם ישירות - אלא דרך Google, ומוסיף MSDN לשאילתה (או site:msdn.microsoft.com, אם זה לא עוזר). מקווה שזה יעזור לכל המחפשים ואינם מוצאים
 

yuval k

New member
---> אם זה לא עובד, או אם הצבע אינו

סטנדרטי (בעל שם מוגדר).
 

yuval k

New member
עפ"י רוב, אפשר לוותר על A...

בד"כ הצבעים מוצגים ב-100% אטימות
 

Zeliran

New member
בקשר לGarbage Collector

אחרי יוצרים..
form frm = new form() או registrykey blat = regostry....​
(ובסגנון..) אז צריך לכתוב להם Close\Dispose או שהגרבג' קוןלקטור מטפל בהם?
 

gilad g

New member
../images/Emo18.gif שרשר שאלותיך בבקשה

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