br Posted March 16, 2012 at 03:14 AM Report #444155 Posted March 16, 2012 at 03:14 AM 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; } } } }
renafi Posted March 16, 2012 at 09:02 AM Report #444160 Posted March 16, 2012 at 09:02 AM 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
br Posted March 16, 2012 at 12:08 PM Author Report #444190 Posted March 16, 2012 at 12:08 PM 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
softklin Posted March 16, 2012 at 02:25 PM Report #444205 Posted March 16, 2012 at 02:25 PM 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.
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now