Dynamiczne tworzenie przycisków - dowiedzenie się z którego przycisku poszło zdarzenie.

Odpowiedz Nowy wątek
2015-01-02 11:29
0

Witam,
Mam aplikację w której łączę się z bazą MySQL i chciałem zrobić formę z insertem gdzie będą label-e z nazwą kolumny i textbox-y aby wpisać wartość i na końcu przycisk wykonujący zapytanie. I wszystko pięknie śmiga, ale pojawił się problem kiedy kolumna ma typ BLOB. Ogólnie tworzę sobie dynamicznie tablicę Label-i i Textbox-ów ponieważ nie wiem ile będzie kolumn w danej w tabeli w bazie. Lecz chciałem dodać taką opcję, że jak dana kolumna ma typ BLOB to by obok niej był przycisk i po kliknięciu jego otwiera się OpenFileDialog i wskazujemy ścieżkę danego pliku i ona się do danego TextBox-a wpisuje. Umiem stworzyć wszystkie komponenty, stworzyłem zdarzenie dla przycisku by otworzył OpenFileDialog, problem jest w tym, że nie wiem jak zrobić by ta ścieżka wpisywała się do danego TextBox-a, jak rozpoznać z którego przycisku poszedł Click aby wpisać do poprawnego TextBox-a ścieżkę?

int helpCounter = 0;
            for (int i = 0; i < label.Length; i++)
            {
                label[i] = new Label();
                label[i].Left = 15;
                label[i].Top = (30 * i) + 10;
                label[i].Text = myList[i];
                textbox[i] = new TextBox();
                textbox[i].Left = 140;
                textbox[i].Top = (30 * i) + 10;
                if (blobList[i] == "blob")
                {
                    buttonArray.Add(i,new Button());
                    buttonArray[helpCounter].Top = (30 * i) + 10;
                    buttonArray[helpCounter].Left = 245;
                    buttonArray[helpCounter].Width = 25;
                    buttonArray[helpCounter].Height = 20;
                    buttonArray[helpCounter].Text = "...";
                    buttonArray[helpCounter].Click += new EventHandler(myButton_Click);
                    addRecord.Controls.Add(buttonArray[helpCounter]);
                    helpCounter++;
                }
                addRecord.Controls.Add(textbox[i]);
                addRecord.Controls.Add(label[i]);
                addRecordButton.Top = (30 * i) + 50;
            } 
private void myButton_Click(object sender, EventArgs e)
        {
            Button myButton = sender as Button;
            DialogResult result = openFileDialog1.ShowDialog(); // Show the dialog.
            if (result == DialogResult.OK)
            {
                pathFile = openFileDialog1.FileName;
            }
        } 

Pozdrawiam,
Maciek

Pozostało 580 znaków

2015-01-02 12:20
1

Najprościej chyba będzie dopisać buttonArray[i].Tag = i; podczas tworzenia przycisku.
Później w handlerze pobierasz sobie ten indeks.

Button myButton = sender as Button;
int index = (int)myButton.Tag;
textboxArray[index].Text = ...

Możesz też do Tagu wrzucić samego textboxa:

buttonArray[i].Tag = textboxArray[i];
//i w drugą stronę
textbox tb = myButton.Tag as Textbox;
Działa! Dzięki Ci bardzo. :) Nie wiedziałem, że istnieje taka opcja. Pozdro! - 5maciek 2015-01-02 15:04

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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