Jump to content

coordenadas numa picturebox


br
 Share

Recommended Posts

boa noite

desenvolvi um tabuleiro de xadrez através de uma matriz e de picturebox

agora queria ao clicar em cima de um dos quadrados me desse as coordenadas ou alguma referencia à sua posição.

alguem me pode ajudar?

cumprimentos

o código é o seguinte:

       int[][] matriz;
       PictureBox[][] tabuleiro;

       public Form1()
       {
           InitializeComponent();
           iniciar();
       }

       public void iniciar()
       {
           matriz = new int[8][];
           tabuleiro= new PictureBox[8][];
           for (int i = 0; i < 8; i++)
           {
               matriz[i] = new int[8];
               tabuleiro[i] = new PictureBox[8];
           }

           int lx=0, ly=0;
           bool flag_inicio=true;
           for (int x = 0; x < 8; x++)
           {
               bool flag = flag_inicio;
               for (int y = 0; y < 8; y++)
               {
                   matriz[x][y] = flag == true ? -1 : 0;
                   flag = !flag;
               }
               flag_inicio = !flag_inicio;
           }

           for (int x = 0; x < 8; x++)
           {
               lx = 0;
               for (int y = 0; y < 8; y++)
               {
                   tabuleiro[x][y] = new PictureBox();
                   tabuleiro[x][y].Location = new Point(ly, lx);
                   tabuleiro[x][y].Size = new System.Drawing.Size(50, 50);
                   tabuleiro[x][y].SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
                   if (matriz[x][y] == 0)
                       tabuleiro[x][y].Image = Properties.Resources.branco;
                   if (matriz[x][y] == 1)
                       tabuleiro[x][y].Image = Properties.Resources.preto;
                   Controls.Add(tabuleiro[x][y]);
                   pictureBox1.Controls.Add(tabuleiro[x][y]);
                   lx += 50;
               }
               ly += 50;
           }
       } 
   }
}
Link to comment
Share on other sites

Queres mesmo as coordenadas onde clicaste, ou só qual a picturebox que clicaste?

Se for a segunda opção, é possível veres qual é a picturebox, o problema é que não tens nenhuma identificação sobre cada picturebox.

Mas vais fazer o seguinte:

primeiro tens de adicionar o evento click ao objecto de cada picturebox que criares.

private void teste_Load(object sender, EventArgs e)

        {

        // local onde crias o evento quando criares o objecto

            PictureBox p = new PictureBox();

            p.Name = "teste";

            p.Click += new EventHandler(p_Click);

        }

No evento, descobres qual é a picturebox. É por isso que sugiro que identifiques cada picturebox

        void p_Click(object sender, EventArgs e)

        {

                PictureBox p = (PictureBox)sender;

//  fazes uma pesquisa pelo nome da PictureBox

        }

Se precisares de mais ajuda, diz

Oracle Certified Professional - AdministraçãoOracle Certified Professional - Pl/sqlMCPD - Microsoft Certified Professional DeveloperMCTS - Microsoft Certified Technology Specialist

Link to comment
Share on other sites

sim quero so as coordenadas de cada picturebox!

adicionei o nome e o evento a cada uma.

e fiz assim:

void tabuleiro_click(object sender, EventArgs e)

        {

            pbTabuleiro = (PictureBox)sender;

            label1.Text = "clicou em "+pbTabuleiro.Name;

        }

no nome eu pus assim ("t"+x+","+y)

mas eu agora preciso de tirar o x e o y para usar noutros métodos

Link to comment
Share on other sites

Em cada PictureBox, tens a propriedade Tag que te permite guardar lá meta-dados. Podes por lá as coordenadas, em vez de as extraíres do nome. Por exemplo, na criação de cada PictureBox

tabuleiro[x][y] = new PictureBox();
// resto das definições aqui...
tabuleiro[x][y].Tag = new int[] {x, y};

Ao tentar ler os dados, no evento do clique, basta-te aceder à propriedade Tag e obteres de lá os dados. Não te esqueças de fazer um cast para array de inteiros, porque essa propriedade tem como tipo object:

void tabuleiro_click(object sender, EventArgs e)
        {
            pbTabuleiro = (PictureBox)sender;
            int[] cord = (int[])pbTabuleiro.Tag;
            label1.Text = "Coordenadas: (" + cord[0] + "," + cord[1] + ")";
            
        }

Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.