VS 2010Express, C#, Widnows Form App...

VS 2010Express, C#, Widnows Form App...
BL
  • Rejestracja:prawie 10 lat
  • Ostatnio:prawie 10 lat
  • Lokalizacja:Wrocław
0

Witam,

Poszukuje podpowiedzi, gdzie leży przyczyna błędu kompilacji.

Posiadam plik "xxx.cs" gdzie mam definicje klas itd, "program.cs" gdzie wywoływane są obiekty. Jest oczywiście tez "Form1.cs".
Co pewien regularny czas wywołuje w "program.cs" pewne obiekty.

Problem: Klikając na przycisk (czyli dla pewnego button'a w "Form1.cs") w aplikacji chce wywołać metodę dla danego obiektu stworzonego w "program.cs".

"Error 1 The name '*****' does not exist in the current context ". //gdzie ***** to nazwa obiektu

Nie wiem gdzie leży problem. Wujek google mnie nie rozumie lub ja jego nie rozumiem.

fourfour
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 9 lat
  • Postów:627
0

Pokaż kod.

BL
  • Rejestracja:prawie 10 lat
  • Ostatnio:prawie 10 lat
  • Lokalizacja:Wrocław
0

Form1.cs :

Kopiuj
 
public void kupno_Click(object sender, EventArgs e)
        {
 
             int r = Convert.ToInt32(textBox1.Text);
             Uzytkownik1.Zakup(r, 3000.0);  // <-tutaj error mimo ze w Program.cs zostal stworzony Uztykownik1 prawidlowo
             MessageBox.Show("Kupiles " + r + " akcji o wartosci ");
                listBox1.Items.Add("Data zakupu: " + DateTime.Now + "UTC Twoja strefa");
                listBox1.Items.Add("Data zakupu: " + DateTime.UtcNow + "UTC 0");
                listBox1.Items.Add("Zakup: " + textBox1.Text + "akcji o wartosci: ");
                listBox1.Items.Add("\n");
           

        }
Saguaro
  • Rejestracja:prawie 10 lat
  • Ostatnio:prawie 10 lat
  • Postów:9
0

Z błędu wynika, że podana zmienna nie istnieje w twoim kontekście. W programowaniu zmienne mogą być globalne bądź lokalne (leżeć jedynie w danym kontekście), zmienna z pliku program.cs musi być lokalna i leżeć w obrębie wyłącznie klasy zawartej w tym pliku. Musisz przesłać obiekt Użytkownik1 do metody kupno_Click bądź do jej obiektu, aby była widoczna w programie.

Prosty przykład na czym polega błąd:

Kopiuj
public class A{
public string zmienna2;

public void f(){
  int zmienna1;
  // tutaj jest zmienna1, bo znajduje się miedzy { } bądź w tej samej klasie jako pole
 // tutaj jest zmienna2, bo jest polem klasy 
  g(zmienna1);
}

public void e(){
// tutaj nie ma zmienna1, bo nie znajduje się w tej metodzie ani nie jest polem klasy
// tutaj jest zmienna2, bo jest polem klasy
}

public void g(int zmienna1){
// tutaj jest zmienna1, bo została przekazana jako parametr
// tutaj jest zmienna2, bo jest polem klasy 
}

}
 

Oczywiście to wszystko nie jest takie banalne, zmienna może być przekazywana przez referencje bądź wartość, jest też stos wywołań czy przesłanianie pól, lecz widać, że to prosty błąd, więc nie ma co tego komplikować.

edytowany 2x, ostatnio: Saguaro
BL
  • Rejestracja:prawie 10 lat
  • Ostatnio:prawie 10 lat
  • Lokalizacja:Wrocław
0

@Saguaro
No właśnie hermetyzacji czy też zmiennych lokalnych jest mało i nawet nie dotyczą tego obiektu. Nawet gdy w "program.cs" chce przeslać coś np do listboxa (w Form1.cs) to nie widzi listboxa i jest kaszan. Głównie chodzi wywołanie metody Zakup dla Uzytkownika1 poprzez wciśnięcie przycisku, żadna filozofia a jednak hamuje człowieka.

edytowany 1x, ostatnio: bluemann
dam1an
  • Rejestracja:prawie 12 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Warszawa
  • Postów:1589
0

Pokaż całą zawartość z Program.cs i formę.

BL
  • Rejestracja:prawie 10 lat
  • Ostatnio:prawie 10 lat
  • Lokalizacja:Wrocław
0

@dam1an
"Form1.cs"

Kopiuj
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;
using System.Threading;



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

        }
       

        public void kupno_Click(object sender, EventArgs e)
        {
                
             int r = Convert.ToInt32(textBox1.Text);
             tablicaUzytkownikow[0].Zakup(r, 3000.0);
             MessageBox.Show("Kupiles " + r + " akcji o wartosci ");

                listBox1.Items.Add("Data zakupu: " + DateTime.Now + "UTC Twoja strefa");
                listBox1.Items.Add("Data zakupu: " + DateTime.UtcNow + "UTC 0");
                listBox1.Items.Add("Zakup: " + textBox1.Text + "akcji o wartosci: ");
                listBox1.Items.Add("\n");
           
        }

        private void sprzedaz_Click(object sender, EventArgs e)
        {
            int g = Int32.Parse(textBox1.Text);
            //tablicaUzytkownikow[0].Sprzedaz(g, 3000.0);
            listBox1.Items.Add(textBox1.Text);
            
          
        }

        public void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

    }
}

 

Program.cs

Kopiuj
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Threading;

