עבור לתוכן

C# - משתנה לא מוכר ב Form שונה

Featured Replies

פורסם

היי,

יש לי בעיה מציקה בכתיבת תוכנית ב 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 הראשי של המשחק...

כל הנסיונות שלי לא הועילו ואני דיי תקוע :(

תודה רבה.

פורסם

הגדרת את player1 בתוך טופס אחד, ואתה מנסה לגשת אליהם מתוך טופס אחר?

איך בדיוק אתה עושה את זה? חסר פה הרבה מהקוד שלך.

פורסם
  • מחבר

כן,

הגדרתי את player1 בתוך ה Form שמוגדר כך:

public partial class Form1 : Form

ואני מנסה לגשת אליו מ Form אחר שמוגדר כך:

  public partial class SettingsMenu : Form

ה Class של Player מוגדר כ Public כמו שניתן לראות...

ושני ה Form נמצאים תחת אותו namespace

איזה עוד חלקים של הקוד להעלות...?

תודה

פורסם
  • מחבר
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;


}

}
}

פורסם

אתה יוצר מופע של Player, קראת לו player1 - ואת זה עשית בתוך המחלקה של ה-form הראשי במשחק. זה משתנה מקומי לכל דבר ועניין.

ועכשיו אתה מנסה לגשת אליו ממחלקה אחרת, שלא קשורה בכלל - SettingsMenu. למה שתהיה לך גישה?

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

אם תבין את זה, אז תבין איך להתאים פתרון למצב שלך.

פורסם
  • מחבר

אם אני מבין אותך נכון אז אני צריך שהקונסטרקטור של SettingsMenu יקבל את שני השחקנים...

זו הייתה הכוונה שלך?

חשבתי שעצם העובדה ששני הפורמים נמצאים תחת אותו namespace אומרת שהם מכירים את המשתנים אחד של השני.. מה גם ש Player הוא Class , כלומר הוא פויינטר...

אבל כנראה שטעיתי :P

ועוד שאלה,

האם יש לי אפשרות הגדיר את ה player1 ואת ה player2 באיזה שהוא שטח גלובלי ע"מ שכל המקומות בתוכנית יכירו אותם?

תודה רבה :)

פורסם

שים לב שאת player1 ו-player2 לא הגדרת בתוך DotsAndBoxes, אלא כאיברים של הקלאס Form1 שיושב בתוך ה-namespace הזה. מה שאומר שאי אפשר לגשת אליהם סתם דרך ה-namespace, חייבים לגשת אליהם דרך האובייקט.

בעקרון, ב-#C אין כזה דבר משתנים גלובליים. אפשר לעשות משהו דומה באמצעות static, אבל זה לא תכנות נכון. הדבר הנכון הוא כמו שאמרת - לדאוג להעביר רפרנס למשתנים האלה בדרך כלשהי (פונקציה כלשהי, קונסטרקטור וכד').

פורסם
  • מחבר

תודה רבה לשניכם! :xyxthumbs:

עשיתם לי קצת סדר בראש :)

ארכיון

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

דיונים חדשים