Event do dynamicznego Buttona c# potrzebuje pomocy

0

Treść zadania:
Utwórz formę z dwoma TextBoxami i buttonem. Gdy w każdy z tych textboxów wpiszemy pewne liczby naturalne a,b i naciśniemy button – ma na formie się dynamicznie pojawić tablica buttonów: a buttonów w kolumnie, b buttonów w wierszu. Jak teraz naciśniemy którykolwiek z tych buttonów to mają się pojawić na nim dwie liczby będące numerem jego wiersza i kolumny.

Nie potrafię zrobić tego, żeby na buttonie pojawił się jego numer wiersza i kolumny po kliknięciu. Potrzebuje pomocy.

Z góry dziękuję za poświęcony czas.
Pozdrawiam
Niżej mój kod zródłowy.

 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace zad7_egzaminowe
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        /*
         * Utwórz formę z dwoma TextBoxami i buttonem. Gdy w każdy z tych textboxów wpiszemy
         * pewne liczby naturalne a,b i naciśniemy button – ma na formie się dynamicznie
         * pojawić tablica buttonów: a buttonów w kolumnie, b buttonów w wierszu. Jak teraz
         * naciśniemy którykolwiek z tych buttonów to mają się pojawić na nim dwie liczby
         * będące numerem jego wiersza i kolumny.
         */

        Button[,] B;
        private void button1_Click(object sender, EventArgs e)
        {
            int x = Convert.ToInt32(textBox1.Text);
            int y = Convert.ToInt32(textBox2.Text);

            Button[,] B = new Button[x, y];

            int wspX = 12;
            int wspY = 65;



            for (int i = 0; i < x; i++)
            {
                for (int j = 0; j < y; j++)
                {

                    B[i, j] = new Button();
                    B[i, j].Location = new System.Drawing.Point(wspX, wspY);
                    B[i, j].Size = new System.Drawing.Size(50, 20);
                    B[i, j].Click += new EventHandler(changeText);
                    B[i, j].Text = "";
                    this.Controls.Add(B[i, j]);
                    wspX += 60;
                }
                wspX = 12;
                wspY += 30;
            }            
        }

        void Form1_Click(object sender, EventArgs e)
        {
            
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            if (textBox1.Text != String.Empty && textBox2.Text != String.Empty)
                button1.Enabled = true;
            else
                button1.Enabled = false;
        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {
            if (textBox1.Text != String.Empty && textBox2.Text != String.Empty)
                button1.Enabled = true;
            else
                button1.Enabled = false;
        }

        private void changeText(object sender, EventArgs e)
        {
            int x = Convert.ToInt32(textBox1.Text);
            int y = Convert.ToInt32(textBox2.Text);

            
            for (int i = 0; i < x; i++)
            {
                for (int j = 0; j < y; j++)
                {
                    
                }
                
            }
                
                
            
        }
        
    }
}
0

Dodaj sobie do Właściwości Tag przycisku odpowiednie dane:

  
             B[i, j] = new Button();
             B[i, j].Location = new System.Drawing.Point(wspX, wspY);
             B[i, j].Size = new System.Drawing.Size(50, 20);
             B[i, j].Click += new EventHandler(changeText);
             B[i, j].Text = "";

             B[i,j].Tag = "I: " + i.ToString() + " J: " + j.ToString(); 

             this.Controls.Add(B[i, j]);

A później w obsłudze kliknięcia możesz zrobić coś takiego:

 
        private void changeText(object sender, EventArgs e)
        {
           Button przycisk = sender as Button;
	   string wspolrzedne = przycisk.Tag.ToString();
           przycisk.Text = wspolrzedne;
	}

Pozdrawiam
Łukasz Gawron

0
gawronlukasz napisał(a)

A później w obsłudze kliknięcia możesz zrobić coś takiego:

 
        private void changeText(object sender, EventArgs e)
        {
           Button przycisk = sender as Button;
	   string wspolrzedne = przycisk.Tag.ToString();
           przycisk.Text = wspolrzedne;
	}

Nie do końca to rozumie. Mógł byś to napisać na moich zmiennych?

0

A dlaczego nie użyć TableLayoutPanel?

using System;
using System.Drawing;
using System.Windows.Forms;

namespace DynamicButtons
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnCreate_Click(object sender, EventArgs e)
        {
            this.tlpButtons.RowCount = int.Parse(this.txtRows.Text);
            this.tlpButtons.ColumnCount = int.Parse(this.txtColumns.Text);

            for (int i = 0; i < this.tlpButtons.RowCount; i++)
            {
                for (int j = 0; j < this.tlpButtons.ColumnCount; j++)
                {
                    Button btn = new Button();
                    btn.Size = new Size(50, 21);
                    btn.Text = "klik!";
                    btn.Click += new EventHandler(btn_Click);

                    this.tlpButtons.Controls.Add(btn, j, i);
                }
            }
        }

        void btn_Click(object sender, EventArgs e)
        {
            Button btn = sender as Button;

            int r = this.tlpButtons.GetRow(btn);
            int c = this.tlpButtons.GetColumn(btn);

            btn.Text = string.Format("{0}-{1}", r + 1, c + 1);
        }
    }
}
0

Niestety twój program nie dodaje nawet Buttonów na formę nie mówiąc o rozwiązaniu mojego problemu. Dodałem do niego deklarację TableLayoutPanel i niestety nie działa.

0

Buahahahaha. Oczywiście, mój program nic nie robi, tak sobie tylko wkleiłem kod dla jaj.

Cały projekt tutaj: www.somekind.pl/_upload/tmp/DynamicButtons.zip
(załączniki nie działają)

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