» »

C# Program

C# Program

Sportmania ::

Imam klasičen C# problem in sicer imam 2 obrazca in na enem imam textbox katerega želim uporabit v drugem. Naštimal sem lastnost modifier:public in tudi v kodi(designer.cs) preveril, če je in je piše public listbox1...

Ampak na drugem obrazcu ga še vedno ne dobim!

Govorim o windows application.


LP
HVALA


Backup22 ::

Imaš v drugi formi referenco na prvo formo?
//

Sportmania ::

To nevem je narejena v istem programu tako, da je podedovana.

Lahko kaj več poveš?


Backup22 ::

Iz druge forme ne moreš do textboxa, ker ni del objekta (druge forme). Ker je del prve forme, rabiš referenco na prvo formo.
Če imaš v drugi formi referenco na prvo formo, lahko do textBoxa, ki je na prvi formi dostopaš iz druge forme tako: mojaPrvaForma.mojTextBox...

Referenco si lahko preneseš v konstrukturju, ko generiraš drugo formo in jo kasneje odpreš - DrugaFroma df = new DrugaForma(this);
(this je prva forma, katere atribut je tvoj textbox). Narediti si pa moraš še konstruktor, ki kot parameter prejme prvo formo.

Ni mi jasno kaj hočeš narediti...?
Lahko uporabiš tudi observer pattern - klik...
//

Sportmania ::

Najlepša ti hvala.

Preveč si šel v podrobnosti vse kar je bilo je, da sem pozabil spredaj napisati obrazec katerega objekt želim uporabit.

HVALA si mi zelo olajšal delo!


t7ank ::

//form1:

Form2 DrugiObrazec= new Form2();
DrugiObrazec.ime = texbox1.text;

//form2:
public string ime;
textbox1.text = ime; //in bi moralo izpisati, prenos preko lastnosti, najlažji način

EDIT: hehe, si me prehitel za pol minute =P


Da si sposodim temo. Mene pa zanima ta stvar:
Problem v C#.
Imam veliko količino textboxov in label za obdelat naenkrat.
Je kako možno, da bi jih obdelal vse, ne pa da morem za vsak gradnik posebaj pisat.

Primer:
textbox1.hide(); texbox2.hide(); ----> textbox[x].hide(); x++ (v zanki seveda)

Upam,da je dovolj natančno opisano. foreach ne pride v poštev, ker bi rad recimo od 5. do 20. textboxa vse onemogočil in bi samo prvi 4 bili enable-ani.

Hvala že v naprej in lep pozdrav!

Zgodovina sprememb…

  • spremenil: t7ank ()

snow ::

Ko delaš obrazce jih moraš dat (njih ali njihove reference) v en array? Ne poznam C#, ampak google gotovo ve.
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins

t7ank ::

Sem googlal, samo ne najdem.
Sem tudi iskal kako bi jih povezal, samo ne najdem. Če bi videl kako Visual Studio da ime gradniku, bi takoj vedel v čem je problem :D
Še kdo?

Sportmania ::

Hvala vsem!

Prišel sem do novega problema in sicer imam beležnico primer:

Jagoda 5
Borovnica 4
Banana 3

Pol pa bi rad vn dubu z metodama padleft,padright in substring posebi jagoda, borovnica, banana in pa številke. No imena mi rata medtem ko številke nikakor!

Koda za imena:
string ime = vrstica.PadLeft(6).Substring(0, 9);


Vem ja verjetno je tud ta koda zanič preveč mest ali kaj podobnega sem zavzel ampak žal ni šans, da bi zastopu kaj pomenita te metodi padleft(right) pa sem bral pa nič.


Lahko kdo pove kako dobit številke vn?

HVALA


Backup22 ::

