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:
codice:
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);
In Update() di Game1 scrivo
codice:
label1.Text = x.ToString();
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:
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);
}
}
}
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 public
codice:
public System.Windows.Forms.Label label1;
Adesso non mi fa più problemi sull'accesso ma se eseguo il Game non appare nulla....
P.S.:
OH cavolo avevo scordato un Form1.Show() in Initialize.... scusate......