Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: C#  (Citit de 5886 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
Lizzard
Strain


Karma: -6
Deconectat Deconectat

Mesaje: 8



Vezi Profilul
C#
« : Decembrie 19, 2011, 19:12:40 »

Momentan lucrez la un proiect (C#), si am o mare problema. In principiu, vreau sa declar mai multe variabile care sa poata fi accesate din orice control / form. Din pacate, experienta (lipsa ei) ma impiedica, motiv pentru care am venit aici.
Memorat
mihai_florea
Strain


Karma: 17
Deconectat Deconectat

Mesaje: 24



Vezi Profilul
« Răspunde #1 : Decembrie 19, 2011, 19:45:52 »

Probabil ca vrei sa declari niste variabile publice si statice.
Cod:
public class VarPublice
{
      public static int a;
}

Din orice alta clasa o sa poti sa accesezi VarPublice.a

Totusi in general nu este recomandat sa lucrezi in modul asta. Incearca sa refactorizezi si cel mai probabil o sa-ti dai seama ca ce vroiai sa faci e gresit(cel putin din punct de vedere al programarii orientate pe obiect).

Memorat
Lizzard
Strain


Karma: -6
Deconectat Deconectat

Mesaje: 8



Vezi Profilul
« Răspunde #2 : Decembrie 19, 2011, 19:52:16 »

Am incercat, insa tot nu le pot accesa decat in locul unde le declar. Mai exact, daca le declar in UserControl.cs, cand incerc sa le "vad" in Form1.cs, primesc :
"The name 'aaa' does not exist in the current context"
Memorat
popoiu.george
Vorbaret
****

Karma: 19
Deconectat Deconectat

Mesaje: 162



Vezi Profilul
« Răspunde #3 : Decembrie 19, 2011, 20:23:38 »

O solutie pe care am folosit-o eu este suprascrierea constructorului pentru Form si cand instantiezi un nou Form sa trimiti ca si parametri datele de care ai nevoie in acel form.

Nu stiu cat de corecta este aceasta abordare dpdv al design-ului OOP dar a functionat pentru mine.
Memorat
mihai_florea
Strain


Karma: 17
Deconectat Deconectat

Mesaje: 24



Vezi Profilul
« Răspunde #4 : Decembrie 19, 2011, 21:00:17 »

Daca declari membri publici si statici in UserControl.cs, atunci in Form1.cs ii apelezi cu
Cod:
UserControl.x = 7;
de exemplu. In plus ai grija sa pui si namespace-urile corespunzatoare si ar trebui sa mearga.
Totusi incearca sa faci si cum a zis George mai sus.
"Profesionist" chestia asta se numeste Dependency Injection si se poate rezolva mai "curat" implementand "pattern-uri" specializate de genul Inversion of control, dar evident depinde de ce vrei sa faci mai exact. Exista si situati cand poti sa recurgi cu incredere si la varianta cu membrii statici si publici.
Memorat
nparfene2004
Client obisnuit
**

Karma: 22
Deconectat Deconectat

Mesaje: 81



Vezi Profilul
« Răspunde #5 : Decembrie 19, 2011, 21:50:07 »

Iti spun eu cum faci:

Creezi un proiect de tip WindowsForms, sa-l numim WindowsFormsApplication1
Apoi din fereastra SolutionExplorer, dai click dreapta pe WindowsFormsApplication1, alegi New-Class, dai clasei sa zicem numele "Variabile". Acolo scrii codul:

Cod:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WindowsFormsApplication1
{
    class Variabile
    {
        public int x;
        public char ch;
        public int[] t;
    }
}


Revii apoi in Form Design. Pui de exemplu un buton text "textbox1" si un label, numit "L1". Dai dubluclick pe textbox1 si scrii acolo un cod de tipul:

Cod:
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;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        Variabile v = new Variabile();

        public Form1()
        {
            v.x = 100;
            InitializeComponent();
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            L1.Text = (v.x + int.Parse(textBox1.Text)).ToString();
        }
    }
}

Observi ca am declarat un obiect v de tipul clasei Variabile. Ce vreau? Sa introduc in textbox1 o valoare pe care o adun la valoarea lui x (care este 100) si automat apare in label.

Sper ca ai inteles acum. In clasa pot pune orice variabila membra, ii dau ce valoare vreau, pot sa modific aceste valori in functie de ce preiau din form fara probleme.
Ideea de baza este ca in spatele fiecarei aplicatii Windows Form este o clasa, sau cel putin una.
Spor la invatat!
Memorat
Lizzard
Strain


Karma: -6
Deconectat Deconectat

Mesaje: 8



Vezi Profilul
« Răspunde #6 : Ianuarie 29, 2012, 10:37:25 »

