tömbként akarom példányosítani a saját classomat, a következő módon: Test[] cp = new Test[10]; (A Test kész van). A problémám az hogy a Test konstruktora vár egy bemenő paramétert, és azt nem tudom hogy hol adhatnám meg. (mert ugye a tömbelemszám helyére kéne tenni alapból.) A következő megoldás meg elég baromság: Test[] cp = new Test[10](5); A segítséget előre is köszi
34 éves gépészmérnök vagyok és arra az elhatározásra jutottam hogy átképzem magam C++ programozónak ill másod szakmát szerzek.....
Műszaki programozásban van tapasztalatom (egyszerűbb program nyelveken Pascal, VBasic), viszonylag összetett progrmokat is írtam már komolyabb matematikai háttérrel.
Kérdésem az lenne hogy mennyi ideig tartana egy versenyképes, eladható tudás megszerzése?
Hol vannak az országban olyan iskolák ahol célirányosan erre képeznek és a papírjukat is elismerik?
Mivel érdemes kezdeni és folytatni? szóval jöhet minden ami létezik! :)
Hát manuálisan kell tabváltáskor a kép kontrollokat eltávolitani a régi tabról, és hozzá adni az aktuálishoz, a láthatóhoz. Ha jól értettem, hogy mit szeretnél.
Tehát a program elrendezése tabokkal tagolt, ezen belül splitt konténer, jobb oldalon nagy kép (pictureBox), bal oldalon bélyegkép, és alatta a beállítások.
A tabokat szeretném valahogy kiváltani, vagy úgy megoldani hogy egyetlen pictureBox-ot kezeljen. Tehát ne legyen 10-15 tabonként 2 kép doboz.
1; azt értem, hogy ahol kell oda egy picture box kell, csak a hivatkozása nem tiszta. (de ezek szerint benn marad a memóriában, csak ki kell okoskodnom.
2; A többinél működik amit írtál, csak a menünél nincs ilyen. Vagy futásidőben kell másolni (klónozni?) hogy meg lehessen változtatni a text tulajdonságát?
1, minden tabra kell tenned egy pictureboxot, amelyiken meg akarod jeleniteni.
2, A form Localizable propertyjét kell true-ra állítani a designerben, majd ki kell választani az aktuális nyelvet. pl. Ha Hu-hu-ra állítod, akkor a magyar nyelven írhatod a feliratot.
Szóval egyrészt köszönöm szépen; mindenképpen ki fogom próbálni
Egy újabb kérdés:
g1 - egy group, amiben textbox-ok, label-ek vannak
GroupBox1 szintén egy gorup, amiben szintén textbox-ok vannak
Azt szeretném elérni, hogy amikor g1 group-on megnyoom az egér jobb gombját, a groupbox1 bal felső sarka ott jelenjen meg, ahol a kurzor éppen áll
Erre a következő utasítással kísérleteztem:
groupBox1.Location= new Point(mousePosition.X, mousePosition.Y);
Nem működik; úgy tűnik, ha én egy "group"-on nyomom meg az egeret, a Location változtatása valahogy a group-hoz alkalmazkodik (annak pozíciójához?) és nem a tényleges kurzorpozícióhoz
Egyfajta ellenőrzésképpen beleraktam a következő sort a "mosusedown" eseménybe:
Én még abban élek, ha valamit meg kell csinálni, akkor azt magamnak kell megcsinálni elemi részekből; lassan szokom az objektumorientált ingyombingyomot, na!...:))
Hát én egyébként ahogy előállítok egy (alul a képen látható) objektumot, elmentem a pozícióját (ezt minden átmozgatásnál át is írom), a színét (ha változtatom, azt ís módosítom), a "tárolt" elemeit, a hozzá tartozó feliratokat, stb. - objektumtípustól függően egy-egy listában, Így van marék listám. Tárolom külön, hogy melyik objektumtípusból mennyi is van, így aztán amikor elmentem a képernyőt, akkor összeállítok egy olyan stream-et, ami a képernyő (form) x-y méretével kezdődik, aztán azzal, melyik objektumból hány darab van, aztán egyszerűen jönnek sorban a létező listák elemei, majd ezt a karakterfolyamot elmentem egy .TXT fájlba. Hogy megkülönböztessem az adatokat, minden egyes adat után egy "*" karakter van
Amikor visszaolvasom, sorban ahogy jönnek egymás után a csillagtól csillagig tartó sztringek, azokból felépítem újra az objektumokat - és így az egész képernyőt.
Kicsit munkás volt (nekem) összeállítani ezt a fajta mentést, de működik a dolog...:))
(Csak elvetélt dolog volt "*" karaktert használni "adatelválasztónak", ugyanis ha egy feliratban épp "*" lenne, akkor összeomlik az egész konstrukció....:)))
Na mindegy, tanulok tovább....keresek új csontot, amit rághatok....akad a környezetemben épp elég megoldani való probléma...:))
Control-tree serialization. Közvetlen támogatás nincs, de nem nagy kaland implementálni. Formátumok tipikusan XML, JSON, esetleg saját, struktúrált adattárolást támogató formátumok, igény szerint. Megvalósítható a .NET bináris tipus-serializációs infrastruktúrája segítségével is.
A jelenlegi implementációd hogyan tárolja a fa struktúrát?
Bár már a kérdéseimből is látszott eddig is rögtön, hogy dilettáns vagyok, azért megpróbálom értelmesen megfogalmazni mire vagyok most kíváncsi...:))
Az alábbiakban ismertettem az önként bevállalt szívásomat (nekem szívás és egyben sikerélmény - de ez mindegy)
Szóval dinamikusan előállítok mindenféle objektumokat a képernyőn - ezek jószerivel textbox-ok, label-ek - group-okba rendezve; a számuk előre nem meghatározott. Ezeket ide-oda húzogatom, majd ez előáállt képernyőállapotot elmentem, méghozzá a következőképpen:
Tárolom az összes előállított objektum összes lényeges adatát listafájlokban, ezekből mentéskor képezek egy streamet és azt elmentem szövegfájlként. Amikor visszaolvasom - mivel ismert a beolvasott stream szerkezete (naná, én csináltam..:)), sorban előállítom belőle az objektumokat és előáll az elmentett állapot. Működik, semmi baj vele; meg vagyok elégedve magammal, hogy megcsináltam. De!!!
Valaki azt mondta, nem létezik, hogy erre (mármint a mentésre) nincsen kész megoldás; anélkül, hogy igazán értene hozzá, azt mondta, biztos valahol a .NET eleve tárolja az előállított objektumaimat és egyszerűbb (és persze szabványosabb) lenne lementenem valami eleve kész objektum-mentő akármicsodával???
Tényleg nem valószínű..
Szóval - tanulási célzattal (..:)) - az érdekelne, létezik-e olyan algoritmus, ami alkalmas arra, hogy elmentse a programfutás közben előállított objektumaimat anélkül, hogy nekem kellene kitalálnom egy kötött formátumú karaktarsorozatot.
Szóval: merre induljak el ezzel a problémával?
(Még egyszer: nem házifeladat, megoldottam és tényleg működik az, amit elő akartam állítani (meg tudom mutatni a kutyaütő alkalmazásom programkódját - ha valaki egyáltalán kíváncsi lenne rá), puszta kíváncsiságról van szó tehát, arról, miképpen, merre kell elindulni, ha feltételezem, hogy mások ezt a problémát megoldották)
Előre is köszönöm ha valaki veszi a fáradságot és válaszol..:))
(Hozzáértő, kicsit idegesebb versenyzők nyugodtan kezdjék azzal, hogy "seggfej vagy barátom", de utána mondjanak érdemi választ; hosszú kioktatásra, tanácsra, miszerint csekkeljek be a puszta kíváncsiság okán egy 100 kilós tanfolyamra, vegyek szakirodalmat, mielőtt ilyesminek nekifogok, előbb tanuljak 4 évig, miegyéb nyalánkságra nincs szükségem...:))
"Érdekes, hogy 794-ben még más volt a véleményed. Vagy igényesség sem kell már, netán sorszámok szerint kezdtek fizetni? Mintha a 796 utolsó mondata is aktuális lennen jelen helyzetben."
Két teljesen más emberről, és hozzáállásról van szó. Az egyik "programozó", a másik ismerkedik hobby szinten a nyelvvel. Aki hobby szinten érdeklődik, attól nem kell elvárni akadémiai szintet. Aki pedig ebből keresi a kenyerét, attól igen.
"Ha egy kontrolhoz akarok adni egy másikat akkor emberKontrol.Parent = egyikCsoportPanel, ha másik csoportba teszem az illetőt akkor emberKontrol.Parent = másikCsoportPanel, ha egyik csoportban sincs az illető akkor emberKontrol.Parent = null (vagy gyűjtőPanel), nem érdekel engem a Controls foglalkozzon vele a rendszer ha akar."
Az van, hogy ilyenkor pont a Controls-t menedzseled, csak más szintaktikával :-)
Úgy tűnik nem vagy tisztában a Controls szerepével, vagy a dinamikusan létrehozott vezérlők fogalmával.
Ha azt akarod, hogy egy vezérlő megjelenjen a felületen, akkor be kell tenned a Controls-ba. Ha dinamikusan hozod létre/szünteted meg a vezérlőket, akkor neked, manuálisan kell betenned/kivenned a Controlsba/ból. Ezt nem tudod megspórolni, ezt nem csinálja meg a designer (ha dinamikusan létrehozott vezérlőkről van szó), és nem csinálja meg helyetted a runtime (?!?) sem.
public void OnMouseDown (object sender, MouseEventArgs e)
{
}
Ha ezt a mezei, legegyszerűbb szerkezetet használom és nem csak a Button-okhoz rendelem, hanem a Group-jaimnak is ez a mousedown esemény-lekezelője, akkor a gép/program időnként téveszt: egy gombot nyomok meg, de úgy érzi, mintha group-on nyomtam volna meg az egeret - és viszont.
Ha az alábbihoz hasonló (az egyik itt segítő topiktárstól látott) rövid ingyombingyomot belerakom, akkor el tudom különíteni a gombon történt gombnyomást a goup-on történttől:
Button button = sender as Button
if (button != null)
{
.....
}
Erre mondom azt, hogy amikor tanulsz - és akkor bármelyik szakirodalmat nézhetem(!) - legfeljebb a fenti szerkezetet találod meg, az alább beírt if-es ingyombingyomot nem, tehát olyat nem találsz, ahol ez le lenne írva - ezzel szemben szó nincs arról, hogy enélkül néha nem tudja a masina elkülöníteni, melyik objektumon nyomtam meg az egeret - legalábbis nem következetes, össze-vissza működik
OK, tudom, tanulmányozzam a sendert, az e-t és egyáltalán az egészc# filozófiáját.
Meg is teszem
Ezzel nem is lenne bajom, bajom azzal van, amikor a tankönyv mond valamit és baromira nincsen ott, hogy ez (ha többféle objektumon működik) következetlenül fog működni ha nem vacakolok bele külön valamit.
...és akkor úgy érzem, amikor a következetlen működést látom, megint olyasvalamivel lopják az időmet, amit megspórolhattam volna, ha legalább utalnak rá...és ismét peregnek a percek az utánajárással...
Nem fogok megsértődni, nyugodtan terelgess megfelelő irányba..:))
Bár ismét hangsúlyozom, nem óhajtok fejlesztővé válni; kb. kétévente akad egy olyan probléma, ami valamiért vagy megtetszik/érdekelni kezd vagy meg "kell" csinálni és akkor programozni vagyok kénytelen valamilyne nyelven - amit természetesen(?) nem ismerek, már rég elfelejtettem, soha nem voltam benne profi, gyökeresen új verziója van.
Igazad van, a Location úgy működik, ahogy....
De ha az ember nem óhajt hihetetlen mértékben elmélyedni az isteni C# rejtelmeiben, és adott esetben a legegyszerűbbnek az tűnik (az is a legegyszerűbb módszer az esetek többségében), ha egy példában látott utasítást egyszerűen bemásol, akkor érthető módon megütődik, ha egy állítólagosan működőképes példából kiszedi mondjuk az allábbi két sort és azonnal hibát jelez már a szerkesztő-fordító is:
objA.Location.X=34;
objA.Location.Y=56;
Ilyenkor mit csinál a "helyes irányba terelendő" dógozó?
Szakirodalomhoz fordul: először jobban (illetve először) megnézi, hogy szerkesztés közben mit is ír maga a "gyors-segítő sárga keret" - ez azt látja az ermberfia, hogy set/get....ekkor a dógózó kicsit ideges lesz, mert ha más property-k simán a fenti szintaktikával megváltoztathatók, akkor ez most mi a tűróért nem?!
Ekkor elkezd ugye az ember komolyabban utánanézni, detektálja, hogy a neten kb. 20.000 hozzá hasonló kutyaütő teszi fel azt az ostoba kérdést, hogy a fenti két utasítás miért hibás és fogjuk rá, elég hamar talál valakit, aki jó példát közöl a Location megváltoztatására.
Ha a dógozóban még mindig buzog a hozzáértés utáni vágy, akkor elkezdi tanulmányozni a Location-t részletesebben egy hiteles fórumon.
Szóval a "helyes irányt" illetően már részben rajta vagyok a témán: legalább utólag utánamegyek, merthogy kénytelen vagyok...
...csak tudod úgy érzem, túl sok felesleges idő ment el ezzel az egyetlen vacakkal és mindez azért, mert valaki egy (egyetemi!) kezdőknek való "szakirodalomban" szar példát hozott (nem próbálta ki) és félrevezetőnek érzem a gyorssegítség "set/get" megjegyzését is, ami azt érzeékelteti a hozzá nem értővel, hogy ugyanolyan módon állítható propertyvel áll szemben, mint a többi
..és túl sok ahhez hasonló aprósággal van ez így - így aztán úgy érzem, néha joggal szidom..:))
De mondok más példát, s igazad lesz ezúttal is, ha azt mondod, előbb nézzek utána részleteiben:
Az alább látható az a képernyőkép, amit beraktam.
Nos, a dinamikusan előállított "group" második felirata egy "label"-en van, a többi textbox objektum
Generáltam egy, a group-hoz rendelt "mouseEnter" esemény-t, ami azzal indul, hogy a kurzor "kézzé" változik, illetve egy mouseLEave eseményt, ahol is visszaváltozik. Nincs is ezzel semmi baj, alapvetően működik is a dolog, csak a torka véres: Ha group - illetve azon belül a textbox(ok) - felett van az egér, "kéz" marad a kurzor, ezzel szemben ha a group"-ban lévő "label" fölé húzom az egeret, akkor visszaváltozik - mitha csak lementem volna a group-ról...
Biztosan természetes, hogy ennek így kell lennie. Én mindenesetre azt vártam volna, hogy a gorup egészére igaz az esemény és a label e tekintetben pontosan úgy működik, mint a group-ban lévő tetxbox(ok). Eszembe sem jutna előbb megnézni, vajon ez így van-e, így lesz-e, csak akkor kezdek el utánajárni, amikor látom, hogy ez baromira nem így van OK, igazad van, nem úgy működik, ahogy én elképzeltem. Nyilván más logika szerint építették fel a label-t és ez így logikus Ugyanakkor én úgy érzem, joggal hőbörgök...:))...megint egy olyan apróság, ami tízperceket vesz el az ember életéből
---
A gépre, amin használni óhajtják az én egyedülállóan zseniális alkalmazásomat, semmit nem lehet installálni (tehát szóba sem kerül holmi ingyenes adatbázis-tároló sem), a programnak tehát önmagában futtathatónak kell lennie mondjuk egy pendrive-ról, semmit nem lehet a gépre rátölteni a netről bármennyire is ingyenes. (No meg még mindig ott tartok, hogy még ha akadna is ezt a funkciót megvalósító alkalmazás, azt valszeg sokkal bonyolultabb lenne kezelni, mint az én speciálisan erre a célra kifejlesztett, téglalapokat huzgáló és csoportosító alkalmazásomat.)
---
Meg aztán: Miért is keresgélnék erre a feladatra alkalmas programot?! A francé' akarsz arról lebeszélni, hogy szakszerűen képződjek és magam állítsam elő a magam programját és ezzel sikerélményeim legyenek? Vagy féltékeny vagy, félsz, hogy minnyá többet fogok tudni erről az egész C#-akármicsodáról?!...:))))
"Hát baromira nem bír üzembiztosan működni (legalábbis ha a neten fellelt péládt írom be); csak akkor működik, ha külön még mindenféle vizsgálatot végez az ember, vajon tényleg arra kattintottam-e, amire..."
Erre tudnál példát adni?
A neten talált példákkal pedig nagyon óvatosan kell bánni, az emberek képesek a lehető legrosszabb példát másolni millió példányban, amitől az úgy fog látszani mintha jó lenne.
Miért kellene nekem menedzselni a Controls-t? Megteszi helyettem a rendszer (designer vagy runtime) ha akarja, ez a dolga, az enyém meg az, hogy a saját dolgaimat menedzseljem, nem keverem a kettőt.
Ha egy kontrolhoz akarok adni egy másikat akkor emberKontrol.Parent = egyikCsoportPanel, ha másik csoportba teszem az illetőt akkor emberKontrol.Parent = másikCsoportPanel, ha egyik csoportban sincs az illető akkor emberKontrol.Parent = null (vagy gyűjtőPanel), nem érdekel engem a Controls foglalkozzon vele a rendszer ha akar.
A saját lista előnyeit és a Controls hátrányait és a korlátait is leírtam már. Ha érdekel olvasd el, ha csak unalomból kötekedsz akkor ahoj poplacsek.
Konkrétan ennél a feladatnál sem jó a Controls mert a gombok más-más kontrolhoz tartoznak attól függően hogy melyik csoportban vannak ezért mindig másik Controls listában vannak.
A C# (és az életben sok más) megismerése lehetetlen az elméleti alapok nélkül, lásd pl. Control.Location. Nem csak ezt, hanem sok mást sem lehet tapasztalati úton megismerni (pl. immutable osztályok, azok is okozhatnak meglepetést).
És ennek semmi köze a profisághoz, ez a belépőszint. Érdekes, hogy 794-ben még más volt a véleményed. Vagy igényesség sem kell már, netán sorszámok szerint kezdtek fizetni? Mintha a 796 utolsó mondata is aktuális lennen jelen helyzetben.
A Location (struct, immutable) miért rusnyaság? Megvan azoknak a helyük, csak kell tudni hogy melyik mire való és hogy működik. Középút nincs, vagy tudod vagy szívsz (és szidod magad helyett a nyelvet és a miniszterelnököt).
"miért nem megjegyzés nélkül segítenek az embernek"
Már írtam, csak akkor kérdezz ha képes vagy elfogadni a válaszokat.
Megkérdezted honnan lehetett volna megtudni (sok kérdőjel és felkiáltójel használatával), erre kaptál választ.
"igazán élvezetesnek azt találom, amikor minden egyes kósza bittel el tud számolni az ember"
Akkor rossz irányból közelítetted meg a feladatot (feltéve hogy nem akarod a hardvert is magad csinálni):
először kell írj egy BIOS-t, majd egy oprendszert, majd egy nyelvet, utána egy fejlesztőeszközt, és ha ez mind megvan akkor foglalkozhatsz a gombok tologatásával.
Igen, ez is irónia volt.
"és végképp utálom, amikor nem a leírásnak megfelelően működik valami."
A Location rossz példa, az a leírás szerint működik csak te értelmezted hibásan a leírást.
A Location property írható ahogy az MSDN állítja és állításával változik a kontrol pozícója is, ennek viszont semmi köze ahhoz hogy a Location.X/Y állításának van-e bármilyen hatása a kontrol állapotára. .Net 4-ben le sem fordul:
Cannot modify the return value of 'System.Windows.Forms.Control.Location' because it is not a variable
Ha már ott voltál a Control.Location leírásánál akkor megnézhetted volna a többi tulajdonságot is, és valószinűleg találtál volna olyant hogy Left és Top, ezek valók arra hogy egy kontrol pozícióját állítsd (ne vacakolj Location = new Point(10, Location.Y) jellegű megoldásokkal, lámáknak való).
Gets or sets the distance, in pixels, between the left edge of the control and the left edge of its container's client area.
Példa is van, célzottan, nem véletlenül.
Rengetegszer leírtam sok helyen, sok embernek: mikor elkezdesz használni egy osztályt fektess bele 5-10 percet abba, hogy elolvasod milyen metódusai és tulajdonságai vannak. Enélkül hogy akarod használni?
"honnan a fenéből kellene tudnom"
Ismét meg fogsz sértődni: megtanulod mi a különbség a struct és az osztály között (senki nem született ezzel a tudással), ebben a konkrét esetben pedig elég lett volna elolvasni a leírást, részletesen le van írva (a lexikonod vagy hiányos vagy rossz oldalon nyitottad ki ha ezt nem találtad meg benne).
Nem kell ehhez véletlen találni egy példát, még azt is írja hogy melyik propertyket kell állítani (Left, Right, Top, Bottom).
Because the Point class is a value type (Structure in Visual Basic, struct in Visual C#), it is returned by value, meaning accessing the property returns a copy of the upper-left point of the control. So, adjusting the X or Y properties of the Point returned from this property will not affect the Left, Right, Top, or Bottom property values of the control. To adjust these properties set each property value individually, or set the Location property with a new Point.
Itt is van példa, nem véletlenül.
Tehát ha valóban érdekelnek a miértek akkor ott vannak a válaszok a dokumentációban, nem kell hozzá semmi véletlen csak az F1 gomb megnyomása (próbáld ki: írd be button1.Location majd vidd a kurzort a Location-re, nyomd meg az F1 gombot és pár másodperc múlva olvashatod a leírást).
"De hát épp ezt teszem"
Nekem fura a rendszered. Ha valami nem működik akkor nem a dokumentációt kezded olvasni hogy megtudd mit rontottál el, hanem panaszkodsz hogy a Control.Location hibás.
"és egyébként sem lehet felinstallálni egy ellenőrzött hálózatra jogtisztátlanul."
Eszembe sem jutott hogy szoftvert lopnál. Meglepődnél ha megnéznéd mennyi ingyenes szoftver létezik, webes is amiket még installálni sem kell.
"mert ahol használni kellene, nem engednék, hogy adatbázis-tárolót elérjen az ember"
Adatbázis alatt nem kell egyből százmillió forintos Oracle-re gondolni amelyik 2 millió forintos hardveren fut.
Egy Excel (OpenOffice) tábla is lehet adatbázis, továbbá van rengeteg lokális és beágyazott adatbáziskezelő (ingyenesek is, még Oracle és MS SQL is van ingyenes). Ami beágyazott azt installálni sem kell. Vagy ott van a .Net DataSet, az tud fájlba menteni.
"az, hogy végre azt csinálja a gép, amit elvárok tőle...és utálom, ha nem így van"
És ezt úgy tervezed elérni, hogy ... szidod az összes programozási nyelvet mert nem úgy működnek ahogy te elképzelted?
"elég nehéz engem elhajtani, úgyis jövök, ha valamit nem tudok"
Én nem akarlak elhajtani, csak kicsit helyesebb útra téríteni.
Az elméleti tudás egyébként nem nyelvfüggő, pl. a value type (struct) és immutable fogalmakkal más programozási nyelvekben is találkozhatsz, tehát ha egyszer megtanulod akkor sokszor felhasználhatod.