//wersja jaskiniowa po przeniesieniu z konsoli
namespace ThreadsTimer
{
    public static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());

            int i = 10, j = 4, m = 1; // 
            Transakcje[] tablicaUzytkownikow = new Transakcje[m];
            tablicaUzytkownikow[0] = new Transakcje(1000.0);
            Oprocentowanie[,] tablica2d = new Oprocentowanie[i, j];
            //ListBox1.Items.Add("notowanie nr {0,10} \n", x);
            tablica2d[0, 0] = new Oprocentowanie(-90, 120, "akcje", 300.0); // uruchomienie programu, wartosc poczatkowa 300
            tablica2d[0, 1] = new Oprocentowanie(-5, 20, "rynek pieniezny", 300.0);
            tablica2d[0, 2] = new Oprocentowanie(-10, 40, "obligacje", 300.0);
            tablica2d[0, 3] = new Oprocentowanie(-3, 70, "rynek zrownowazony", 300.0);

            tablica2d[0, 0].PokazO();
            tablica2d[0, 1].PokazO();
            tablica2d[0, 2].PokazO();
            tablica2d[0, 3].PokazO();
            // dalsza czesc programu, pobieranie wartosci zaktualizowanej, aktualizacja nastepuje zaraz po wylosowaniu oprocentowania
            for ( int x = 1; x < 3; x++) // test dla x <3
            {
                //ListBox1.Items.Add("notowanie nr {0,10} \n", x);
                tablica2d[x, 0] = new Oprocentowanie(-90, 120, "akcje", tablica2d[x - 1, 0].WA);
                tablica2d[x, 0].PokazO();
                tablica2d[x, 1] = new Oprocentowanie(-5, 20, "rynek pieniezny", tablica2d[x - 1, 1].WA);
                tablica2d[x, 1].PokazO();
                tablica2d[x, 2] = new Oprocentowanie(-10, 40, "obligacje", tablica2d[x - 1, 2].WA);
                tablica2d[x, 2].PokazO();
                tablica2d[x, 3] = new Oprocentowanie(-3, 70, "rynek zrownowazony", tablica2d[x - 1, 3].WA);
                tablica2d[x, 3].PokazO();
                
            }

        }
    }
}
 

"yyy.cs" // definicje klas

Kopiuj
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace ThreadsTimer
{
    class Transakcje
    {

        public int ilosc, xx;
        public double wartosc;
        public double WielkoscTransakcji;
        public double saldo;

        public Transakcje(double xxx)
        {
            saldo = xxx;
        }
        public void Zakup(int iloscie, double wartoscie)
        {
            ilosc = iloscie; wartosc = wartoscie;

            if ((double)ilosc * wartosc > saldo)// sprawdzanie czy mamy dostepne srodki na transakcje
            {
                //MessageBox.Show("brak srodków na tę transakcje");
                ilosc = 0;
            }
            else if ((double)ilosc * wartosc <= saldo)
            {
                WielkoscTransakcji = (double)ilosc * wartosc;
                saldo -= WielkoscTransakcji; 
                //listBox1.Items.Add("kuponoo  wartosc: {0,10:C} saldo : {1,10:C}", WielkoscTransakcji, saldo);
            }
            
        }
        public void Sprzedaz(int il, double wartoscie)
        {
            xx = il; wartosc = wartoscie;
            //if (ilosc < xx)
            //{
            //   MessageBox.Show("nie posiadasz tyle akcji");
            //}
            //else
            //{

            WielkoscTransakcji = (double)xx * wartosc;
            WielkoscTransakcji -= WielkoscTransakcji * 0.02;
            saldo += WielkoscTransakcji; //dodanie a pozniej przypisanie
            

            //}

        }

    }// koniec klasy Transakcje

    class Oprocentowanie
    {
        private int c; // wylosowana wartosc oprocentowania z przedzialu <a,b>
        public double o;  // o - oprocentowanie , d= 1000, ptrzebna do ulamka dziesietnego
        private double d = 1000d; // "przesuniecie" przecinka
        public string nazwy; // nazwa funduszu
        public double WA; // wartosc akcji

        public Oprocentowanie(int a, int b, string nazwa, double WP) // konstruktor
        {
        xxx:
            Random rnd = new Random();
            c = rnd.Next(a, b);
            o = (double)c / d;
            nazwy = nazwa;
            if (((WP * o) + WP) < 0) // zabezpieczenie aby wartosci nie spadly poniezej zera
            {
                goto xxx;
            }
            else
            {
                WA = (WP * o) + WP;
            }

            WP = WA; //przypisanie, aktualizacja
        }
        public void Clean()
        {
            //listBox1.Items.Add("przerwa w notowaniu 10s");
            Thread.Sleep(10000);
            //listBox1.Items.Add(DateTime.Now);
           
        }
        public void PokazO() //wyswietlanie   
        {
            //listBox1.Items.Add("zmiana wartosci o {0,-15:P} wartosc {1,-20:C} : {2,10:C}\n", o, nazwy, WA);
           
        }
    }//koniec klasy Oprocentowanie

   
}

 
edytowany 1x, ostatnio: bluemann
dam1an
  • Rejestracja:prawie 12 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Warszawa
  • Postów:1589
2

Nie wiem nawet jak Ci to wyjaśnić, to są podstawy. Nie utworzyłeś nigdzie listy użytkowników w formie to jej tam nie będzie, musisz przekazać tą listę do formy.
Ogarnij jakiś tutorial.

To tak jak byś chciał zrobić:

Kopiuj
void Metoda1()
{
    int a = 5;
    Console.WriteLine(a);
}

void Metoda2()
{
    Console.WriteLine(a);
}

Wykonując najpierw Metoda1, następnie Metoda2, nie spowoduje że a magicznie pojawi Ci się w drugiej metodzie.

Nie powinieneś nic robić w Main, przenieś to do formy lub do innej klasy.
Zamiast }//koniec klasy stosuj jeden plik cs na klasę, nie będziesz miał problemu ze znalezieniem jej końca.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)