Odniesienie sie do przyciskow z innego plilu cs

0

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.

0

np. Przerzuć instancję forma (this) do tej klasy/metody

0

Moglbys pokazac przyklad bo zbytnio nie wiem jak. Bede pierwszy raz dzielic program na pliki.

0
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)
		{
			???
		}
	}
}
0

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?

0

@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);
    }
}
0

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

0

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);
}
0

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]);

0

A może działa, ale jest na złych (x,y)?

Czy jaki błąd wylatuje?

0

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.

0

@onizuka:

Takie coś?

4p.PNG

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);
    }
}
0

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1