1.) Več kontrol..

  • Ja, textboxe lahko daš v polje (TextBox[] tbs) ali generični seznam in jih dinamično vstavljaš na formo (Controls.Add(myC)).
    Ni pa to tako super ker moraš na roko vse nastavit - width, height, text, ID, margins, padding, event handlerje...

  • Lahko pa dobiš vse kontrole od forme, in pogeldaš, če so tipa TextBox (typeof) in če so, jih npr. skriješ.
    Nekaj takšnega najdeš tukaj: klik, klak



2.) Banane in jagode - poglej si String.Split metodo. Bereš po vrsticah in za vsako vrstcio narediš string[] yeah = line.Split(' ');
To sparsa vrstico po presledkih(' ') v posamične stringe in to shrani v polje.
Do prve besede prideš z yeah[0], presledek je yeah[1], šteivlka pa yeah[2], če se ne motim...

Številko pa sparsaš s Int32.TryParse(string, out mojInt)...
//

Zgodovina sprememb…

  • spremenilo: Backup22 ()

t7ank ::

Hvala!

Zgodovina sprememb…

  • spremenil: t7ank ()

t7ank ::

Backup22, še vedno nemorem priti do zaključka, pa sem mislil, da bo šlo.
Imam textbox1,textbox2,...,textbox20. Dobim cifro od uporabnika, ki pomeni koliko naj jih ostane aktivnih, recimo 6. Kako sedaj naredim, da bi se dinamično vedno, ko uporabnik poda vrednost, jih razlika onemogočila (.hide(),.enabled=false,...), torej v tem primeru od textbox7 do textbox20?

Hvala za pomoč in lep pozdrav!

Backup22 ::

Ok, vsi textboxi so shranjeni v seznamu kontrol (forma.Controls)...

List<TextBox> tbs = new List<TextBox>();
foreach (Control c in this.Controls)
{
    if(typeof(TextBox) == c.GetType())
        tbs.Add((TextBox)c);
}

// obrnemo seznam, ker so shranjeni kontra
tbs.Reverse();

// prve stiri disejblamo
int num = 4;
if (num < tbs.Count)
{
    for (int i = 0; i < num; i++)
    {
        tbs[i].Enabled = false;
    }
}


Stvar se da krajše zapisat - elemnte lahko izbereš tudi z LINQ-jem...
Upam, da razumeš, če pateše kaj zanima, pa kar vprašaj!

Edit: Zdaj sem opazil, da hočeš aktivne izbrat... Vse je isto razen zadnje for zanke (idi po seznamu, od num pa do count-1, da greš mimo 0, 1, 2, 3-tega elementa v primeru 4)...
//

Zgodovina sprememb…

  • spremenilo: Backup22 ()

t7ank ::

Hvala, zanko vem popravit tako, da to ni problem.
Sicer pa mi tvoja koda ne deluje pravilno, ker se nikjer ne poveže z ŽE obstoječimi textboxi.
Sicer bi se dalo, če bi lahko povedal kako tbs[0]=textbox1, tbs[1]=textbox2,... Samo, ker ne vem za to tudi sprašujem. Če imaš voljo bi te prosil za pojasnilo...

Še kakšna ideja kako to narediti z že obstoječimi gradniki(textbox,label)?

LP!

Backup22 ::

Seveda se poveže - in to dinamično - neodvisnost od števila textboxov in jihovih IDjev (textbox1, textbox2...) :)

Recimo, da imava na formi 7 textboxov, 3 labele in 2 gumba - to verjetno misliš z obstoječimi gradniki?
V foreach zanki greva skozi vse kontrole, ki so na formi (this.Contorls je zbirka vseh kontrol, ki jih je 12).
V seznam tbs pa shraniva samo tiste, ki so tipa TextBox (teh je 7).
//

t7ank ::

Opa, moja napaka dela, pogoj sem narobe napisal.
Sedaj dela, hvala še za teoretičen del, ki me je prav tako zanimal =D

HVALA! =D

Sportmania ::

Backup22
Int32.TryParse(string vrstica, out mojInt); javi mi napako, ker morm nek string dat pa nevem katerega? tam kjer mam vrstico.