Am reusit sa trec de niste obstacole, dar a intervenit unul si mai mare: In principiu, programul are cateva evenimente la care apeleaza o procedura care pune jocul "in miscare". Problema e sunt event-uri ale mouse-ului, si cand las cursor-ul nemiscat, programul "ingheata", si iti reia cursul cand misc mouse-ul din nou. Exista un event pentru cazul in care cursorul ramane nemiscat, sau altceva ce ar putea rezolva problema?
Memorat
devilkind
Echipa infoarena
Nu mai tace
*****

Karma: 284
Deconectat Deconectat

Mesaje: 1.240



Vezi Profilul
« Răspunde #7 : Ianuarie 29, 2012, 11:56:29 »

Eu nu prea stiu asa bine C#, insa nu ar trebui sa faci asa (cu evenimentul mouse-ului nemiscat). Ceea ce ar trebui sa faci e o functie care sa ruleze in permanenta. Asta nu e foarte greu de facut nu Smile. Nu stiu exact ce tehnologii folosesti ca sa iti dezvolti jocul, deci nu stiu exact ce sfaturi sa iti dau. Vezi daca nu te ajuta o chestie de genu:

Cod:
while (1) {
do_stuff()
}
Memorat
Lizzard
Strain


Karma: -6
Deconectat Deconectat

Mesaje: 8



Vezi Profilul
« Răspunde #8 : Ianuarie 29, 2012, 13:18:15 »

Din pacate, orice ciclu infinit din cod imi face programul sa crape. Am nevoie din cate am observat de evenimente.
Memorat
devilkind
Echipa infoarena
Nu mai tace
*****

Karma: 284
Deconectat Deconectat

Mesaje: 1.240



Vezi Profilul
« Răspunde #9 : Ianuarie 29, 2012, 13:41:21 »

Hmm, nu ar trebui sa ai nevoie de evenimente, pentru ca rularea jocului NU este un eveniment. Nu stiu exact codul tau, insa cred ca iti crapa deoarece ciclul infinit si cu interfata grafica ruleaza secvential. Mai exact cum functioneaza un program cu interfata grafica:

init -> deseneaza frame -> eveniment -> deseneaza frame -> eveniment -> deseneaza frame etc.

Daca ai pus ciclul infinit in partea de init normal ca iti crapa pentru ca nu ajunge niciodata sa deseneze frameul. Ceea ce vrei sa faci este sa duci ciclul infinit in alt thread.

init -> ciclu infinit care modifica valori in memorie
     -> deseneaza frame luand valori din memorie -> deseneaza frame luand valori din memorie -> deseneaza frame luand valori din memorie etc.

Nu stiu insa cum faci asta in C#, nici nu mi-ai zis ce tehnologii folosesti pentru interfata grafica asa ca nu prea te pot ajuta. Mai ales ca nu stiu C#. Ceea ce stiu sigur insa este faptul ca nu tre sa faci un eveniment ptr asta, chiar daca sa zicem ca ai putea, nu asa ar trebui facut.
Memorat
Lizzard
Strain


Karma: -6
Deconectat Deconectat

Mesaje: 8



Vezi Profilul
« Răspunde #10 : Ianuarie 29, 2012, 14:04:33 »

In principiu am initializari, apoi o serie de evenimente, fiecare facand anumite chestii (unul imi initializeara un proiectil, altul un inamic, etc.) si in final am o procedura update(); , care face actualizari (deseneaza). am incercat sa pun la sfarsitul procedurii un apel catre ea insasi dar nu am avut succes... altundeva nu vad unde as putea sa o apelez, avand in vedere ca nu e singura procedura.
Memorat
psycho21r
Client obisnuit
**

Karma: -15
Deconectat Deconectat

Mesaje: 74



Vezi Profilul
« Răspunde #11 : Ianuarie 31, 2012, 01:03:55 »

Încearcă să o apelezi tot în corpul funcției, dar lasă funcția să se termine, ca să nu se umple stiva de prisos. Pune un delay, cât de mic, care are ca scop să apeleze funcția, după ce se scurge timpul. Ai grijă cu thread-urile să nu faci delay întregului program.
Memorat
fulgerulnegru
Client obisnuit
**

Karma: -17
Deconectat Deconectat

Mesaje: 92



Vezi Profilul
« Răspunde #12 : Februarie 20, 2012, 10:30:20 »

Oare C# merge si pe platformele mobile?
Memorat
toni2007
Nu mai tace
*****

Karma: 160
Deconectat Deconectat

Mesaje: 663



Vezi Profilul
« Răspunde #13 : Februarie 20, 2012, 20:36:25 »

Din cate stiu eu nu. Nu merge pe mai nimic in afara de windows. Ma rog... mai merge si cu mono da' nu e tocmai ok.
Memorat
mihai_florea
Strain


Karma: 17
Deconectat Deconectat

Mesaje: 24



Vezi Profilul
« Răspunde #14 : Februarie 21, 2012, 00:02:26 »

Evident merge pe platformele Windows Phone/ Windows Mobile  Smile
Un exemplu de tutoriale: http://jesseliberty.com/windows-from-scratchindex/
Gasesti mai multe pe google.
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines