טוסטר פורסם 2010 בנובמבר 15 Share פורסם 2010 בנובמבר 15 היי, יש לי בעיה מציקה בכתיבת תוכנית ב 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 הראשי של המשחק... כל הנסיונות שלי לא הועילו ואני דיי תקוע תודה רבה. קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2010 בנובמבר 15 Share פורסם 2010 בנובמבר 15 הגדרת את player1 בתוך טופס אחד, ואתה מנסה לגשת אליהם מתוך טופס אחר?איך בדיוק אתה עושה את זה? חסר פה הרבה מהקוד שלך. קישור לתוכן שתף באתרים אחרים More sharing options...
טוסטר פורסם 2010 בנובמבר 15 מחבר Share פורסם 2010 בנובמבר 15 כן, הגדרתי את player1 בתוך ה Form שמוגדר כך:public partial class Form1 : Formואני מנסה לגשת אליו מ Form אחר שמוגדר כך: public partial class SettingsMenu : Formה Class של Player מוגדר כ Public כמו שניתן לראות...ושני ה Form נמצאים תחת אותו namespaceאיזה עוד חלקים של הקוד להעלות...?תודה קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2010 בנובמבר 15 Share פורסם 2010 בנובמבר 15 את החלק שבו אתה מנסה לגשת, כמובן. קישור לתוכן שתף באתרים אחרים More sharing options...
טוסטר פורסם 2010 בנובמבר 15 מחבר Share פורסם 2010 בנובמבר 15 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; } }} קישור לתוכן שתף באתרים אחרים More sharing options...
nitzanj פורסם 2010 בנובמבר 15 Share פורסם 2010 בנובמבר 15 אתה יוצר מופע של Player, קראת לו player1 - ואת זה עשית בתוך המחלקה של ה-form הראשי במשחק. זה משתנה מקומי לכל דבר ועניין.ועכשיו אתה מנסה לגשת אליו ממחלקה אחרת, שלא קשורה בכלל - SettingsMenu. למה שתהיה לך גישה?תתעלם מכל הפורמים והסיבוך, בתכלס יצרת משתנה מקומי פשוט בתוך מחלקה פשוטה. מחלקות אחרות לא אמורות להכיר את המשתנה הזה בכלל. אם תבין את זה, אז תבין איך להתאים פתרון למצב שלך. קישור לתוכן שתף באתרים אחרים More sharing options...
טוסטר פורסם 2010 בנובמבר 15 מחבר Share פורסם 2010 בנובמבר 15 אם אני מבין אותך נכון אז אני צריך שהקונסטרקטור של SettingsMenu יקבל את שני השחקנים... זו הייתה הכוונה שלך? חשבתי שעצם העובדה ששני הפורמים נמצאים תחת אותו namespace אומרת שהם מכירים את המשתנים אחד של השני.. מה גם ש Player הוא Class , כלומר הוא פויינטר... אבל כנראה שטעיתי ועוד שאלה, האם יש לי אפשרות הגדיר את ה player1 ואת ה player2 באיזה שהוא שטח גלובלי ע"מ שכל המקומות בתוכנית יכירו אותם? תודה רבה קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2010 בנובמבר 15 Share פורסם 2010 בנובמבר 15 שים לב שאת player1 ו-player2 לא הגדרת בתוך DotsAndBoxes, אלא כאיברים של הקלאס Form1 שיושב בתוך ה-namespace הזה. מה שאומר שאי אפשר לגשת אליהם סתם דרך ה-namespace, חייבים לגשת אליהם דרך האובייקט.בעקרון, ב-#C אין כזה דבר משתנים גלובליים. אפשר לעשות משהו דומה באמצעות static, אבל זה לא תכנות נכון. הדבר הנכון הוא כמו שאמרת - לדאוג להעביר רפרנס למשתנים האלה בדרך כלשהי (פונקציה כלשהי, קונסטרקטור וכד'). קישור לתוכן שתף באתרים אחרים More sharing options...
טוסטר פורסם 2010 בנובמבר 15 מחבר Share פורסם 2010 בנובמבר 15 תודה רבה לשניכם! עשיתם לי קצת סדר בראש קישור לתוכן שתף באתרים אחרים More sharing options...
Recommended Posts
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.