Sicer pa me še vedno zanima, če kdo morda ve kako priti do številke z metodo

string vrsta = vrstica.PadLeft(6).Substring(0, 9);
string kolicina = vrstica.PadRight(62).Substring(11, 14);

Zdej sem naredu s splitom ampak še vedno me zanima, če kdo zna?


Zgodovina sprememb…

DubleG ::

int.Parse(string s);

Mogoče to, ker try parse se uporablja tako
bool isNum = int.TryParse(Str, out Num);
GA-P55M-UD2,i5,12GB RAM,Radeon HD 4850,Crucial SSD 64GB,
WD 320GB,WD 5000GB,RevoDrive X2 100GB

Zgodovina sprememb…

  • spremenil: DubleG ()

Sportmania ::

Ja hvala.

Sedaj me pa zanima ena klasična zadeva in sicer zakaj mi ne dela tretja opcija, ko sta oba checkboxa označena!

if (obrazec.checkBox1.Checked)
                                    pisi.WriteLine("Vključena je dostava");

                                else if (obrazec.checkBox2.Checked)
                                    pisi.WriteLine("Vključen je preliv");
                                
                                else if (obrazec.checkBox1.Checked && obrazec.checkBox2.Checked)
                                    pisi.WriteLine("Dostava in preliv sta vključeni");
                                
                                else
                                    pisi.WriteLine("Dodatnih ugodnosti ni vključenih");



Sprašujem iz zanimanja, ker mi že prej ni delalo enako pri frendu pa dela pa ima isto oz. ne najdeva razlike.


Aja pa še tole hočem iz datoteke stvar uvozt v listbox pa ne gre ?

            Zaloge obrazec = new Zaloge();
            obrazec.ShowDialog();
            StreamReader beri = File.OpenText("Sladoled.txt");
            string vrstica = beri.ReadLine();
            while (vrstica!=null)
            {
                obrazec.listBox1.Items.Add(vrstica);
                vrstica = beri.ReadLine();
            }
            beri.Close();


Zgodovina sprememb…

t7ank ::

probaj z openfiledialog gradnikom iz toolboxa :D


Mene pa zanima, če obstaja kak podoben gradnik kot je excelova mreža, da bi lahko imel par vrstic in par stolpcev te celice poljubno drag&dropal naokoli?

LP, M.

DubleG ::

Sportmania
uvoz v listbox:
Zaloge obrazec = new Zaloge();
obrazec.ShowDialog();
System.IO.StreamReader beri=    new System.IO.StreamReader("c:\\Sladoled.txt");

string vrstica = beri.ReadLine();
while ((vstica= beri.ReadLine()) != null)

{
    obrazec.listBox1.Items.Add(vrstica);
    
}
beri.Close();



Tukaj ti manjka še kakšno preverjanje če je dialog bil uspešno zaprt in try catch za izjeme.
GA-P55M-UD2,i5,12GB RAM,Radeon HD 4850,Crucial SSD 64GB,
WD 320GB,WD 5000GB,RevoDrive X2 100GB

Zgodovina sprememb…

  • spremenil: DubleG ()

Sportmania ::

@T7ank
Openfiledialog? Vem kaj je to samo kaj si mislil s tem za kater problem in kaj bi s tem rešil saj nočem odpirat datotek?

@DoubleG
Catch imam preverjanja pa ne razim, ker se to izvede v štartu no vglavnem nimam nobenega knofa samo za izhod... Tako, da ni kaj preverjat.

Aja pa ta tvoja koda še vedno ne deluje sem spremenu lokacijo nevem, če moram še kaj ampak enostavno ne deluje tudi vrstica sem popravil v while, ker si se zatipkal.
V messagebox pa dela v textbox, listbox pa ne.

HVALA
LP


DubleG ::

@Sportmania

seveda deluje.

