Strona 1 z 2

Dostępność kontrolek we własnej klasie

Napisane: sobota, 7 listopada 2015, 15:13
przez profit
Mam własną klasę do obliczania kosztu wymalowania sypialni. Ale przy stawianiu warunków nie mogę odwołać się do kontrolek text.Box, checkbox itd. Mam taki błąd podczas kompilacji. Ja to rozwiązać?
An object reference is required for the non-static field, method, or property 'MainWindow.textBox'

Code: Zaznacz cały

class Sypialnia
        {
           
            public static int Sciany( int KosztFarba, int KosztNarzedzia)
            {
                
                if (!string.IsNullOrEmpty(textBox.Text))
                {
                    KosztFarba = int.Parse(textBox.Text);
                }
                if (checkBox.IsChecked == false)
                {
                    KosztFarba = 0;
                }
int SumaSypMalow = 0;

                SumaSypMalow =  KosztFarba + KosztNarzedzia ;
                return SumaSypMalow;

Re: Dostępność kontrolek we własnej klasie

Napisane: poniedziałek, 9 listopada 2015, 17:17
przez Morfidon
Hej,

Przepraszam, że dopiero teraz. Otworzyłem zakładkę i zapomniałem odpowiedzieć.

Po prostu nadaj im nazwy atrybutem Name i odwołaj się po tej nazwie. Jeśli nadałeś nazwę to wg błędu, który podałeś próbujesz się odwołać do kontrolek z poziomu statycznej metody. Twoja metoda Sciany jest statyczna co znaczy, że istnieje nawet gdy nie istnieje kontrolka, tak więc odwoływanie się do czegoś co potencjalnie może nie istnieć może być niebezpieczne, dlatego też nie mogłeś wykonać tego co robiłeś.

Pozdrawiam serdecznie,

Arkadiusz Włodarczyk

Re: Dostępność kontrolek we własnej klasie

Napisane: wtorek, 10 listopada 2015, 16:13
przez profit
Czy możesz mi podpowiedzieć jak to przepisać?

Re: Dostępność kontrolek we własnej klasie

Napisane: wtorek, 10 listopada 2015, 18:56
przez Morfidon
Po prostu usuń słowo kluczowe static z metody.

Re: Dostępność kontrolek we własnej klasie

Napisane: wtorek, 10 listopada 2015, 21:33
przez profit
Niestety to nie pomogło nadal ten sam błąd.

Re: Dostępność kontrolek we własnej klasie

Napisane: wtorek, 10 listopada 2015, 22:42
przez Morfidon
Teraz może być co najwyżej inny błąd, albo w zły sposób odwołujesz się do tej metody. Pokaż odwołanie. Tylko ten błąd się wyświetla?

Re: Dostępność kontrolek we własnej klasie

Napisane: wtorek, 10 listopada 2015, 23:05
przez profit

Code: Zaznacz cały

private void Button_Click(object sender, RoutedEventArgs e)
        {
wynik = Sypialnia.Sciany( KosztFarba, KosztNarzedzia);
            Suma.Text = wynik.ToString();
}   

 class Sypialnia
        {
            
            public static int Sciany(int KosztFarba, int KosztNarzedzia)
            {
  
            KosztFarba = int.Parse(textBox1.Text);
            KosztNarzedzia = Convert.ToInt32(textBox2.Text);

                if (!string.IsNullOrEmpty(textBox.Text))
                {
                    KosztFarba = int.Parse(textBox.Text);
                }
   if (checkBox1.IsChecked == false)
            {
                KosztFarba = 0;
            }
 if (!string.IsNullOrEmpty(textBox2.Text))
            {
                KosztNarzedzia = Convert.ToInt32(textBox2.Text);
            }
 if (checkBox2.IsChecked == false)
            {
                KosztNarzedzia = 0;
            }
                int SumaSypMalow = 0;

                SumaSypMalow = KosztFarbaGr + KosztFarba + KosztNarzedzia + KosztRobocizna;
                return SumaSypMalow;


            }
        }

Re: Dostępność kontrolek we własnej klasie

Napisane: wtorek, 10 listopada 2015, 23:39
przez Morfidon
Dalej nie usunąłeś słowa static z metody Sciany i wywołujesz bezpośrednio metodę Sciany. Stworz obiekt klasy Sypialnia w metodie Button_Click i wywolaj metodę przy pomocy obiektu.

Re: Dostępność kontrolek we własnej klasie

Napisane: środa, 11 listopada 2015, 03:27
przez profit

Code: Zaznacz cały


  private void Button_Click(object sender, RoutedEventArgs e)
        {
            Sypialnia syp = new Sypialnia();
 wynik = syp.Sciany();
            Suma.Text = wynik.ToString();

 class Sypialnia
        {
            int KosztFarbaGr; int KosztFarba; int KosztNarzedzia; int KosztRobocizna; int wynik; int SumaSypMalow ;
            public  int Sciany()
            {

                KosztFarbaGr = int.Parse(textBox.Text);
                KosztFarba = int.Parse(textBox1.Text);
                KosztNarzedzia = Convert.ToInt32(textBox2.Text);
                KosztRobocizna = int.Parse(textBox4.Text);
                if (!string.IsNullOrEmpty(textBox.Text))

                    SumaSypMalow = KosztFarbaGr + KosztFarba + KosztNarzedzia + KosztRobocizna;
                return SumaSypMalow;


            }
        }
Niestety nadal we własnej klasie nie mogę się bezpośrednio odwołać do textboxów i checkboxów

Re: Dostępność kontrolek we własnej klasie

Napisane: środa, 11 listopada 2015, 03:43
przez Morfidon
Czemu masz klasę wewnątrz metody? Za każdym razem jak coś zmienisz to podawaj błędy.