@avangarda: W C# String jest traktowany jako typ prosty (mimo, że tak naprawdę to obiekt), przez co wywołując funkcję ChangeText przekazujesz w parametrze wartość, a nie referencję do właściwości A.Content. Żeby to działało, musiałbyś w funkcji ChangeText przekazywać całą kontrolkę (button), która jest obiektem i wtedy wyglądałoby to mniej więcej tak:
private void A_Click(object sender, RoutedEventArgs e) { ChangeText(A); //zakładam, że A to jest button }
@dobry_programista: Właśnie mi chodzi o to żeby wywoływać funkcję z nazwą konkretnego buttona - mam ich kilka i po kliknięciu w każdy jeden ma wykonywać się ta funkcja, która zmieni nazwę klikanego buttona (i przy okazji wykona kilka innych operacji). Dlatego próbuję przemycić w parametrze "NazwaButtonu.Content". To ma być uniwersalna funkcja.
@avangarda: A dlaczego koniecznie chcesz mieć tam nazwę buttona, a nie obiekt button? Czy coś poza metodą ChangeText będzie jeszcze wykonywane w obsłudze naciśnięcia przycisków?
W C# String jest traktowany jako typ prosty (mimo, że tak naprawdę to obiekt), przez co wywołując funkcję ChangeText przekazujesz w parametrze wartość, a nie referencję do właściwości A.Content. Żeby to działało, musiałbyś w funkcji ChangeText przekazywać całą kontrolkę (button), która jest obiektem i wtedy wyglądałoby to mniej więcej tak:
@dobry_programista: jak nie masz pojęcia to się nie wypowiadaj @avangarda: String w .Net jest typem referencyjnym (można to sprawdzić używając
String w .Net jest typem referencyjnym (można to sprawdzić używając typeof(string).IsValueType), ale przede wszystkim stringi w .net są obiektami typu immutable (tj. po stworzeniu nie ma możliwości ich edycji, dlatego też przy składaniu stringów korzysta się z klasy StringBuilder która za każdym razem nie jest tworzona od zera)
@avangarda: jeszcze tytułem uzupełnienia, skoro string jest immutable i jest typem referencyjnym to w momencie jego "modyfikacji" zapisujesz do lokalnego wskaźnika referencję do
private void A_Click(object sender, RoutedEventArgs e)
{
ChangeText(A.Content); //Próbowałem na WF z A.Text, ale to samo)
}
public void ChangeText(object button)
{
button = "DUPA";
}
Niestety nic się nie dzieje, tekst na buttonie nie zmienia się. Co robię źle, jak to inaczej ugryźć?
#naukaprogramowania
x = y;
nadpisujesz jego wartosc :)
private void A_Click(object sender, RoutedEventArgs e)
{
ChangeText(A); //zakładam, że A to jest button
}
public void ChangeText(Button button) //
Komentarz usunięty przez autora
private void A_Click(object sender, EventArgs e)
{
//sender to obiekt, który wywołuje zdarzenie - czyli przycisk
((Button)sender).Text = "zmiana";
}
@dobry_programista: jak nie masz pojęcia to się nie wypowiadaj
@avangarda: String w .Net jest typem referencyjnym (można to sprawdzić używając
@avangarda: jeszcze tytułem uzupełnienia, skoro string jest immutable i jest typem referencyjnym to w momencie jego "modyfikacji" zapisujesz do lokalnego wskaźnika referencję do