http://dl.dropbox.com/u/86730/WFORMAPP....

Evo ti cel projekt.
GA-P55M-UD2,i5,12GB RAM,Radeon HD 4850,Crucial SSD 64GB,
WD 320GB,WD 5000GB,RevoDrive X2 100GB

Sportmania ::

------------------------------------------------------------------------------------------------
Nima veze sm skenslu listbox.
        private class Sladoled
        {
            public string sladoled;
            int kolicina;
            public Sladoled(string slad, int kol)
            {
                sladoled = slad;
                kolicina = kol;
            }

            public string Slad
            {
                get { return sladoled; }
            }

            public int Kolicina
            {
                get { return kolicina; }
            }
        }

        private void Test_Load(object sender, EventArgs e)
        {
            try
            {
                ArrayList ZbirkaSladoleda = new ArrayList();
                string[] tab = File.ReadAllLines("Narocila.txt");
                for (int i = 0; i < tab.Length; i++)
                {
                    string sladoled = (tab[i].Split('|'))[0];
                    int kolicina = Convert.ToInt32((tab[i].Split('|'))[1]);
                    ZbirkaSladoleda.Add(new Sladoled(sladoled, kolicina));
                }
                dataGridView1.DataSource = ZbirkaSladoleda;
            }
            catch
            { MessageBox.Show("Prišlo je do napake"); }
        }

Iz beležnice sem uvozu v datagrid pa bi rad naredu, da bi izpustu nekatere stvari oz. če kar povem.

Narocila.txt izgledajo takole:

Jagoda|1
Vključena je dostava

Jabolko|3
Vključena je dostava

Borovnica|1
Vključena je dostava

Rad bi to vstavil v datagrid Borovnica|1 mi še gre medtem, ko ne znam presledka izničit in vpisat dostava je vključena.

HVALA
LP


Robi182 ::

if (obrazec.checkBox1.Checked)
                                    pisi.WriteLine("Vključena je dostava");

                                else if (obrazec.checkBox2.Checked)
                                    pisi.WriteLine("Vključen je preliv");
                                
                                else if (obrazec.checkBox1.Checked && obrazec.checkBox2.Checked)
                                    pisi.WriteLine("Dostava in preliv sta vključeni");
                                
                                else
                                    pisi.WriteLine("Dodatnih ugodnosti ni vključenih");


Tretji primer ti ne dela zato ker ko sta oba označena je označen tut prvi in se ti izvede prvi if stavk ostalo se pa pol spusti. Preverjanje za oba dej na prvo mesto pa je problem rešen.

Sportmania ::

Aha hvala vsem za pomoč!


Zgodovina sprememb…

t7ank ::

Imam majhen problem v C#. Kako shraniš aktivne timerje v list?
Problem mi dela foreach pogoj z tipi.
public List<Timer> timer = new List<Timer>();

