עבור לתוכן

האם בC# אפשר לפנות לשם משתנה בעזרת משתנה אחר?

Featured Replies

פורסם

למשל אני רוצה לפנות לPictureBox#

#=מספר כלשהו

למשל בזמן לולאה שאני אוכל לפנות לכמה משתנים עם שם דומה (חוץ מאותו מספר בסוף)... במקום להעתיק את אותה שורה 82 פעם

  • תגובות 36
  • צפיות 3.8k
  • נוצר
  • תגובה אחרונה

משתתפים בולטים בדיון

פורסם

אני מקווה שהבנתי נכון את השאלה.

הכנס את כולם לאיזשהו Collection ע"י יצירת מתודה ארוכה אך מתאימה ומשם תוכל לגשת באיטרציה לכולם בקלות.

אתה יכול ליצור את האובייקטים בלולאת For ואז זה גם יהיה קצר יותר (במידה ויש קשר בין כל האובייקטים - שם דומה ומיקום יחסי דומה)

פורסם
  • מחבר

אני אנסח שוב

יש לי לוח משחק שמורכב מpicturebox

יש לי 82 כאלה לכל אחד קוראים pictureboxXX מ1 עד 82

עכשיו אמור לקרות משהו כאשר לוחצים על כל אחד מהתמונות האלה (משהו שונה לפי על מה שהוא לחץ)

אז במקום ליצור 82 מתודות אני רוצה לדעת אם יש אפשרות לפנות אליהם עם משתנה (במקום הXX) במקום למשל להכניס את כולם למערך

פורסם

לא כל כך הבנתי למה אתה מתכוון, אבל אני אנסה לענות לך.

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

אבל אני לא בטוח שלזה אתה מתכוון.

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

פורסם

או שתכניס את כולם למערך ואז תפנה אליהם מתוך המערך

או שתעשה מתודה שמקבלת את המספר ופונה למשתנה המתאים...

פורסם

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

http://www.acthompson.net/DotNet/ControlArrays.htm

(רד לחלק של #C)

כאמור, אתה צריך ליצור מערך של picturebox.

כשאתה לוחץ על אחת מהתמונות, הפקד קורא ל-event הלחיצה של התמונה הזו. כשאתה שם קוד בתוך ה-event הזה, ה-visual studio למעשה אוטומטית יוצר לך פונקציה, ורושם את הפונקציה הזו ל-event הזה.

מה שאתה צריך הוא ליצור פונקציה אחת, ולרשום אותה ל-eventים של כל התמונות השונות (זה הקטע עם הפונקציה hitMe בדוגמה הנ"ל).

אגב, ב-VB הייתה תמיכה מובנית של השפה במערך של פקדים (כל event אוטומטית קיבל פרמטר נוסף, שהוא האידקס של הפקד במערך).

פורסם
  • מחבר

זה מה שחיפשתי

הבעיה היא שאני רוצה לעשות את הקטע הזה

myBoxes[0] = pictureBox1;

myBoxes[1] = pictureBox2;

myBoxes[2] = pictureBox3;

myBoxes[3] = pictureBox4;

אוטומטי בעזרת לולאה(כי יש לי 80+ כאלה...)

פורסם

for (int i=0;i<80;i++)
{
myBoxes[i]=pictureBox+(i-1);
}

פורסם
  • מחבר

הנה שאלה מעניינת- ניסית לקמפל את זה?

don't state the obvious... and wrong

פורסם

עשיתי בפרוייקט שלי משהו מאוד דומה

אני לא זוכר כל כך

זה בערך הניסוח תשחק עם זה פשוט

תנסה אולי להוסיף מרכאות או משהו שם

"(i-1)" או משהו בסגנון

אצלי זה עבד...

פורסם

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

הסבר קצר:

כשאתה יוצר טופס ב-visual studio, אז שים לב שהוא יוצר לך למעשה שני קבצים: form.cs ו-form.designer.cs.

הקובץ form.designer.cs הוא קובץ שמכיל את הקוד של כל הפקדים שבטופס. פתח את הקובץ, ותראה שהקוד פשוט יוצר את כל ה-pictureboxים האלה, אחד אחרי השני (הרבה קוד אוטומטי).

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

פורסם
  • מחבר

טוב הצלחתי למצוא משהו בשם controls.find שאמור לעשות מערך של פקדים מתאימים... הבעיה שאני לא מצליח לעבוד עם זה

אז עברתי לforeach אבל אין לי מושג מה לשים ב IN

פורסם
  • מחבר

כי אין לי מושג בדיוק מה אמרת שם...

אני לא מצליח לפנות לפקד בעזרת מחרוזת אז אני שוב מגיע ל82 שורות שאני צריך לעשות C&P להם

פורסם

איך אתה יוצר את כל הפקדים של התמונות ? ישבת ועיצבת כל אחד מהם לבד או שבנית אותם לבד בקוד בלולאה ?

ארכיון

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

דיונים חדשים