- Nem tetszik a Procon-SP-nek, hogy a Nintendo távolról kivégezheti a Switch 2-t
- Milyen TV-t vegyek?
- 3D nyomtatás
- NVIDIA GeForce RTX 5080 / 5090 (GB203 / 202)
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- TCL LCD és LED TV-k
- Nvidia GPU-k jövője - amit tudni vélünk
- Samsung Galaxy Tab S10 Ultra - más dimenzió
- Canon EOS DSLR topic
Új hozzászólás Aktív témák
-
Lortech
addikt
A Negyzet osztályod "a" mezője elvileg value type, így az override-olt equals metódusban a return this.a == tmp.a; sor miatt a két négyzet példány equals-szal összehasonlításával azt vizsgálod, hogy a két példány megfelelő "a" mezője "==" -e, és 2.0 egyenlő 2.0-vel (feltételezve, hogy Negyzet konstruktorában "a"-nak értékül adod a paramétert).
-
Lortech
addikt
válasz
Sk8erPeter #2260 üzenetére
És én hol mondtam ellent?
Csak megerősítés volt.
-
Lortech
addikt
válasz
Sk8erPeter #2258 üzenetére
-
Lortech
addikt
válasz
takyka77 #2035 üzenetére
hali.
Idézet az EULA-ból:
[...]
1. OVERVIEW.a. Software. The software includes development tools, software programs and documentation.
b. License Model. The software is licensed on a per user basis.
2. INSTALLATION AND USE RIGHTS.
a. General. One user may install and use copies of the software to design, develop, test and demonstrate your programs. You may not use the software on a server in a production environment.
[...]Ebből én azt szűröm le, hogy szerver gépet leszámítva akárhány gép(ed)re felinstallálhatod, de csak te használhatod értelemszerűen.
-
Lortech
addikt
Mondjuk itt elég nagyvonalú, amikor collectionst említ, mikor kb. az indexerrel rendelkezőkre gondol. Mi van például egy linkedlisttel, stackkel, queue-val for esetén.. Én nem állnék neki kézzel iterálni ezeket, inkább foreach / getEnumerator, többet ér egy olvasható kód, mint 10 milliszekundum.
Fordítva is igaz, ha index is kell, akkor meg inkább for, ha van indexere a típusnak, ha meg nincs, úgyis csúnya lesz. -
Lortech
addikt
válasz
[pod]Diablo #1819 üzenetére
-
Lortech
addikt
válasz
FehérHolló #1774 üzenetére
Debugolásról meg annyit, hogy tegyük fel, hogy normál módon akarod leállítani a szálakat, szerinted mindent megtettél ennek érdekében. Ha a háttérben futtatod a szála(ka)t, akkor viszont soha nem fog kiderülni (vagy csak vért izzadás árán) az ellenkezője. Tehát nem/nehezebben jössz rá, hogy mégsem úgy működik valami, ahogy eltervezted.
Nem pont erre asszociáltam debugolás kapcsán, de azt hiszem, értem mire gondolsz.
Adott esetben nem feltétlenül van jelentősége, hogy a thread hogy ért véget, mert pl. épp csak monitorozott valamit és nem érdekes, hol állt meg, vagy a gui thread nélkül nincs is értelme tovább futnia, vagy hosszan fut egy-egy tevékenység benne, és nincs idő megvárni, amíg rájön, hogy le kell állnia. Mit csináljon, várjon egy percet amíg befejezi (remélhetőleg) és eljut a következő szálban maradási ellenőrzésig? De lehet, hogy a felhasználó nem szeretné megvárni, hanem kikapcsolja a gépet, és végül fogalmunk sem lenne így sem, hogy mi történt. Vagy pedig ilyen esetben engeded kimúlni background threadként, és lekezeled a threadabortexceptiont és kilogolod a megfelelő infókat.
No de visszakanyarodva az eredeti kérdésre, ha más lett volna a kontextus, akkor nem az isBackgroundot ajánlom elsőkörben. A kérdésből úgy tűnt, hogy nem cél kontrollálni a threadet, nem cél bármi cleanupot elvégezni, csak pusztuljon a szál a processzel együtt - mivel eleve csak akkor merült fel az egész kérdés, mikor már kiderült, hogy valami nem klappol, nem áll le a processz. Persze ez lehet, hogy a körültekintés hiányából fakad, és nem tudatos. -
Lortech
addikt
válasz
FehérHolló #1772 üzenetére
De akkor mi volt az, hogy idézem: "már csak oprendszer szinten lehet majd lelőni", valamint "ha erről a már háttérben futó szálról soha többé nem derül ki, hogy hibásan fut" ?
-Hogy háttérszál-e vagy sem, nincs relevanciája a debugoláskor.
-"Nem csúszik ki a kezedből", ha nem akarod.
A background thread továbbra sem különbözik semmiben egy foreground száltól, kivéve abban, amiről szó van, hogy nem fut tovább a processz miatta, ha az utolsó nem háttérszál leáll. A megfelelő thread cleanupot biztosítani kell ezektől függetlenül, mint ahogy a normál leállást is preferálni kell (thread értesül róla, hogy le kell állnia és leáll, ha van rá idő vagy kritikus megvárni).
Ha valami egzaktabb érvek mentén folyna a diskurzus, akkor lehet, hogy hamarabb dűlőre jutnánk. -
Lortech
addikt
válasz
FehérHolló #1770 üzenetére
A daemon threadet pont azért ajánlottam, hogy le tudja állítani normálisan az alkalmazást, le fog állni az ilyen thread, ha a többi fő thread is leállt. Szó nincs arról, amikről írsz.
A válasz az volt, amit írtam + az első link, a form closingot csak úgy mellékesen linkeltem, a megoldáshoz nincs rá szükség. -
Lortech
addikt
Azért ne használjon var-t (még), mert ennek a megfelelő, körültekintő használata, egyáltalán a megértése komolyabb tudást feltételez, mint ami a példából láthatólag megvan. Ha a végrehajtás sorrendje - szekvencia, vagy egy alap beolvasás, kiíratás, egyszerű típushasználat problémát okoz, "proc.", fgv. használatát keveri, akkor még ráér type inference-t használni.
Ezen a szinten konkrétan a példában azért sem szerencsés, mert kezdő számára nem biztos, hogy egyértelmű, hogy melyik változó vagy kifejezés itt milyen típusú lesz, string és numerikus érték, azok konverziója és egy rajtuk végzett művelet is van benne.
A tanulás megfelelő sorrendje is fontos szerintem, először legyen tisztában azzal, hogy hol, milyen típus várható, majd később ráér a compilerre bízni ezt. -
Lortech
addikt
válasz
Neil Watts #1702 üzenetére
Előszöris szerintem nem kéne var-t használnod ezen a szinten és konkrétan erre a feladatra.
Console.WriteLine(a);
-a változó értéke üres string, nincs mit kiírnia (egy sorvégén kívül - WriteLine).Console.ReadKey();
-[link]
Lásd a metódus dokumentációját. Ez nem azt csinálja, amit szerintem te szeretnél elérni, de amúgysem jól használod.
Ennek hatására annyit csinál a program, hogy vár 1 db leütésre. Nem kerül be "a" változóba a beírt szöveg/szám, meg semmi hasonló.
Írj a = Console.ReadLine(); -t helyette. És beolvasás után kéne kiiratni a tartalmát, hacsak nem a beolvasás előtti tartalmát akarod kiírni a változónak.Console.WriteLine(a + b);
- ez konkatenálni fogja a stringet ebben az esetben, mivel string típusok esetén a + operátor ezt jelenti, tehát ha a = "1", b = "2", akkor a + b == "12", nem pedig 3.
A stringet át kell alakítani a fent már említett módon pl. egy int vagy valamelyik szám típussá, és úgy összeadni őket.Olvass sokat az alapokról mielőtt kódot írsz szerintem, vagy nézegess meg egyszerű, működő példákat, ennek én így sok értelmét nem látom.
-
Lortech
addikt
Hali, ide válaszolnék: szerintem érdemes lenne megosztanod az eddigi megoldásod a fórumlakókkal, és hogy hol akadtál el, így bárki hozzá tudna szólni, aki ért hozzá és épp van ideje, a kezdők pedig láthatják a kialakult eszmecserét és tanulhatnának belőle, ami végülis a célja volna a fórumnak.
-
Lortech
addikt
válasz
ArchElf #1657 üzenetére
Szoktam használni, nagyobb projekteknél is bevált, nagyon jól konfigolható, bővíthető, erős eszköz. Ha használtál log4j-t, akkor nem okozhat problémát. Ha nem, rá kell szánni némi időt a megismeréséhez, de alapabb feladatokat hamar meg lehet vele csinálni.
Log4net Inicializálás pl.:
log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(Settings.Default.Log4NetConfigFile));Ahol a Settings.Default.Log4NetConfigFile a config fájl neve.
Logger inicializálása / típus:
private static ILog Log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);Fájlból szoktam konfigurálni, erre van kismillió leírás neten, nálam ez az alap (lentebb), az appenderekre és loggerekre példák itt: [link]
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<log4net>
<appender...>
...appender definíciók...
</appender>
<root>
...
</root>
<logger...>
...logger definíciók...
</logger>
</log4net>
</configuration> -
Lortech
addikt
Singleton vagy nem singleton, annak ebben a kontextusban sok szerepe nincsen. Ha ugyanazt a listát - legyen az singleton vagy tetszőleges példánya az osztálynak - kell elérnie és műveleteket végeznie rajta több szálnak, meg kell oldani a szinkronizációt pl. egyszerű lockolással, ahogy írta, de ez is változó, hogy mikor milyen megoldásra van szükség.
-
-
Lortech
addikt
válasz
Vasinger! #1612 üzenetére
A formátum "x,y,z" ahol x,y,z rendre az 1..5 intervallum eleme?
Az érdekel, hogy lehet-e bárhol szóköz, tényleg csak egyszámjegyű lehet-e stb.
Ha igen, az általad elmondottak alapján még indexof és substring sem kell.Elmondom mit írtál:
string szam1 = s.Substring(0);szam1 itt egyenlő lesz a beírt szöveggel, mivel az 1 paraméteres substring azt jelenti, hogy a paraméterben kapott indextől visszaadja a stringet.
string szam2 = s.Substring(i + 1, 0);
Az i+1-es indextől kezdve 0 db hosszú stringet ad vissza, magyarul üres stringet.string szam3 = s.Substring(i + 3, 0);
Szintén,csak más indexszel.Console.WriteLine("az átlag: ", eredmény);
-Ez itt nem csinál sokat, ugyanis nem adtad meg a formátumstringben, hogy írja is ki az eredményt >>
Console.WriteLine("az átlag: {0}", eredmény);
vagy Console.WriteLine("az átlag: "+ eredmény);Ékezetet meg ne írjunk már változónévbe, mégha engedi is a fejlesztői környezet.
Olvasnod kéne a dokumentációját azoknak a függvényeknek, amit használsz, és nagyobb figyelmet fordítani rá.
Console.WriteLine("Kérem adjon meg 3 számot 1-5 között, vesszővel elválasztva: ");
string s = Console.ReadLine();
char szam1 = s[0];
char szam2 = s[2];
char szam3 = s[4];
double a = Char.GetNumericValue(szam1);
double b = Char.GetNumericValue(szam2);
double c = Char.GetNumericValue(szam3);
int eredmeny = (int)(a + b + c) / 3;
//ha nem elég az egész osztás, használd ezt
//double eredmeny = (a + b + c) / 3;
Console.WriteLine("az átlag: {0}", eredmeny);
Console.ReadLine();--Convert.ToInt32
- ez a karakterkódját fogja visszaadni a karakternek, nem pedig a számot magát char típus esetében, stringnél a számot. (toStringelni is lehetett volna a szam1,2,3-at).Ha nem használhatsz Char.GetNumericValue-t, akkor használhatsz még int.Parse-t is, a Convert.ToInt32 mellett.
-
Lortech
addikt
Még egyszer elolvasva úgy tűnik, hogy azt írod, amit szemmel tapasztaltál, nem pedig ami ténylegesen a kódban történik, szóval az lehet inkább, hogy a controlodnak még nem voltl ideje frissülnie, mikor már meghívtad a blokkoló db queryt. A disablecontrols után hívhatnál a controlra egy Update-et, hogy igazold ezt. Ha megtörténik a GUI-n a változás, akkor ez a gond, és külön threadben kéne kezelni a gui-t és az adatbázis lekéréseket.
-
Lortech
addikt
a gombok es textbox-ok csak akkor lesznek hajlandoak elszurkulni, ha mar megvan a testConnecion metodus viszateresi erteke
Miből jött le, hogy már megvan adott pillanatban a testConnection visszatérési értéke, hogy lehet meg a visszatérési értéke, ha elvileg meg sem hívtad?
Ránézésre szerintem nem a bemásolt kódban keresendő a megoldás, hanem valami olyan kódról, amiről nem tudod, hogy hamarabb fut le, mint gondolnád, pl. static vagy konstruktorok, vagy el elfelejtett metódus hívás. testConnection-re mehetne egy method breakpoint és hívási fát meg kéne nézni. -
Lortech
addikt
válasz
Relisys #1079 üzenetére
Az objektumra referenciát tartó változó(k)nak null értéket adsz és rábízod a GC-re, de korrekt válaszhoz tudni kéne pontosan, hogy milyen objektumról van szó, mi a működése, hogy van megvalósítva, milyen erőforrásokat fog( managed, unmanaged) van-e IDispose megvalósítása) ..
-
Lortech
addikt
Ebben az esetben a fordító hogy a az abstract double Ado property nem származhat az Allat osztályból:
Feltételezem, azt akartad mondani, hogy a fordító azt mondja, hogy...
De nem ezt mondja, hanem azt, hogy a Tyuk osztályban meg kell adnod az Ado property implementációját, mivel az ősben abstract metódus.
Viszont a kód amit beszúrtál, nem erre utal, mert ahogy nézem ott van az implementáció, amire panaszkodik. Viszont a Baromfi.Hizlal metódusodban nem lesz jó ha suly változóra hivatkozol (így, kis kezdőbetűvel), mert az az ősének egy privát mezője, amit a Sertes osztályból nem tudsz elérni, viszont épp ezért van propertyd rá, a Suly. -
Lortech
addikt
válasz
acélkemény #1009 üzenetére
Nem System.Int32 osztályokra alias, hanem System.Int32 típusra, érték típusra. És azért érték típus mert nem osztályként van megvalósítva, nem gyermeke objectnek, nem kompatibilis vele. Érték típusokat a struct -tal lehet létrehozni.
Paraméterátadásra visszatérve: nem akartam tovább bonyolítani Lakersnek, de van még a ref kulcsszó is, ami referencia típusú paraméterátadást eredményez érték típus paraméteren is. Azaz kimenő paramétert is lehet alkalmazni .NET-ben. És itt megjegyezném, mielőtt valaki beleköt, hogy a referencia típusú atadás is érték típusú, a referencia típusú változók értéke egy referencia, ez a referencia viszont egy mögöttes tartalomra mutat, egy objektumra (vagy null).
-
Lortech
addikt
Igen, "valahol" benne van a memóriában, valahogy úgy lehet elképzelni, mintha lokális változóként deklaráltad volna a függvényen belül, és a legelső mozzanat a függvényen belül az, hogy értékül adod neki azt az értéket ami a paraméter.
tehát vmi ilyesmi:public static void Value()
{
int param = 42;
...
}Mindez automatikusan történik. Value lefutása után param felszabadul. Kezdeni ne akarj vele semmit.
Az, hogy példányszintű, azt jelenti, hogy az objektum egy példányához tartozik, kell hozzá példány, hogy elérd a mezőt, minden példánynak van egy-egy ilyen mezője, nem osztályszintű (statikus). -
Lortech
addikt
Ez itt valami példa lenne gondolom a referencia és az érték szerinti paraméterátadások ill. annak mellékhatásainak szemléltetésére.
Value metódus - érték szerinti-
Reference metódus - referencia szerinti paraméterátadás.Value metódusban a bemenő paraméter int típus, "érték típus", ha hivatkozol rá a változónévvel, akkor az értékre hivatkozol (nem referenciára).
Ha megváltoztatod a metóduson belül a "param" bemenő paramétert, nem változik meg a Value függvény hívása helyén megadott változó, mivel a metódus annak egy másolatát kapja meg valójában.(Value hívását nem másoltad be, de gondolom ott lehet a könyvben vmi ilyesmi példa is, hogy:
WrappedInt wi = new WrappedInt();
Console.WriteLine(wi.Number);
Pass.Value(wi.Number);
Console.WriteLine(wi.Number);)
A Reference metódus egy referencia típust vár bemenő paraméterként, a típus a WrappedInt. A példában a Reference metódus hívása helyén a WrappedInt osztály
"wi" nevű objektumpéldányát, ill. annak referenciáját adja át a metódusnak, tehát az eredetileg WrappedInt wi = new WrappedInt(); sorral példányosított objektumra képes hatni, ahogy teszi is az objektum "Number" mezőjének megváltoztatásával.Konkrétan a kérdésedre válaszolva:
1, mert a Reference fgv formális paraméterlistája a"WrappedInt param", tehát nem int típust vár a fgv, ha a Numbert adta volna át, azzal nem tudta volna szemléltetni a referencia szerinti paramátadást.
2, szóval param.Number = 42;
param a bemenő paraméter, típusa WrappedInt, ami egy osztály, referencia típus, tehát konkrétan param az ugyanaz az objektum, ill referenciája, mint amit a WrappedInt wi = new WrappedInt(); sorral példányosítottál.
A WrappedInt egyetlen mezője a Number, példányszintű és publikus, ezért hivatkozhatsz rá a példában megadott módon param.Number-ként. A mezőnek egyszerűen értéket adunk. -
Lortech
addikt
Ez itt kérem szépen szintén egy konstruktor, paraméternélküli..
Ennek önmagában sok értelme nincs, mert ha nincs más konstruktorod megadva, akkor ez automatikusan elérhető (feltéve h. lehet példányosítani az osztályból stb.).
Viszont ha már írsz akár egy konstruktort is, aminek van paramétere, akkor ezt az alap paraméter nélküli konstruktort ( Animal() ) már csak úgy tudod meghívni, hogyha explicite definiálod. -
Lortech
addikt
1. kérdés, itt hol van a konstruktor és mit csinál itt? Annyit tudok róla, hogy egy speiciális metódus ami példányosítás során jön létre... De jó lett volna egy magyarázat a kódban, hogy mit hol hogyan működik.
Így van, a konstruktor egy speciális metódus ami az objektum példányosításakor az obj. kezdőállapotát hivatott beállítani.
Ha nem adsz meg konstruktort, akkor implicit módon egy paramétert nélküli konstruktor jön létre.
A példában a konstruktor beállítja a két példány szintű változót a paraméterben kapott értékre.
Tehát a
Dog d=new Dog("Rex", 2);
sor után hivatkozhatsz d.name és d.age -re.2. kérdés: public Dog(string n, int a) lenne az objektum?
Nem, ez konkrétan a konstruktor. Az objektum az osztályod egy példánya.
kieg: vegyük észre, hogy nincs visszatérési típusa, ez is a konstruktor ismérve.3. kérdés a this. metódus itt mit csinál? Annyi magyarázat volt, hogy egy konstruktorból hívhatunk egy másikat...
A this kulcsszó (a Dog nevű osztály definíciójában vagyunk)
itt az objektumpéldány referenciájára mutat. Gyak. a példányt magát jelenti. Ezzel például más metódusnak adhatjuk át az aktuális példánynak vagy szokás azonos névvel ellátni a bemenő paraméterek nevét az osztály megfelelő mezőinek neveivel.
pl.using System;
class Dog
{
private string name;
private int age;public Dog(string name, int age)
{
this.name=name;
this.age=age;
}
}class Program
{
static public void Main()
{
Dog d=new Dog("Rex", 2);
}
}A példában name és age a bemenő paraméter, a this kulcsszóval azt mondod meg, hogy a this-en keresztül hivatkozott mezők az objektumpéldány példány szintű változói, nem pedig a bemenő paraméterek.
this()-szel hívhatsz másik konstruktort is egy konstruktorból, pl:
...
private String sex;
public Dog(string name, int age)
{
this(name,age,"ismeretlen");
}
}public Dog(string name, int age, String sex)
{
this.name=name;
this.age=age;
this.sex = sex;
}
}...
-
Lortech
addikt
Írni kell egy logikát rá, ami automatikusan azonosítja a fájl nevét az oldal forrásában. Meg kell vizsgálni, hogyan épül fel az oldal, és megtalálni azt a szabályszerűséget, ami alapján a fájl nevét egyérelműen azonosítani tudod.
pl. html elemek neve, id-ja, attribútumai alapján, elemek sorrendje alapján. Szinte mindig meg lehet oldani ezt, még erősen dinamikusan változó tartalom mellett is. -
Lortech
addikt
Akkor az oldal forrásából ki lehet szedni a háttérkép fájl elérését, aztán le kell tölteni (feltéve hogy a neve / elérése is változik). Ha bejelentkezés szükséges az oldal használatához, az kicsit nehezíti a dolgokat, de úgy is megoldható, csak szimulálnod kell a bejelentkezést, megtartani a sessiont stb.
Konkrétumok ismerete nélkül nagyjából ennyit tudok mondani.
Legegyszerűbb esetben a System.Net.WebClient osztály a barátod, bonyolultabb esetben a System.Net.HttpWebRequest osztály. -
Lortech
addikt
válasz
Syncmaster #865 üzenetére
System.IO.Directory.GetLogicalDrives(); metódussal megkapod a logikai meghajtók neveit, a kapott string tömböt végigiterálod és hozzáadod a comboboxhoz.
-
Lortech
addikt
Kiemelten tanították a fősuli keretében a .NET-et, és rengeteget programoztam .NET-ben a kötelezők mellett is, de konlkrétan a vizsgára saját felkészülés volt kizárólag. Megfelelő .NET-es alapokkal fel lehet tisztességesen készülni magadtól is. Könyvek jók a vizsgára, CD melléklet annyira nem érdekes, emlékeim szerint azok a kérdések vannak rajta, amik a fejezetek végén már egyébként is ott vannak, meg ezek a kérdések egyébként is lényegesen könnyebbek, egyszerűbbek a vizsgakérdéseknél.
-
Lortech
addikt
Előny minden papír pályakezdőknél, mert átlag végzett emberkék nem nagyon tudnak mit felmutatni a diplomájukon kívül, és ezzel esélyesebb megcsípni egy jobb helyet, előrébb kerülhetsz a sorban. Én java fejlesztőként dolgozom most, úgyhogy végül nem sok hasznát vettem magának a képesítésnek, de amíg felkészültem a vizsgára, sok újat tanultam, és jobban megmaradtak a dolgok.
-
Lortech
addikt
válasz
babyanigirl #852 üzenetére
Ez itt egy C kód, nem C#, tulajdonképpen miben is kéne írni?
-
Lortech
addikt
Létezik, főiskolákon egyetemeken.
El kell végezni egy programozói szakot.
Papír arra jó általában, hogy egyáltalán behívjanak interjúzni, de aztán egyből kiderül, hogy ér-e valamit a papírod.
MCTS vizsgák vannak programozás / .NET témakörében, pl. 070-536 a .NET 2.0 alapvizsga, aztán vannak modulok, pl. windows forms, web-, elosztott alkalmazások, amik az előzővel együtt MCTS képesítést adnak.
Ezen vizsgák elvégzése nem a programozói kvalitásodat vizsgálja, mert azt alapnak tekinti, nincsenek hagyományos programozással kapcsolatos kérdések, hanem az adott .NET frameworkos részekben szerzett tudásodat, tapasztalataidat vizsgálja.A hivatalos tananyagos könyv 900 oldal körül van egy-egy modulhoz, és sokminden nincs is benne, mert igen specifikus kérdések is lehetnek. Viszonylag nehezek egyébként, vágni kell a témát, és elég pontosan, nem csak kb.
-
Lortech
addikt
Tényleg nem a kötözködés, hanem a diskura miatt még megjegyzések:
A sort egy elég böszme nagy metódus, a háttérben olyan mennyiségű többletkóddal, hogy 3 elemnél meg ezért totál értelmetlen használni, főleg ha nem is rendezésre van szükség. Mire eljut a tömb rendezéséig, addigra elemi eszközökkel, kb. 5 sornyi kóddal már ki is irattam a megoldást.
A foreach meg rendkívül jó dolog, de a konkrét esetben kétségeim vannak, hogy egyáltalán tudja-e, mi az a tömb, gyűjtemény stb. Valamiért 3 elemről szólt a feladat.
Valamint úgy gondolom, hogy foreach használatának nincs sok értelme anélkül, hogy pontosan ismeri a működését, és egy sima int tömb bejárásánál a konkrét esetben nem is lényeges az előnye a forhoz képest (kódmennyiség, hatékonyság, átláthatóság).
DE: eredetileg nem ezért mondtam, hogy túlzás a for, hanem mert kényelmes ugyan a használata, de nem egyszerűbb, több tudást feltételez, nem véletlenül tanítják később, és erős a gyanúm, hogy fogalma sincs róla. -
Lortech
addikt
Célszerű megtanulni kódból megcsinálni a form felületet, ha egy picit is bonyolultabb működésre van szükség.
Létrehozod a controlt, felparaméterezed (pozíció, méret stb), hozzáadod a megfelelő konténerhez. (form, panel, groupbox...), majd eltávolítod őket.Pl.
TextBox tb = new TextBox();
//param
this.Controls.Add(tb); // ha a this a formod
Hozzáadja a formhoz szövegdobozt.this.Controls.Remove(tb)
Eltávolítja a szövegdobozt a formból.
megj: A tb objektum ettől még nem feltétlenül szűnik meg, attól függ, hogy hoztuk létre.Érdemes tanulmányozni a formhoz tartozó designer.cs fájlt, hogy megértsd a működését. Onnantól kezdve már könnyű a dolog, sokféleképpen megoldható a feladat.
A konténereknek vannak jó tulajdonságaik, amikkel a hozzá tartozó controlokat csoportosan lehet vezérelni, pl. elég eltávolítani a panelt ahhoz, hogy a hozzá tartozó controlok mindegyike megsemmisüljön (ha nincs rá máshonna referencia), vagy ott a Visible tulajdonság, amivel el lehet tüntetni egyszerre őket, vagy az Enable tulajdonság, amivel inaktívvá tehetők.
Bizonyos esetekben célszerű lehet újrahasznosítani a controljaidat, amennyiben lehetséges és nem bonyolítja el a programot.
Pl. van egy textboxod, aminél megadsz felhasználónevet, hogy azonosítsa a felhasználót. Mikor ez megvolt, el akarod tüntetni ezt, és egy másik textboxot akarsz kirakni hogy bevigyen egy másik inputot a felhasználó. Ehhez felhasználhatod az előző textboxot, ahelyett, hogy megsemmisítenéd az objektumpéldányt, és létrehoznál egy újat. Csak át kell praméterezni, pl. pozíció, méret, egyéb paraméterek (text), eseménykezelők. -
Lortech
addikt
válasz
csadrienn #752 üzenetére
Ez a feladat komoly amúgy? "Tervezzünk... " - Jóhogy UML diagramokat nem kell hozzá csinálni.
Na inkább nem mondok semmit.Már megírtam, de kitöröltem végül.
Nincs kivétel, nem támogatom, hogy házi feladatokkal járjanak ide az emberek megoldást várva, és nulla tudással menjenek át a tárgyból.
Rettentően egyszerű a feladat, ha ez sem megy...
Ha bármi kérdésed van, ami nem a feladat teljes megoldására irányul, akkor eskü segíteni fogok.
Ugyanezt mondom Zsuzsi20-nak is. -
Lortech
addikt
Na most ez nyílván nem használt adatbázist, mert nem volt feltelpítve semmi még csak hasonló sem.
Ez hibás megállapítás, mert vannak olyan mini adatbázismotorok, amelyek kifejezetten arra vannak kitalálva, hogy egy alkalmazásba bele lehessen őket integrálni, hogy az alkalmazás számára adatbázis-kezelő funkcionalitásokat nyújtsanak. Nem kell külön telepíteni, nincs dedikált adatbázis szerver, az alkalmazás gondoskodik az adminisztrációjáról.
Másik lehetőség a közvetlenül fájlba írás. Manapság divatos XML-ben adatokat tárolni, mert jó tulajdonságai vannak, de lehetséges "bináris", vagy bármilyen egyedi tárolás is természetesen, attól függ, mi a cél.
A képek pedig így is úgyis ugyanakkorák, akár adatbázisban, akár fájlban tárolod őket (az adminisztrációs többlethelyfoglalástól eltekintve). -
Lortech
addikt
válasz
Speeedfire #742 üzenetére
Onnan indultunk, hogy "c# fájlokat akarsz futtatni".
Visual studioban is le lehet fordítani c forrást, ja. Legegyszerűbb, ha megnyitsz egy megfelelő projekt típust, és átmásolod a kódot, de ha nem vagy képben visual studioval, akkor azért meg kell küzdeni vele általában, hogy olyan állapotba hozd a projektet, hogy fusson. Főleg ha TC stílusban lett írva a program.
Talán még egyszerűbb lenne devc++-ban. -
Lortech
addikt
válasz
Speeedfire #740 üzenetére
Igen, itt egy c fájl, és? Mi köze ennek a c#-hoz?
-
Lortech
addikt
válasz
Speeedfire #738 üzenetére
A fordítás funkcióval.
Ha leírnád, hogy mik az adottságok és mi a célod, talán jutnánk valamire, de így nehéz lesz ám. -
Lortech
addikt
válasz
Speeedfire #736 üzenetére
C# fájlokat lefuttatni sehogy. Lefordítani lehet, aztán a lefordított binárist futtatni.
-
Lortech
addikt
-
Lortech
addikt
válasz
Syncmaster #707 üzenetére
Gyak. akkor már megcsinálom helyetted, bocs, de ez ellenkezik az elveimmel.
#710: Kérdezni azért lehet, ha nem megy, de kódot hadd ne írkáljak.
-
Lortech
addikt
válasz
Syncmaster #704 üzenetére
Filesystemwatcher nem erre való. Mint a neve is mutatja, fájlrendszerekhez van köze, konkrétan a fs eseményeit lehet vele monitorozni.
Szavakra úgy tudsz keresni, hogy végigolvasod a fájl tartalmát. Egyik megközelítés, hogy egy stringbe beolvasod az egész szöveget, és ráengeded a stringre a string.IndexOf-ot, vagy reguláris kifejezéseket. De ehhez elég kicsinek kell lenni a fájlnak, mert nyilván egy 100mb-os fájlt nem lenne célszerű beolvasni egy stringbe.
Ha nagy fájlokról van szó, akkor egy Filestreammel olvashatod a fájlt. Csinálsz egy buffert, ami néhányszorosa a keresendő szövegnek, és mindig ebbe olvasol. Kiolvasol buffernyit, megnézed, hogy benne van-e a keresett szöveg, majd a következő kiolvasás előtt visszaseekelsz annyit, amennyi a keresett szöveg hossza, és abban keresed a szöveget. Azért, hogy nehogy két olvasás határa vágja ketté a keresett szót és így ne találd meg.Fájlok listájára van Directory.GetFiles.
-
Lortech
addikt
Dehogyis zavar.
Csak látszik, hogy hiányoznak alapok. Egy Windows Forms alkalmazást látszólag könnyű összedobni, mert csak feldobálsz egy - két controlt, rányomsz, valami eseménykezelőt összegányolsz, azt csinál valamit, és ez sikerélményt ad.
Valójában viszont egy Windows Forms vagy WPF alkalmazás eléggé összetett, sok olyan elemet használ, ami nem kimondottan kezdőknek való, egy csomó tudást feltételet. Nem árt előtte velük tisztában lenni. Pl. OOP, osztályok, típusok, metódusok eventek, delegáltak, láthatóság, élettartam stb, ezek a nagyon alap dolgok, amiket jóesetben is hónapokba telik normálisan elsajátítani. Ahhoz tudnám hasonlítani, mintha beülnél egy ferrariba úgy, hogy előtte még biciklin sem ültél.
Az, hogy kézzel bekötsz egy eseménykezelőt, az nem gányolás. Inkább még a designeres létrehozást nevezném annak, de egyiksem az.
Kódba túrkálás??!Programozó akarsz lenni vagy mifene, nem kattintgató kisiparos. Én is használom a Visual studio sok kényelmi szolgáltatását, de azért ha elémraknak egy csc-t egy notepadet, meg egy az msdnt, akkor se vagyok meglőve. Az a véleményem, hogy először kell megtanulni designer nélkül létezni, és ha már megy nélküle is, akkor lehet használni. Aztán lehet, hogy akkor meg már hatékonyabban fog menni kézzel a móka.
Nem tudom, még... elmondod?
Dehogy mondom. Elmondhatnám 5 mondatban, de azzal nem mennél semmire, max azok értenék akik már amúgyis tudják. Kisregénybe meg nem kezdenék. Vannak jó könyvek ahol sok-sok oldalt szentelnek ezeknek, példakódokkal. -
Lortech
addikt
Az lehet, hogy tudod mi a szó, de technikailag is tudod, hogy mit jelent .NET-ben egy event? Tudod mi az a callback, delegate, multicast delegate, leiratkozás, feliratkozás, tudod, hogy hogy vannak ezek megvalósítva, hogy működnek?
nem gondoltam volna, hogy csak ilyen XAML gányolással lehet elővarázsolni... kicsit fapadosnak tűnik nekem.
Mi a gányolás ebben?! Semmi. Meg "elővarázsolni"? Nincs ebben semmi varázslat, ha ugyanolyan támogatás lenne eventekre mint a windows forms esetén, akkor is ugyanezt a kódot generálná, mint amit így kb. kemény két billentyűleütéssel hozzáadsz. -
Lortech
addikt
válasz
atm*RefeeZ #695 üzenetére
Eleve mondjuk nem windows forms, wpf alkalmazásokkal kéne kezdeni, meg event handlereket gyártani, mikor vsz. fogalmatok sincs mi is az az event, meg delegate, mi miért van úgy, ahogy, csak kliketi klikk aztán lesz valami belőle. Ez nem programozás, hanem ilyen random gányolás.
Nem fika (max az oktatóitok felé) akarna lenni, de tényleg csak szilárd alapokkal engednék valakit windows forms projekt közelébe.Nincs semmi trükk, ha beraksz valamit a form_closingba, akkor az le fog futni ha bezárod a formot (akár csillaggal, akár tálcán). Nyilván máshogy kell megoldani, de ehhez látni kéne, hogy mit akarsz csinálni, és milyen kóddal.
-
Lortech
addikt
válasz
atm*RefeeZ #693 üzenetére
Kusztomizálni (
) a controlokat a propertyjein keresztül tudod. Színek, háttér stb. Nyilván photoshopban rajzolgatott controlt nem fogja neked a visual studio megenni. Rajzolsz egy felületet és megadod háttérnek..
két újabb dolog érdekelne. az egyik, hogy meg lehet-e csinálni, hogy close()-nál ne fusson le ez a formclosing (gondolom nem lehet de hátha van valami beállítás ami figyeli,hogy csak x gombra kattintva jöjjön elő, amúgy meg megcsinálom máshogy,csak hátha van egyszerűbb módja mint amit én csinálnék)?
Már a kérdésből látszik, hogy valamit nem jól csinálsz, vagy valamivel nem vagy tisztában, mert ezeket megfelelő átgondolással ki lehet kerülni.
-
Lortech
addikt
Windows Formsról volt szó..
WPF-nél az elem létrehozásánál az intellisense felsorolja az eseményeket is, villám ikonnal, és ha ráböksz akkor egyből fel is ajánlja, hogy create new event handler, a xaml mögötti c# kódban létre is jön a kezelő.
Pl írod, hogy <Button szőköz és itt dobja fel az intellisense a listát. -
Lortech
addikt
válasz
atm*RefeeZ #686 üzenetére
Menj a form designerre, jobb oldalt ott van a property window. Klikkelj a form címsorára a designeren. Ekkor prop. window-ban a form tulajdonságai lesznek. Ott kattints a villám ikonra. Megjelennek a form eseményei, kiválasztod a FormClosing-ot és dupla klikk rá. Ekkor létrehozza neked az eseménykezelő metódus vázát, és rá is köti az eseményre a designer.cs-ben.
-
Lortech
addikt
Na várjál.
Azt hiszem, ez szokott lenni a tankönyvi példa:
enum Het {hetfo, kedd, szerda, csutortok, pentek, szombat, vasarnap}Ekkor lesz egy Het nevű típusod. Ebből csinálhatsz változót, ami a Het.hetfo, kedd ... stb értékeket veheti fel. Ezzel azt csinálhatsz, amit akarsz, átadhatod paraméterként, összehasonlíthatod más Het típusú értékekkel, lekérheted a sorszámát az értéknek stb. Mondjuk átadhatod egy függvénynek, hogy milyen nap van ma, és az az értéktől függően csinál majd valamit. Átadhatnád számokként (0..6), vagy stringként is, de ez azért jó a számhoz képest, hogy az érték egyben a szöveges neve, ergó nem kell utánanézni, hogy melyik sorszám milyen szemantikával rendelkezik, illetve sztringhez képest azért jó, mert nem tudod elgépelni, illetve ha mégis, az fordítási idejű, szintaktikai hiba, nem szemantikai.
Kerestem egy példát.
[link]Igazából meg lehet lenni nélkül, de néha adja magát.
-
Lortech
addikt
Nevesített jelzőértéknek szoktam használni. Mondjuk van egy függvény, ami kétféleképpen működik, és átadsz paraméterként egy enum értéket, ami jelzi, hogy épp melyik kell.
enum algoritmus {buborek, quick, shell}
class {
void rendez(int[] tomb, algoritmus alg)
{
if (alg == algoritmus.buborek)
{...}
else if (alg== algoritmus.quick) {...}
...
}
...
rendez(szamok, algoritmus.quick);Megcsinálhatnád, hogy átadsz egy int-et (valójában az enum is castolható intté, 0-tól vannak sorszámozva a címkék, de szabályozhatod is a típusdefinícióban) , de akkor meg fejben kell tartani hívás helyén is meg a fogadó oldalon is..
Vagy persze lehet külön függvényeket is gyártani minderre, az a legtisztább, de a lényegét meg lehet érteni a példából. -
Lortech
addikt
válasz
atm*RefeeZ #669 üzenetére
SaveFileDialog svfd = new SaveFileDialog();
if (svfd.ShowDialog() == DialogResult.OK)
{}
Showdialog megnyitja a mentés párbeszédablakot, az if-hez tartozó utasításblokkra akkor esik a vezérlés, ha a user okézta az ablakot. Az if-en belül a svfd.Filename néven érheted el a dialógusban kiválasztott fájl nevét.
Az svfd.OpenFile() visszaad egy streamet, amibe tudsz írkálni az if-en belül.
A DialogResult-ból nem kell változó, ez egy enumeráció, így jó, ahogy írtam. -
Lortech
addikt
válasz
atm*RefeeZ #660 üzenetére
A kérdés inkább az, miért szeretnéd tudni előre a fájl sorainak számát. Ha te állítod elő a fájlt, akkor egyszerűen beleírhatod egy meghatározott sorba, pl az elsőbe.
Több formot úgy tudsz egyidejűleg megjeleníteni, hogy példányosítasz egy form típusból és hívod a show vagy showdialog metódusát. -
Lortech
addikt
Bármit megírsz C#-ban, azt a gyakorlatban .NET platformra írod (vagy épp monora, mindegy). A könyvben amikor le van írva egy példaprogram, az a .NET futtatórendszerre fog lefordulni a .NET keretrendszer felhasználásával. Mint mondtam, C# és a .NET gyakorlatilag elválaszthatatlanok, mert C#-ban .NET-es alkalmazásokat készítesz. (csűröm csavarom már háromféleképpen)
Az a könyv nem csak a C#-ról mint nyelvről szól, mert a nyelvi elemeken túl biztos, hogy ad egy képet a .NET platform alaposztályairól is. Nyilván ettől nem leszel .NET guru, de maga a nyelv elsajátítása is szükséges, nem beszélve a Visual studioról.
Nevem alatt találsz egy cikksorozatot - jutott ameddig jutott -, talán tud adni egy kezdőlöketet. -
Lortech
addikt
A .NET a technológia és a keretrendszer. C# egy programozási nyelv, amely gyakorlatilag egybeforrt a .NET-tel, mivel önmagában nincs sok értelme. A .NET technológiát felhasználva programozunk C#-ban. A Visual Studio pedig egy fejlesztői környezet, amely támogatja a .NET-es és natív alkalmazások fejlesztését, előbbit például C# nyelven.
Szándékosan nem a kérdéseidre próbáltam válaszolni egyenként, mert néhol értelmetlen, értelmezhetetlen volt számomra.
C# + .NET párossal könnyű, illetve inkább azt mondanám, hogy kényelmes GUI-t fejleszteni, ahogy az adatbázishátteret is kényelmes megírni, mert jó támogatás van hozzá a keretrendszerben.
Hozzáértőnek semmi sem bonyolult, egy Oracle adatbázis behúzása, adatbázis séma osztályok legenerálása jóesetben pár perc, de úgy, hogy nem ismered egyáltalán azt, amiben fejleszteni akarsz.. hát mindenesetre érdekes lesz. -
Lortech
addikt
A richtextbox lines get propertyvel csak egy másolatot kapsz az eredeti tömbelemről. Így azt változtatva nem módosítja a szövegdoboz belső állapotát.
Az egész tömböt viszont felül tudod írni a már módosított tömbbel, pl:
string[] sorok = richTextBox1.Lines;
//n. sort átírod szovegre.
sorok[n] = szoveg;
richTextBox1.Lines = sorok; -
Lortech
addikt
Persze, hogy a fájl elejétől fog olvasni, ha egyszer a cikluson belül nem használod fel az olvasáshoz a ciklus változót, meg semmi paramétert, hanem egyszerűen csak kiolvasol belőle. Igazából nem is értem, hogy gondoltad.
Sok megközeleítés lehetséges, pl
string s = File.ReadAllText(pathInfo);
Aztán a string Split metódusával egy string tömbre vágod \r\n vagy \n sorvégek mentén, és már tudsz hivatkozni a megfelelő sorra a tömbben. (ez akkor lehet megoldás, ha kis fájlról van szó)Vagy csinálsz két ciklust, az elsőben olvasol ReadLine-nal annyiszor, amennyivel eljutsz a kívánt sorpozícióba (közben a beolvasott sorokat eldobod) , a másikkal meg ténylegesen beolvasod a kívánt sorokat.
Vagy egy db ciklusban számolod, hány sort olvastál már be, és ha elérted a keresett sort, akkor fűzöd csak a richtextboxhoz az azutániakat.
stb.
-
Lortech
addikt
Arra gondolsz, hogy kivételnél oda tudsz ugrani a .NET-es osztály forrás nézetére és deguggolni ?
Ez tényleg komoly dolog, és sokaknak segítségére lehet.
De azért van még jópár fontosabb új feature:
WPF support, XAML designer, LINQ, C# 3.0, .NET 3.5, JS intellisense és debug, SQL Server 2008 támogatás, AJAX, css újítások és még sok más. -
Lortech
addikt
válasz
lakisoft #588 üzenetére
De tudod is, hogy miről beszélsz vagy olvastál valahol valamit és leírtad? Tényleg kérdezem, nem izélés.
Az első mondatnak van értelme.
Van egy win32 dll-ed, akkor csinálhatsz egy .NET class libraryt (.net dll osztály), ami elvégzi a win32 dll-ből a szükséges függvények importálását, és innentől kezdve csak ezt a .net dll-t kell referenciaként hozzáadni.Ha saját magad írod a win32 dll-t, nem egy meglévőt használsz fel, akkor lehet szükség lib és include fájlokra, meg esetleg az sdk-ra, de ez nem tudom hogy jött ide.
-
Lortech
addikt
válasz
lakisoft #585 üzenetére
Pl ahogy az előző hozzászólásban írta Gregorius.
//Ha win32 dll-ről van szó.
Vagy ha .net dll class libraryről van szó, akkor berakod a dll-t a referenciák közé, majd a dll namespace-ét beteszed a unsinggal, és látod a függvényt a típuson keresztül, vgay using nélkül namespace / típus v. példány/ függvénnyel hivatkozol rá. -
Lortech
addikt
válasz
lakisoft #580 üzenetére
Nem az, az egy kifejezés, és azért mondja ezt, mert "="-t írtál, így azt hiszi hogy értékadásra gondoltál.
== az egyenlőségvizsgálat operaátora, nem =.szerk: Egyébként igen fura egy kód.
Annak aConvert.ToBoolean-nek mi értelme? Az (i % 2) == 0) önmagában egy logikai literál.
-
Lortech
addikt
válasz
lakisoft #577 üzenetére
A Convert.ToInt32 így néz ki:
public static int ToInt32(string value)
{
if (value == null)
{
return 0;
}
return int.Parse(value, CultureInfo.CurrentCulture);
}Tehát ugyanazt csinálja, mint az int.Parse, de előtte ellenőrzi, hogy az átalakítandó string null-e. Ha igen, akkor nullát ad vissza. Az int.Parse ugyanerre az inputra kivételt dob.
-
Lortech
addikt
Mi a cél? Én azt írtam le, hogy kapcsolod ki a JIT debuggert. De ettől még a hiba ott lesz, és valami kivétel keletkezik, amit valahogy le kell reagálni. Ha nincs debugger, akkor vsz. kilép.
A HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger stringet el kéne távolítani.
Ha a hagyományos dr. Watsonos hibakezelőt akarod visszaállítani, akkor azt a drwtsn32 -I parancssal tudod megtenni. -
Lortech
addikt
Tudtommal subitemhez nem tudsz képet rakni. Viszont ha a listview ownerdraw propertyjét false-ra állítod, akkor saját draw eljárással meg lehet csinálni szerintem.
Na meggugliztam, úgy látom mások is belefutottak már ebbe: [link] és
[link]
Az első linken kód is van a szükséges metódusokkal (példa szinten persze), ebből a drawsubitem a lényeg, a második linken meg találtam egy ilnket ide: [link]
Ez a listview kibővítése, csak fel kell használni a kontrollt, de az első megoldás is csak két perc.
[Szerkesztve] -
Lortech
addikt
Akkor olvasd el még egyszer, pont azt mondtam, hogy maszkkal működött nálam, egyből (maszkkal teszteltem elsőre is, mivel maskedtextboxot én sem maszk nélkül szoktam használni
). Maszk nélkül meg nem, de mivel maszk nélkül nem teszteltem, amíg nem írtad az #531-et, ezért nem vettem észre, hogy úgy meg nem működik.
Igen, tákolás, mivel egy hiba következtében kell ehhez folyamodni. Nem úgy értve tákolás, hogy nem jó megoldás, hanem úgy, hogy van egy hiba, ami miatt nem működik a Select eljárás úgy, ahogy azt elvárnánk, és emiatt ''tákolni'' kell. Teljesen mindegy, hogy Mark Rideout írta vagy sem.. Nem a megoldás fikázása volt egyáltalán.
Én nem írtam, hogy szálak közötti függvényhívás, mert ez eleve értelmezhetetlen... De szálak közötti kommunikációra szokás általában használni, amikor szükséges az invocation. Ahhoz, hogy egy control a saját állapotát megváltoztassa, ahhoz nem kell invocationnel hívni a metódusait, ha megfelelően van megírva a control, és a metódusai úgy viselkednek ahogyan azt elvárjuk tőlük. Ezért akadt fel a szemem az invoke hallatán. Éééérteeed??
[Szerkesztve] -
Lortech
addikt
-
Lortech
addikt
És ez miért nem jó? Simán beírod a control eseménykezelőjébe, hogy maskedTextBox1.Select(0, 0);
b14: értem, de miért kéne külön threadből figyelni, amikor ez a funkció tipikusan a controlhoz tartozik, ott kell megvalósítani. Szerintem semmi nem indokolja, de kiváncsi vagyok rá, hogy orbano mire gondolt. -
Lortech
addikt
Azért hogy aztán vissza kelljen alakítani.
_seth_:
N int típusú, TextLength is, mivel egy szám / érték, ezért ToStringezni nem kell.
Propertyket (TextLength) felesleges eltárolni külön ilyen esetben, csak egyszer hívod.. Írd be nyugodtan a forba. De ha nagyon biztos programot akarsz írni, akkor az egész textBox1 stringet tárold el egy segédváltozóban, és annak írd be a ciklusba a hosszát.
str = char.Parse(...) ??? Mit akarsz ezen parsolni? Eleve a típus.parse típust ad vissza, itt char-t (egy darabot!), tehát ha minden áron le akarod parsolni charra, akkor kéne egy ciklus, ahol végigmész a string indexein egyenként, figyelve arra, hogy ne ilyen nulla hosszúságú a string, mert akkor kivétel.. De nem tudom elképzelni, hogy mi értelme van ennek.
A db változót nem árt nullázni, mert a második számolásnál már nem fog helyes értéket adni, mert az előző eredménye benne van, és azt növeled.
Ez a ciklus.. Minek mész végig 0..N, ha fel sem használod az indexet, és minden iterációnál ugyanazt csinálod?
Az i változót ne így deklaráld, mert könnyen hibákhoz és félreértésekhez vezethet.. Egy segédváltozó ritkán jó, ha az osztály mezője, tartozzanak az adott scopehoz, ott legyenek deklarálva.
pl itt: for (int i=0;...) {} Ez vonatkozik az str-re, N-re is, és vsz a db-re, mert csak egy ellenőrzésre kell vagy tájékoztatásra kell, nem az osztályhoz tartozik szorosan, és nem kell megőrizni sem. Ez nem pascal.
Ha csak a kisbetűs magánhangzókat akarod beleírni a switchbe, akkor célszerű a stringet ToLower-rel csupa kisbetűssé alakítani, hogy nagybetűs magánhangzókra is menjen, pl: string str = textBox1.Text.ToLower();
A ''számol'' gombra kattintás eseménykezelője kb így nézne ki sztem, ha a te kódodból indulok ki:
private void button1_Click(object sender, EventArgs e)
{
db = 0;
string str = textBox1.Text.ToLower();
for (int j = 0; j < str.Length; j++)
{
switch (str[j])
{
case 'a': db++; break;
case 'e': db++; break;
case 'i': db++; break;
case 'o': db++; break;
case 'u': db++; break;
}
}
MessageBox.Show(db.ToString());
} -
Lortech
addikt
HScrollBarnak (és VScrollBarnak) van egy Value propertyje, tehát:
pl.
int a = vScrollBar1.Value; // ahol vScrollBar1 a VScrollBar példányod neve.
Ha mindig az aktuális értéket szeretnéd tárolni a-ban, akkor a VScrollBar ValueChanged eseménykezelőjébe kell beírni a fenti sort.
Új hozzászólás Aktív témák
Hirdetés
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Milyen légkondit a lakásba?
- Luck Dragon: Asszociációs játék. :)
- Nem tetszik a Procon-SP-nek, hogy a Nintendo távolról kivégezheti a Switch 2-t
- 200 megapixeles zoomkamerát sem kap az S26 Ultra?
- Milyen TV-t vegyek?
- 3D nyomtatás
- Elden Ring
- Formula-1
- NVIDIA GeForce RTX 5080 / 5090 (GB203 / 202)
- Filmvilág
- További aktív témák...
- SZÉP Lenovo ThinkPad P15 G2 Tervező Laptop -75% 15,6" i9-11950H 64/2TB RTX A4000 8GB UHD OLED
- Szép! Lenovo Thinkpad T14s G2 Üzleti "Golyóálló" Laptop 14" -50% i7-1185G7 4Mag 16GB/512GB FHD IPS
- Eladó Apple MacBook Pro 13" A1706 (Late 2017, Silver - EMC 3163)
- Amazfit GTR 2 Classic okosóra dobozában töltőkábellel
- Mac mini M1 chip 8 magos CPU-val, 8 magos GPU-val
- 118 - Lenovo Legion Pro 5 (16ARX8) - AMD Ryzen 9 7945HX, RTX 4070 (ELKELT)
- Gombászkönyvek egyben
- Telefon felvásárlás!! Xiaomi Redmi Note 10, Xiaomi Redmi Note 10s, Xiaomi Redmi Note 10 Pro
- Samsung Galaxy S22 Ultra 128GB, Kártyafüggetlen, 1 Év Garanciával
- HPE Apollo 4200 Gen9 2U rack szerver, 1x E5-2620v4, 64GB RAM, 24x3.5" 2U-ban! ÁFA-s számla, garancia
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: CAMERA-PRO Hungary Kft
Város: Budapest