foreach(Timer c in this.Controls) //KAJ TUKAJ PRIDE?
            {
                if(typeof(Timer)==c.GetType())
                {
                    if (c.Enabled == true) 
                    {
                        timer.Add((Timer)c);
                    }
}


Prosil bi za pomoč.
LP!

Qcube ::

foreach(Timer c in timer)

t7ank ::

List timer je prazen in bi ga rad napolnil!

Foreach zanka pa bi morala poiskati vse aktivne timerje na formi...

t7ank ::

Da še enkrat vprašam, ker prejšnja koda ne deluje.
Problem v C#.

Kako iz Forme dobim vse Timerje, ki so aktivni in bi si jih shranil v list, da jih lahko nato preberem iz liste in jih spet aktiviram. Potreboval bi bolj kot ne samo pogoj za foreach zanko. Seveda je dobrodošla celotna koda pridobivanja timerjev in shramba v listo. Ni nujno, da je problem rešen z foreach zanko, torej so vse rešitve dobrodošle.

LP!

EDIT: Qcube je naroe razumel problem oz. ravno obratno...

mchaber ::

foreach Control c in Form.Cotrols ?
.

t7ank ::

Ne dela.

Javi
"Cannot convert type 'System.Windows.Forms.Control' to 'System.Windows.Forms.Timer'"
IN
"An object reference is required for the non-static field, method, or property 'System.Windows.Forms.Control.Controls.get'"

Še koda:
public List<Timer> timer = new List<Timer>();

        private void button3_Click(object sender, EventArgs e)
        {
            timer.Clear();
            foreach(Control c in Form.Controls)
            {
                if(c is Timer)
                {
                    if (c.Enabled == true) 
                    {
                        timer.Add((Timer)c);
                    }
                }
            }
}

Spura ::

Ne dela.

Javi
"Cannot convert type 'System.Windows.Forms.Control' to 'System.Windows.Forms.Timer'"
IN
"An object reference is required for the non-static field, method, or property 'System.Windows.Forms.Control.Controls.get'"

Še koda:
public List<Timer> timer = new List<Timer>();

        private void button3_Click(object sender, EventArgs e)
        {
            timer.Clear();
            foreach(Control c in Form.Controls)
            {
                if(c is Timer)
                {
                    if (c.Enabled == true) 
                    {
                        timer.Add((Timer)c);
                    }
                }
            }
}

1. Timer ni podtip od Control.
2. foreach(Control c in Form.Controls) ni prav. Controls ni staticni property, torej lahko ga invociras samo na neki instanci Form. Ce je doticna funkcija v nekem Form classu potem:
foreach(Control c in this.Controls)

Zgodovina sprememb…

  • spremenil: Spura ()

t7ank ::

Podtip česa pa je Timer? Saj to me ravno zanima.
components tudi ne prime.
glede instanc this.Controls tudi ni delalo, sem probal preden sem sem pisal.
Hvala!

Spura ::

Podtip česa pa je Timer?
http://www.lmgtfy.com/?q=System.Windows...

glede instanc this.Controls tudi ni delalo, sem probal preden sem sem pisal.

Kot sem rekel, odvisno je od lokacije te funkcije. Potrebujes referenco na form na katerem so. In potem Controls property od tega forma.

Ta nacin v splosnem ne bo delal. Ker kot sem rekel timer ni kontrola, in tudi form ga ne hrani v nobenem propertyu. Timerji, ki jih dodas v visual editorju so samo navadni memberji na Form.
Kar pomeni, da jih nikjer ne bos dobil v obliki seznama. Torej je najboljs, da jih sam instanciras in jih drzis v seznamu.

t7ank ::

Aha, hvala za razlago.
Sem rešil problem potem z if stavki, žal ni dinamično, kot je mislilo biti.

Sem pa tudi gledal, da bi jih sam instanciral ampak se tega raje nisem lotil.
Hvala še enkrat.

t7ank ::

Obstaja kakšna funkcija, ki bi sprintala trenutno formo ob pritisku na gumb?

Spura ::

Najbrz ne. To rušilo abstrakcijo razreda Form.

t7ank ::

Pa obstaja kak način, da sprintam form?

Spura ::

Obstaja neka DrawToBitmap funkcija, pol pa ta bitmap sprintas?

Alternativno lahko direktno zajames dol z ekrana.
Ali pa v OnPaint handlerju lahko kopiras izrisano drugam.

Zgodovina sprememb…

  • spremenil: Spura ()


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

C#, TextBox in PopUp forma

Oddelek: Programiranje
61052 (946) MarCar
»

C# textbox polnjenje

Oddelek: Programiranje
71534 (1399) Mitja Bonča
»

vb.net: dynamic textbox

Oddelek: Programiranje
51115 (1005) saule
»

razložitev nekaterij elementov v visual studio 05

Oddelek: Programiranje
71994 (1799) darkolord
»

[VB express edition] problem

Oddelek: Programiranje
71285 (1188) frudi

Več podobnih tem