קודם כל שהחיינו ושיהיה לנו בהצלחה.ח

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

viby

New member
קודם כל שהחיינו ושיהיה לנו בהצלחה.ח

וץ מזה, שתי שאלות: 1.יש לי form.יש לי class. ב form יש אובייקט מסוג ה class צריך לשנות ערך של textbox ב form בהתאם למשהו שקורה ב class (בתוך לולאה אינסופית). ניסיתי להעביר פרמטרים byref כמו ב c++ וזה לא הולך אז או שאפשר ואני לא עשיתי את זה טוב או שחייבים להפר כאן את ה oop (או שלמישהו יש פתרון אחר). אשמח אם למישהו יהיה פתרון. 2. האם מישהו מכיר דרך להפוך מערך של byte ל string (חוץ מהדרך של לרוץ בלולאה על כל המערך. אני מחפש פונ' של הדוט נט או משהו כזה)?
 

gilad g

New member
תשובות ../images/Emo26.gif

0. תודה
1. לא ממש הבנתי, אתה יכול לתת דוגמא מעשית יותר, או אולי להביא קוד רלוונטי
2. כן -
byte[] ba = {....};//this is your byte array. ASCIIEncoding ascii = new ASCIIEncoding(); String s = ascii.GetString(ba);​
בדוגמא שנתתי, השתמשתי ב-ASCIIEncoding, בהנחה שהמערך של בייטים מייצג סטרינג ב-ASCII. אם הוא מייצג סטרינג של יוניקוד, אתה צריך להשתמש בקלאס UTF8Encoding, במקום ASCIIEncoding. אם בסטרינג שלך אמור להיות עברית, צריך להגדיר קודפייג'. זה ייעשה באופן הבא:
byte[] ba = {....};//this is your byte array. Encoding myHebEnc = Encoding.GetEncoding(1255);//hebrew String s = myHebEnc.GetString(ba);​
לפרטים נוספים.
 

viby

New member
....

2.תודה רבה 1.
class A ... end class class form1 dim a as class A .... end class​
צריך שב event מסויים שמתרחש במחלקה a יתעדכן הערך text של ה textbox שנמצא ב form. פתרון נורמלי הוא ש a יחזיר ערך מה event המדובר. הבעיה היא שב event יש (בכוונה , לצרכי תקשורת בין מחשבים) לולאה אינסופית והחזרת ערך תפסיק אותה לכן אי אפשר להחזיר ערך. ניסיתי העברת פרמטרים byref דרך ה c'tor של a וזה לא עבד כל כך-ה textbox.text לא התעדכן.
 

viby

New member
לזרוק event

מתוך קלאס רגיל (לא form) ? משהו כמו raisevent?
 

viby

New member
כלומר

מתוך הקלאס אני אפעיל event של הform ? זה לא חריגה קשה מoop?
 

gilad g

New member
לא ../images/Emo13.gif

לקלאס שלך יהיה event משלו, לא ל-form. כמו שלכפתורים, טקסטבוקסים, וכו' יש events, כך גם לקלאס שלך יהיה event.
 

viby

New member
ואיך ה event בקלאס

יגרום לשינוי ערך ב form?הוא מעלה את הטיפול למעלה?משהו כמו טיפול ב exceptions?
 

gilad g

New member
אפשר לומר

אתה זורק event ב-class, וב-form תהיה לך מתודה שהיא listener לevent הזה, ששם אתה תשנה את הערך של הטקסטבוקס. אני ממש ממליץ לך לקרוא על events בלינקים שנתתי לך קודם
 

viby

New member
אוקיי זה מה שאני אעשה

תודה רבה על ה"שיחה" הזו . עזרתם מאוד
 

yuval k

New member
אם הבנתי למה התכוונת ב-1,

אז יש ref
היית קרוב.
CFrmMain.m_textBox1 - a private instance of TextBox m_myClass1 = new CMyClass(ref m_textBox1); CMyClass(ref TextBox box) { m_box = box; } CMyClass.UpdateStuff(string text) { m_box.Text = text; }​
אני צודק? זה זה? ותודה
 

viby

New member
למעשה אתה

מגדיר textbox בתוך class (ולא form)? אם כן אז זה קצת מוזר, אני ניסיתי להעביר רק את ה textbox.text בדיוק באותה צורה וזה לא עובד. זה לא מעדכן את ה textbox ב form.
 

yuval k

New member
חלילה וחסיה ../images/Emo13.gif

לא. אני מגדיר משתנה שזוכר reference אל ה-TextBox שמוגדר כפרטי בתוך המחלקה של ה-form.
 

viby

New member
אה, אבל

לא כתבת את ההגדרה של ה ref למעלה (אני חושב אני פשוט פחות מכיר c# אני כותב ב vb) אתה יכול לכתוב הגדרה כזו?
 

yuval k

New member
../images/Emo26.gif

אובייקטים מאוחסנים בזיכרון, בכתובת מסויימת. כאשר מתבצעת השמה, מתעדכן תא(י) הזיכרון בכתובת של המשתנה. העתקה של אובייקט היא בעצם העתקה של המידע מהתאים הנ"ל לתאים חדשים, וזכירת הכתובת שלהם. מה ש-ref עושה, זה מעביר pointer - מצביע - לכתובת הזיכרון, כך שנזכרת הכתובת של התאים הקיימים, בלא להעתיק מחדש.
 

gilad g

New member
אין צורך להשתמש ב-ref

כשמעבירים קלאס למתודה מסוימת, מועבר ה-reference (פוינטר, אם תרצה) לקלאס. הקלאס עצמו לא מועתק.
 
למעלה