Ciao, purtroppo certe volte mi perdo in un bicchiere, dimostro di non aver completamente afferrato il senso della OOP. In un WindowsGame di Xna voglio creare un Windows Form e scriverci sopra il valore di una variabile. Con il codice che segue ci riesco:
In Update() di Game1 scrivocodice:public static Form form1; public static Label label1; form1 = new Form(); form1.Width = 200; form1.Height = 730; form1.FormBorderStyle = FormBorderStyle.FixedDialog; form1.ControlBox = false; form1.Font = new System.Drawing.Font("Quartz Ms", 12); form1.ForeColor = System.Drawing.Color.LightGreen; form1.BackColor = System.Drawing.Color.Black; form1.StartPosition = FormStartPosition.CenterScreen; label1 = new Label(); label1.Left = 0; label1.Top = 10; label1.AutoSize = true; form1.Controls.Add(Game.label1);
e OK. Ma se decido di risparmiarmi tutte quelle righe di costruziione Form e label1 e aggiungere via progetto un Form ed in progettazione creo comodamente una label1 e cerco di scriverci dentro con questo esempio di codice:codice:label1.Text = x.ToString();
il compilatore mi dice che non si può fare "a causa del livello di accessibilità di label1". Allora io istintivamente vado nel designer di Form1 e modifico l'accesser di label1 da private a publiccodice:using System; using System.Collections.Generic; using System.Linq; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.GamerServices; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Media; namespace WindowsGame1 { public class Game1 : Microsoft.Xna.Framework.Game { GraphicsDeviceManager graphics; public static int x; public static Form1 form1; public Game1() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; } protected override void Initialize() { form1 = new Form1(); base.Initialize(); } protected override void LoadContent() { } protected override void UnloadContent() { } protected override void Update(GameTime gameTime) { x++; form1.label1.Text = x.ToString(); base.Update(gameTime); } protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); base.Draw(gameTime); } } }
Adesso non mi fa più problemi sull'accesso ma se eseguo il Game non appare nulla....codice:public System.Windows.Forms.Label label1;
P.S.:
OH cavolo avevo scordato un Form1.Show() in Initialize.... scusate......

Rispondi quotando