פורסם 2010 בנובמבר 1515 שנים היי, יש לי בעיה מציקה בכתיבת תוכנית ב C#. יש לי את ה Form הראשי של המשחק, שבו מוגדרים שני שחקנים בצורה הבאה: Player player1, player2; (האיתחול שלהם נעשה ע"י Event כאשר נלחץ הכפתור NewGame ) ה Class שנקרא Player נראה כך: namespace DotsAndBoxes{ public class Player { public Player(String name) { this.Name = name; } public String Name { get; set; } public int score { get; set; } }} כל הפורמים והקלאסים מוגדרים תחת אותו Namespace שנקרא DotsAndBoxes עכשיו, יש לי Form נוסף שנקרא SettingsMenu ומשום מה כשאני מנסה לגשת אל Player1 אני מקבל את השגיאה: The name 'player1' does not exist in the current context אין לי מושג איך אני מסדר את הדבר הזה וגורם ל Form של ההגדרות להכיר את השחקנים שהוגדרו ב Form הראשי של המשחק... כל הנסיונות שלי לא הועילו ואני דיי תקוע תודה רבה.
פורסם 2010 בנובמבר 1515 שנים הגדרת את player1 בתוך טופס אחד, ואתה מנסה לגשת אליהם מתוך טופס אחר?איך בדיוק אתה עושה את זה? חסר פה הרבה מהקוד שלך.
פורסם 2010 בנובמבר 1515 שנים מחבר כן, הגדרתי את player1 בתוך ה Form שמוגדר כך:public partial class Form1 : Formואני מנסה לגשת אליו מ Form אחר שמוגדר כך: public partial class SettingsMenu : Formה Class של Player מוגדר כ Public כמו שניתן לראות...ושני ה Form נמצאים תחת אותו namespaceאיזה עוד חלקים של הקוד להעלות...?תודה
פורסם 2010 בנובמבר 1515 שנים מחבר using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace DotsAndBoxes{ public partial class SettingsMenu : Form { public SettingsMenu() { InitializeComponent(); } private void SaveSettingsButton_Click(object sender, EventArgs e) { player1.Name = TBplayer1name.Text; // the error is here player2.Name = TBplayer2name.Text; // the error is here Properties.Settings.Default.Player1Name = TBplayer1name.Text; Properties.Settings.Default.Player2Name = TBplayer2name.Text; } }}
פורסם 2010 בנובמבר 1515 שנים אתה יוצר מופע של Player, קראת לו player1 - ואת זה עשית בתוך המחלקה של ה-form הראשי במשחק. זה משתנה מקומי לכל דבר ועניין.ועכשיו אתה מנסה לגשת אליו ממחלקה אחרת, שלא קשורה בכלל - SettingsMenu. למה שתהיה לך גישה?תתעלם מכל הפורמים והסיבוך, בתכלס יצרת משתנה מקומי פשוט בתוך מחלקה פשוטה. מחלקות אחרות לא אמורות להכיר את המשתנה הזה בכלל. אם תבין את זה, אז תבין איך להתאים פתרון למצב שלך.
פורסם 2010 בנובמבר 1515 שנים מחבר אם אני מבין אותך נכון אז אני צריך שהקונסטרקטור של SettingsMenu יקבל את שני השחקנים... זו הייתה הכוונה שלך? חשבתי שעצם העובדה ששני הפורמים נמצאים תחת אותו namespace אומרת שהם מכירים את המשתנים אחד של השני.. מה גם ש Player הוא Class , כלומר הוא פויינטר... אבל כנראה שטעיתי ועוד שאלה, האם יש לי אפשרות הגדיר את ה player1 ואת ה player2 באיזה שהוא שטח גלובלי ע"מ שכל המקומות בתוכנית יכירו אותם? תודה רבה
פורסם 2010 בנובמבר 1515 שנים שים לב שאת player1 ו-player2 לא הגדרת בתוך DotsAndBoxes, אלא כאיברים של הקלאס Form1 שיושב בתוך ה-namespace הזה. מה שאומר שאי אפשר לגשת אליהם סתם דרך ה-namespace, חייבים לגשת אליהם דרך האובייקט.בעקרון, ב-#C אין כזה דבר משתנים גלובליים. אפשר לעשות משהו דומה באמצעות static, אבל זה לא תכנות נכון. הדבר הנכון הוא כמו שאמרת - לדאוג להעביר רפרנס למשתנים האלה בדרך כלשהי (פונקציה כלשהי, קונסטרקטור וכד').
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.