C# zmienna string jako nazwa kontrolki Label

0

Jak użyć zmiennej typu string jako nazwy kontrolki Label?
Oto przykład:

Posiadam tablicę dwuwymiarową [5,3], np:

{ label1, wartosc1, wartosc2 };
{ label2, wartosc1, wartosc2 };
{ label3, wartosc1, wartosc2 };
{ label4, wartosc1, wartosc2 };
{ label5, wartosc1, wartosc2 };

oraz 5 kontrolek Label o nazwach label1...label5,
zmienną string nazwakontrolki pobieram z tablicy( kolumna 1)

jak zrobić żeby zmienić text kontrolki poprzez wybranie tej kontrolki
ze zmiennej string z tablicy? chodzi o:

 label3.Text             = "jakis text" // to jest poprawne
 nazwakontrolki.Text = "jakis text" // to jest niepoprawne

Za pomoc dziękuję!

0

Nie do końca rozumiem zamysł.
Jeżeli chcesz do każdy obiekt typu label związać z jakąś wartością tekstową, to istnieje takie pole jak Tag, które ma każda kontrolka w WinFormsach - i do którego programista może przypisać dowolny obiekt, w szczególności także string.
Jeżeli chcesz, żeby Twoje kontrolki miały nazwy bardziej znaczące niż np label3, to zwyczajnie zmień nazwy tych kontrolek. Reszta programu Ci się posypie, ale funkcja "wyszukaj i zamień" szybko naprawi odniesienia do nieistniejących już obiektów.
Jeżeli dobrze zrozumiałem, to w środkowej kolumnie są zmienne typu string, jedną z nich jest zmienna o nazwie nazwakontrolki i Ty chciałbyś zastosować napis nazwakontrolki.Text, co się oczywiście nie uda, bo zmienna typu string nie posiada pola o nazwie Text. Jeżeli koniecznie potrzebujesz takiej konstrukcji, to w środkowej kolumnie muszą znajdować się obiekty klasy, którą sam stworzyłeś, a która posiada pole o nazwie Text.
Jeżeli struktura tej tablicy jest nie do ruszenia i koniecznie potrzebujesz za pomocą środkowej kolumny wyszukiwać kontrolki znajdujące się w pierwszej kolumnie, to nie masz innego wyjścia jak stworzyć funkcję pomocniczą, do której będziesz przekazywał dwa napisy: nazwę kontrolki, oraz tekst do zmiany. Funkcja ta musi wyszukać nazwę kontrolki w środkowej kolumnie i zmienić właściwość Text w labelu znajdującym się w tym samym wierszu.

0

Chodzi mi o to, że chcę dokonać zmiany właściwości (np.Textu) w jakiejś kontrolce
Label nieodwołując się do jej bezpośredniej nazwy, czyli w tym przypadku

np. Label3.Text = "jakis text"; // to zmieni text w kontrolce

lecz pobrać jej nazwę z tablicy. Pierwsza kolumna tej tablicy
zawiera nazwy Label1..do..Label5.

Czyli przypisując zmiennej X typu string pozycję [3,0] z tablicy,
to X będzie zawierało wartość "Label3" i teraz chcę zmienić właściwość
Text w kontrolce Label3, nie mogę się odwołać w następujący sposób:

X.Text = "jakis text";

Mimo, iż X ma wartość "Label3", to ta konstrukcja polecenia jest błędna...

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

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

            string[,] tab = new string[5,3]
            { 
                { "label1", "wartosc1", "wartosc2" }, 
                { "label2", "wartosc21", "wartosc22" }, 
                { "label3", "wartosc31", "wartosc32" }, 
                { "label4", "wartosc41", "wartosc42" }, 
                { "label5", "wartosc51", "wartosc52" }
            };

            for (int i = 0; i < 5; ++i)
            {
                foreach (Control s in this.Controls)
                {
                    if (s is Label)
                    {
                        if (s.Name == tab[i, 0])
                        {
                            s.Text = tab[i, 1];
                        }
                    }
                }
            }
        }
    }
}

0

Dzięki !!! Oto dokładnie chodziło, prosto i czytelnie!! Jeszcze raz dziekuję :-)

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