Dodalem nowy plik klasy do projektu. W jaki sposob z tego nowego pliku .cs mozna sie odniesc do np. przyciskow na formie.
Probowalem po przez Form form1 = new Form(); ale nie przynosi efektow.
np. Przerzuć instancję forma (this) do tej klasy/metody
Moglbys pokazac przyklad bo zbytnio nie wiem jak. Bede pierwszy raz dzielic program na pliki.
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
abc.Test(this);
}
}
public class abc
{
public static void Test(Form1 form)
{
foreach (var controls in form.Controls)
{
???
}
}
}
Cos mi nie idzie ;/
Form1.cs
namespace Gra2d
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Mapa mapa;
mapa = new Mapa();
mapa.openMap();
mapa.rysujMape(this);
}
Mapa.cs
namespace Gra2d
{
public class Mapa
{
const int xRow = 32;
const int yRow = 32;
const int xMap = 50;
const int yMap = 50;
PictureBox[,] map0; //mapa
public void rysujMape(Form1 form)
{
form.
}
Probowalem tak , ale nie idzie. Jak w tym pliku drugim dotrzec do przyciskow i innych rzeczy na formie?
@onizuka:
Na tej kontrolce którą chcesz używać z zewnątrz możesz np. ustawić Modifiers
na np. public
- prawym na kontrolkę i we właściwościach. Wtedy będzie dostępna u ciebie jako form.(kontrolka)
Lub np. wystawić jako publiczne metody, które będą realizowały to co tam chcesz.
public class abc
{
public static void Test (Form1 form)
{
form.setButton1Text("nowa nazwa");
}
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public void setButton1Text(string text)
{
this.button1.Text = text;
}
private void button1_Click(object sender, EventArgs e)
{
abc.Test(this);
}
}
Hmm a sprobowalem zmienic z Modifiers na public i mam problem. Zrobilem cos takiego
for (int i = 0; i < xMap; i++)
{
for (int j = 0; j < yMap; j++)
{
//form.setPanel(map0[i, j]);
form.panel2.Controls.Add(map0[i, j]);
}
}
A w buttonie
Mapa mapa;
mapa = new Mapa();
mapa.RysujMape(this);
Po nacisnieciu nic nie pokazuje dlaczego
Trudno powiedzieć co masz w tym map0 :D
Spróbuj może sprawdzić czy coś takiego Ci działa
public static void Test (Form1 form)
{
var label = new Label
{
Name = "label1",
Text = "text",
Location = new Point(0, 0),
Size = new Size(200, 90),
Font = new Font("Arial", 25),
};
form.panel1.Controls.Add(label);
}
Dziala twoj przyklad. Tak wyglada map0
const int xMap = 20;
const int yMap = 20;
PictureBox[,] map0 = new PictureBox[xMap, yMap];
A tak tworze pictbox
public void OpenMap()
{
StreamReader sr = new StreamReader("map0");
for (int i = 0; i < xMap; i++)
{
for (int j = 0; j < yMap; j++)
{
string buff = sr.ReadLine();
PictureBox pictureBox = new PictureBox();
map0[i, j] = pictureBox;
pictureBox.Width = xRow;
pictureBox.Height = yRow;
pictureBox.Left = i * xRow;
pictureBox.Top = j * yRow;
if (buff == "\r\n")
{
}
else
{
pictureBox.Name = buff;
pictureBox.Load(@"gfx\" + buff + ".jpg");
}
}
}
sr.Close();
}
I nie wiem czemu nie chce dzialac jak zrobic np. form1.panel2,controls.add(map0[i,j]);
A może działa, ale jest na złych (x,y)?
Czy jaki błąd wylatuje?
Nie dziala. Jest na dobrych x,y
Form1.cs
public void button1_Click_1(object sender, EventArgs e)
{
Mapa mapa;
mapa = new Mapa();
mapa.RysujMape(this);
}
Mapa.cs
const int xMap = 20;
const int yMap = 20;
PictureBox[,] map0 = new PictureBox[xMap, yMap]; //mapa
public void RysujMape(Form1 form)
{
PictureBox pic = new PictureBox();
for (int i = 0; i < xMap; i++)
{
for (int j = 0; j < yMap; j++)
{
pic = map0[i, j];
// form.setPanel(map0[i, j]);
form.panel2.Controls.Add(pic);
}
}
// form.panel2.Controls.Add(map0[1,1]);
}
Chyba ze bym musial zamienic na var picturebox ... No ale powinno dzialac w taki sposob chyba ze cos zle napisalem gdzies.
@onizuka:
Takie coś?
public static void Test(Form1 form)
{
var pictureBoxes = new List<PictureBox>();
int x = 0;
int y = 0;
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 2; j++)
{
var pictureBox= new PictureBox
{
Name = "picturebox" + i + j,
Location = new Point(x, y),
SizeMode = PictureBoxSizeMode.StretchImage,
Size = new Size(45, 45),
Image = Image.FromFile(@"sciezka")
};
pictureBoxes.Add(pictureBox);
x += 50;
}
x = 0;
y += 50;
}
foreach (var pictureBox in pictureBoxes)
{
form.panel1.Controls.Add(pictureBox);
}
}
Naukę programowania zacznij od aplikacji konsolowych, a za aplikacje z GUI weź się jak już będziesz rozumiał, że program składa się z klas i obiektów, a nie plików.
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.