C# - משתנה לא מוכר ב Form שונה - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

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


טוסטר

Recommended Posts

היי,

יש לי בעיה מציקה בכתיבת תוכנית ב 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 בתוך ה 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, אבל זה לא תכנות נכון. הדבר הנכון הוא כמו שאמרת - לדאוג להעביר רפרנס למשתנים האלה בדרך כלשהי (פונקציה כלשהי, קונסטרקטור וכד').

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...