Keresés

Részletes keresés

Törölt nick Creative Commons License 2011.06.30 0 0 873

Vannak a C#-ban rusnyaságok, speciel amit emlitessz, a Location manipulálása pont ilyen. A Location propertynek a típusa Point, ami pedig egy struct. A struct-ról azt kell tudni, hogy érték típus (Value Type vs. Reference Type), ami pedig durván azt jelenti, hogy érték szerint "hivatkozol" rá. Amikor azt írod, hogy xy.Location, akkor keletkezik egy új Point objektum lemásolva az xy objektum Location tartalmát, később meg már ezen új Point objektum tartalmát módosítod csak, ennek viszont már nincs köze az xy.Location-höz, azaz már nem az xy.Location-t módosítod. (Ezt a net jobban el tudja neked magyarázni).

 

Mindenesetre az, hogy nem lehet explicit, első ránézére eldönteni, hogy mi az érték típus, és mi a referencia típus, az elég nagy rusnyaság. Nagyjából az a következménye, hogy meg kell tanulnod minden típusról, hogy referencia, vagy érték típus-e.

Előzmény: csipkebéka (871)
csipkebéka Creative Commons License 2011.06.30 0 0 872

Kösz..:))

Nem riadok el és igaz: eszem ágában sincs vérprofivá lenni...nem is érdekel, nem is lennék képes rá, nem olyan az agyam...egy feladatot akartam megoldani és megoldottam...és segítettél; köszönöm

Azt hiszem, tanulni csak konkrét feladat esetében lehet - és mondom: a feladat nem játék, tényleg szükség van rá (bár nekem egyfajta játék volt megoldani..:))

Előzmény: Törölt nick (868)
csipkebéka Creative Commons License 2011.06.30 0 0 871

OK, béke van, nem akarom huzakodással szétoffolni a topicot; még mindig hiszem, azért nyílt, hogy egymást segítség azok, akik épp ezzel a vacakkal (C#)foglalkoznak ...

Csak ez nehezményeztem, hogy miért nem megjegyzés nélkül segítenek az embernek...:))

Vacaknak meg azért nevezem, mert - ez egyéni "szerencsétlenség"..:)) - megmaradtam annál, hogy igazán élvezetesnek azt találom, amikor minden egyes kósza bittel el tud számolni az ember (amikor ott a kapcsolási rajz és az ember tudja, hogy a proc. regiszteréből kiküldött tartalom melyik madzagon mit is csinál....de ez régen volt, ma már erre nincsen szükség...:(((

Szóval utálom, amikor nem tudom, hogy mi van az utasítás végrehajtás mögött - és végképp utálom, amikor nem a leírásnak megfelelően működik valami.

 

Mondok egy példát: arra a kérdésre, hogy miképpen lehet egy objektumnak új pozíciót adni a képernyőn, tele van az internet olyan példákkal, ahol a "Location" tulajdonságnak adnak új értéket a következőképpen:

 

Button_gombom.Location.X=12;

Button_gombom.Location.Y=12;

 

Na, arról nem is beszélve, hogy a saját help-je is azt írja, a tulajdonság get/set alapon működik.

Nos, nyilván (rajtam kívül) mindenki tudja, hogy ez így nem írható be egy programba

 

Na most amikor látom, hogy ez semmiképpen nem működik, honnan a fenéből kellene tudnom - hacsak rá nem találok véletlenül egy megfelelő példára - hogy ezt úgy lehet állítgatni, hogy be kell írni a "new Point()..." stb-t?!

Na, arról nem is beszélve, hogy ez sem mindig jó így; mindegyik objektumnál nem lehet használni..:((

 

OK, igazad van, tanuljak!

De hát épp ezt teszem...:))...addig kutatok, kérdezek, amíg össze nem sikerül valahogy faragnom azt, amit éppen kell..:)))...lehet, hogy kurvára nem elegáns, lehet, hogy egy vérprofi a fejét fogná, de eddig akármiben kellett valamit megcsinálni (Excel-macro, ToolBook, VB, Dbase, Clipper, Basic, Assembly -  jó régen...:))), az előbb-utóbb hiba nélkül működött.....és sikerélményt jelentett..:))

Többször nekifutottam a C-nek, de - már bocsánat az imádóktól - undorítónak éreztem a szintaktikáját, aztán megnéztem a c++-t, azt is utáltam, aztán egyszer régen belekukkantottam a visual c-be, a Java-ba de ezeket is utáltam (ezek mindössze párnapos próbálkozások voltak, tehát komoly tanulmányokat nem folytattam, mondtam, nem voltam soha fejlesztő, nem is leszek az, csontkovács vagyok, aki összefarag egy alkalmazást, ha kell!)

 

Ez tényleg megoldandó feladat - 50 évesen már nem kap az ember házifeladatot és nem is az unokám feladatára cuppantam rá...:))

...és nem kiadták megoldásra, hanem a probléma felmerült (hogy ne egy kockás papíron sakkozzanak a nevekkel)) és én önként magamra vállaltam...

Lehet, hogy létezik kész alkalmazás, de az vagy olyan spéci szerkesztő program, ami túl sokat tud és bonyolult a kezelése - és egyébként sem lehet felinstallálni egy ellenőrzött hálózatra jogtisztátlanul. Pl. Excel-ben lehetne a cellákkal vacakolni és ide-oda írni az embereket, de az sokkal körülményesebb lenne, mint egy olyan program, ahol csak ide-oda rakosgatja az ember a dolgozókat egy egérrel egyetlen mozdulattal.

Az adatbázisos megoldás sokkal egyszerűbb lenne, mint nekem gondoskodni a képernyő-állapot elmentéséről, csak nem lehet mögötte adatbázis, mert ahol használni kellene, nem engednék, hogy adatbázis-tárolót elérjen az ember, szóval "magányos", "önműködő", installálás nélküli programnak kell lennie.

 

....no meg a kihívás is vonzott..:))

 

.....és mondom még egyszer: marhára nem érdekel az elegancia; a működőképessége érdekel egy alkalmazásnak, a használhatósága, az, hogy végre azt csinálja a gép, amit elvárok tőle...és utálom, ha nem így van..:))

 

Mondok erre egy példát: van egy mouseDown eseményem, ahol egyértelműen lenne szükséges azonosítanom azt az objektumot, amin az esemény történik - az ember úgy gondolná, a gép tudja, melyik objektumra kattintottam...

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...

Na ezt utálom ebben a remek "komplex programozásban"...:))

 

No mindegy, csak püffögök itt...szóval OK, nem érzékenykedem, elég nehéz engem elhajtani, úgyis jövök, ha valamit nem tudok

(Az ajánlott szakirodalmat változatlanul köszönöm - bár el vagyok otthon látva egy C# lexikonnal..:)))

 

 

Előzmény: digicat (867)
Törölt nick Creative Commons License 2011.06.30 0 0 870

"De továbbmegyek: mutattak nekem nemrég egy példát pl. kurzorral való tárgymozgatásra - amit egy az egyben beírtam, s olyan szakadozottan mozogtak vele az objektumok, hogy kénytelen voltam inkább magam megírni egy rendes rutint, ami tökéletesen működik"

 

Ki mutatott neked ilyen példát? Érdekelne, hátha én is tanulhatok belőle.

Előzmény: csipkebéka (865)
Törölt nick Creative Commons License 2011.06.30 0 0 869

Dinamikusan létrehozott vezérlők esetében nem tudod megúszni, hogy menedzseld a this.Controls-t. Ha meg nem tudod megúszni, akkor meg mi a fenéért ne erre építenél. Nem látom, hogy miben jelent könnyebsséget az új lista bevezetése. 

 

Tehát, ha a Controls-t ígyis-úgyis menedzselned kell, akkor milyen hasznod származik egy redundáns, tipusos segédlista bevezetéséből, amit még pluszban menedzselned kell?

Előzmény: digicat (866)
Törölt nick Creative Commons License 2011.06.30 0 0 868

Felesleges ez a merevség, a célja a nyelv alapfoku megismerése volt, játékos módon. Láthatóan tényleg csak apró konkrétumok érdekelték, nem akart véprofivá válni két hét alatt, felesleges az akadémiai kioktatás. Inkább elriasztod ezzel.

Előzmény: digicat (867)
digicat Creative Commons License 2011.06.30 0 0 867

"A (ki)oktatást köszönöm;"

Konkrét kérdésre kaptál konkrét választ. Ha ezen ennyire fennakadtál akkor legközelebb vagy ne kérdezz olyant amire nem akarsz választ kapni vagy a válaszok elolvasása előtt igyál egy (több) sört/bort/pálinkát/más italt (a megfelelő aláhúzandó).

 

"egyébként olvashattad volna, nem házifeladat"

Visszaolvastam és csak annyit írtál hogy a feleségednek segítesz, a feladataidnak pedig nagyon hf jellege van. Ez nem jelenti azt hogy az is, de én csak annyit tudok amennyit ide a topikba írtál. Ha figyelmetlen voltam akkor elnézést, kérlek idézd be hogy hol olvashattam volna.

Újrafogalmazok: Feltételezem hogy ha ilyen a feladat akkor előtte volt valami oktatás is. Nem hiszem hogy egy teljesen laikusnak kiadnak egy ilyen feladatot.

 

"nincs se pénzem, se időm tanfolyamra, tanárra, s bármilyen hihetetlen, egy kezdőknek való könyvvel indítottam."

Minden amit linkeltem ingyenes, rengeteg ingyenes tutorial és példaprogram is létezik.

 

"Ugyan miképpen is lehet tanulni, ha nem úgy, hogy próbálkozik az ember ezzel-azzal, s mi lenne jobb, mint egy konkrét feladat megoldása?"

Ez igaz, viszont vannak előfeltételei. Egyrészt általános elmélet mint pl. nyelvi elemek, algoritmusok, utána pedig a konkrét nyelv (esetedben C#) elemei: pl. ha nem ismered az eventek mibenlétét és működését akkor nem tudod hogy az első paraméter micsoda, ha nem tudod hogy van cast (típuskényszerítés) akkor nem tudsz az object típusú objektumból Button típusú objektumot csinálni.

Esetedben ha csak a név kell akkor elég a Control is, annak van Name tulajdonsága - ezt láthatod a Button osztály leírásánál: Gets or sets the name of the control. (Inherited from Control.).

 

"miért olyan rémes, hogy az ember kérdezni merészel?"

Hol írtam hogy ne kérdezz, vagy azt hogy baj ha kérdezel, vagy tettem bármilyen megjegyzést a kérdéseidre?

 

"amikor pl. a tömbökkel, listákkal kapcsolatos szintaktikát nézegettem, példák sokasága között sem láttam, hogy objektumokat tároltak volna el"

Ez egy jó példa arra hogy mennyire fontosak az elméleti alapok. C#-ban minden objektum (az int pl. System.Int32 típusú objektum), tehát bármilyen példát láttál abban objektumokat tároltak.

Az ArrayList.Add metódus paramétere pl. Object típusú, ebből származik az összes többi típus, ezért lehet hozzáadni bármilyen objektumot (a miérthez kell tudni mi a leszármazás), és ha továbbolvasol akkor azt is megtudod hogy a boxing/unboxing miatt az ArrayList használatának hátrányai vannak a generikus listákhoz képest. Ezeket nem lehet kód olvasással megtanulni.

De ha megnézed a formok InitializeComponent metódusát akkor ott is láthatsz példát: Controls.Add.

 

"Nem szükséges oly nagyon gúnyolódni ezzel a gáttal, ha jól emlékszem, jeleztem, leginkább szintaktikailag nem tudok összehozni valamit"

Egyrészt nem gúnyolódás volt hanem példa, másrészt nem értetted meg, hogy nem a szintaktika hiányzik neked, hiszen ha tudnád mire van szükséged (pl. cast) akkor a szintaktikát megnézhetnéd msdn-ben.

Szívesen adok példát más területről ha a sport nem jött be, pl. sokszor hasonlítják a szoftverfejlesztést az építészethez, onnan jöhet példa? A szintaktika az hogy hogyan kell beépíteni egy ablakot, de ha nem tudod hogy létezik ablak csak egy lyukat hagysz a falon akkor nem az a problémád hogy nem tudod beépíteni az ablakot.

 

"Miért nem lehet megjegyzés nélkül válaszolni egy profi számára mégoly ostoba kérdésre?"

Lazíts ;-) túl sokat olvasol a sorok között.

 

"Amúgy meg: az alábbi képen látható a feladat"

Ha tőlem kérded: valószinűleg keresnék egy meglévő eszközt erre a célra. Csak rajzolós sok van (talán Office vagy Excel is jó lenne), de biztos komolyabbak is léteznek melyek alatt adatbázis van.

 

Nyugodtan kérdezz, ne idegeskedj.

Előzmény: csipkebéka (865)
digicat Creative Commons License 2011.06.29 0 0 866

Nem értek egyet veled, minél általánosabb dolgokat használsz konkrét célokra annál nehezebben karbantartható a kód. Ez ugyanúgy igaz a Controls-ba tett egyéb célú kontrolokra mint a típusos listák helyett object alapú listák használatára (ha Button a téma akkor List<Button>, Button[], Dictionary<string, Button>, stb).

 

A Controls egyetlen célja hogy nyilvántartsa egy kontrol által birtokolt kontrolokat és többnyire a designer és a framework menedzseli.

Ráadásul használata arra kényszerít, hogy:

-Csak egy kontrol (pl. panel) használható a gombok megjelenítésére, hiszen ha másik kontrolban szeretnéd megjeleníteni akkor átkerülne a másik ControlCollection elemei közé és nem találnád meg (vagy az összes kontrolban keresned kellene). Lásd pl. a 850-ben leírt feladatot, azt nagyon könnyű úgy megoldani hogy a mozgatott kontrol Parent-jét állítod a cél kontrolra, azaz mindig más Controls-ban lesz benne.

-Nem tudnék olyan gombot létrehozni amelyik nem tartozik egy kontrolhoz sem. Pl. elképzelhető olyan hogy az objektumok eredetileg szabadok, azaz nincsenek hozzáadva egy kontrolhoz sem hanem pl. egy listboxból lehet választani, a kiválasztottat pedig gombnyomással lehet hozzáadni mondjuk egy panelhez.

 

Én szeretem a dolgokat úgy nevezni el hogy a név minél jobban leírja mire való, és azt sem szeretem ha valami összevissza van használva konkrét célok helyett (single responsibility alacsonyabb szinteken is).

Tehát ha gombokat hozok létre akkor lesz egy változóm amiben tárolom azokat, így ha 2 hónap múlva megnézem a kódot akkor azonnal fogom látni hogy mi történik és főleg hogy hol ha rákeresek a használatára.

Karbantartása pont annyi mint a Controls esetében, létrehozáskor hozzáadom a gombot, ha nem kell akkor kiveszem belőle (ha a lista objektum létrehozásán akadtál fenn ami egy new utasítás akkor részvétem :-).

Ráadásul a sajátra kommentet is lehet tenni ahol le tudom írni mire való, /// stílusút is, azaz bárhol a kódban tooltipben látom a kommentet.

 

A karbantartás lényegét nem lehet megérteni ha csak 1-2 hetes időszakban és pár száz soros kódban gondolkozol, a kihívás ott kezdődik amikor több tízezer sor kódot kell karbantartani évekig (nem jelent nagy különbséget hogy csak egyedül dolgozol rajta vagy százan, mert ekkora mennyiségű kódot nagyon kevés ember tud használhatóan fejbentartani hosszútávon).

 

Előzmény: Törölt nick (864)
csipkebéka Creative Commons License 2011.06.29 0 0 865

A (ki)oktatást köszönöm; a szakirodalmakat nemkülönben. (Ez utóbbit tényleg köszönöm:))

Amúgy meg:

Én meg azt feltételezem, hogy nem olvasol figyelmesen, egyébként olvashattad volna, nem házifeladat (legalábbis én ezt állítom ugye..:), nincs se pénzem, se időm tanfolyamra, tanárra, s bármilyen hihetetlen, egy kezdőknek való könyvvel indítottam.

Aztán meg:

Ugyan miképpen is lehet tanulni, ha nem úgy, hogy próbálkozik az ember ezzel-azzal, s mi lenne jobb, mint egy konkrét feladat megoldása? (Amire nem mellesleg megkértek).

Aztán mi lenne jobb forrás, mint példákat tanulmányozni, s miért olyan rémes, hogy az ember kérdezni merészel?

 

Nos, lehet, hogy szerencsétlen oldalakon jártam, de ezt a button-os marhaságot nem láttam, s amikor pl. a tömbökkel, listákkal kapcsolatos szintaktikát nézegettem, példák sokasága között sem láttam, hogy objektumokat tároltak volna el - mondhatnám mindenhol ahol jártam, jellemzően a legegyszerűbb szerkezeteket mutatták be egy-egy adott kérdésre, utasítás, stb. bemutatására, így aztán én a magam részéről cseppet sem csodálkoztam, hogy ezt-azt nem tudtam megcsinálni. Ép ezért kérdezgetek imitt-amott hozzáértőket. Hozzáértőket?!

De továbbmegyek: mutattak nekem nemrég egy példát pl. kurzorral való tárgymozgatásra - amit egy az egyben beírtam, s olyan szakadozottan mozogtak vele az objektumok, hogy kénytelen voltam inkább magam megírni egy rendes rutint, ami tökéletesen működik.

Nem szükséges oly nagyon gúnyolódni ezzel a gáttal, ha jól emlékszem, jeleztem, leginkább szintaktikailag nem tudok összehozni valamit

Végül:

Az ember úgy gondolná, e fórum azért van, hogy kérdéseket lehessen feltenni és azokra választ kapjon az ember, s mindeközben nem a polidikiben van...:))

Miért nem lehet megjegyzés nélkül válaszolni egy profi számára mégoly ostoba kérdésre?..:)))

 

Amúgy meg: az alábbi képen látható a feladat: Akármennyi ilyen, akárhány darab mezőt tartalamzó csoportot lehessen létrehozni, azokat tetszés szerint ide-oda húzogatni, minden feliratokat tetszés szerint átírni, az egyedi buttonokat ha az ember valamelyik csoport egy mezőjére ráhúzza, az "ragadjon ott" és azzal együtt mozogjon tovább (de le lehessen róla venni),  (értelemszerűen két buttont ne lehessen egymásra tenni), át kell tudni színezni is őket, továbbá a munkalap dinamikusan nagyítható legyen, ha túl sok az objektum, s nem utolsó sorban az előállított kombinációt el kell tudni menteni és vissza kell tudni tölteni előzőleg összeállított képernyőt.

(Embereket kell szétosztani különböző létszámú csoportokba - kb. erről van szó)

 

Na akkor ezentúl az adjon nekem tanácsot, aki ezt három nap alatt megoldja - mert nekem ennyi időbe telt munka mellett délután-este.

Igaz, én nem vagyok profi...:)))

 

..és még egyszer köszönöm mindenki igyekezetét, aki válaszolt és segített

 

Előzmény: digicat (860)
Törölt nick Creative Commons License 2011.06.29 0 0 864

Tök felesleges duplán karbantartani két külön collectiont. Pont nem igaz, hogy a saját collectiont bármikor ürítheted (technikai értelemben persze igen), mert ha üríted a saját collectiont, akkor a Controls-ból is ki kell szedni, azaz a szokásos konzisztencia problémák jönnek elő. Nagyobb a hibázás esélye, stb. Nem kell külön lista, a Controls pont elég erre a feladatra.

 

Egy ilyen lista teljesen feleslegesen növelné a kód komplexitását. Egyszerűen azért, mert a karbantartsása nagyobb meló, mint a Controls-t megfelelően szűrni.

Előzmény: digicat (863)
digicat Creative Commons License 2011.06.29 0 0 863

Pedig a karbantarthatóság is a külön nyilvántartást indokolja, hiszen sokkal könnyebb látni hogy mivel dolgozol és hogyan mint ha az általános Controls listát használnád (kb. mint object vs. konkrét típus, vagy ArrayList vs. típusos generikus listák). Vagy saját listát bármikor ürítheted, a Controls-t nem mivel nem te vagy a tulajdonosa.

 

Arról nem is beszélve hogy a saját listádban bármi benne lehet, nem csak az ami egy másik kontrol gyereke (controls contained within the control).

Előzmény: Törölt nick (862)
Törölt nick Creative Commons License 2011.06.27 0 0 862

Szerintem, mivel nincs sok elem a Controls-ban, ezért a lineáris keresés belefér. Ami pedig nincs benne a Controlsban, arra nem is érdemes keresni :) Szóval kód karbantarthatóság szempontból én nem csinálnék redundáns listákat, hacsak tényleg nem muszáj. 

Előzmény: digicat (861)
digicat Creative Commons License 2011.06.27 0 0 861

"A this.Controls között vannak a dinamikusan létrehozott gombok"

Ez egyáltalán nem biztos.

Én inkább eltárolnám listában vagy valami hashtábla-szerű szerkezetben (pl. dictionary), úgy könnyebb keresni, vagy egyáltalán nem is kell keresni.

Előzmény: Törölt nick (832)
digicat Creative Commons License 2011.06.27 0 0 860

"(De hogy honnan lehetett volna megtudni ezt a "Button button = sender as button" sort???!!!)"

Tanulással?

Feltételezem hogy ha ilyen a házi feladat akkor előtte volt valami oktatás is, és kétlem hogy a tanár nem válaszolt volna kérdésekre.

És a dokumentációból is (mely mint minden más programban itt is az F1 gomb megnyomásával hívható elő):

http://msdn.microsoft.com/en-us/library/system.eventhandler.aspx

"The standard signature of an event handler delegate defines a method that does not return a value, whose first parameter is of type Object and refers to the instance that raises the event"

 

Továbbá

http://msdn.microsoft.com/en-us/library/ms173105(v=VS.100).aspx

http://msdn.microsoft.com/en-us/library/cc488006.aspx

http://msdn.microsoft.com/en-us/library/cscsdfbt.aspx

 

Célszerű előbb megismerkedni az alapokkal (bal láb, jobb láb, belégzés, kilégzés), és csak utána indulni 100 gáton.

A C# leírása itt érhető el, példák is vannak benne: http://msdn.microsoft.com/en-us/library/ms228593.aspx

Ebből nem lehet megtanulni programozni, nem is az a feladata.

 

Előzmény: csipkebéka (859)
csipkebéka Creative Commons License 2011.06.26 0 0 859

Kirájjj!

 

Kipróbáltam, működik; pont ez kellett nekem - ezzel már bőven elboldogulok!

 

(De hogy honnan lehetett volna megtudni ezt a "Button button = sender as button" sort???!!!)

 

Nagyon kösz, ezzel most tovább tudok haladni!

Jó éjt!

Előzmény: Törölt nick (856)
Törölt nick Creative Commons License 2011.06.26 0 0 858

Kicsit elegánsabban, és konkrétabban:

 

  public partial class Form2 : Form
    {
        public Form2()
        {
            this.components = new System.ComponentModel.Container();
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.Text = "Form2";

            for (int i = 0; i < 10; i++)
            {
                Button button = new Button();
             
                button.Text = "ujember" + i;
                button.Location = new Point(20, 55 + i * 20);
                button.Size = new Size(150, 20);
                button.Name = "ujember" + i;
                this.Controls.Add(button);
                button.Click += new EventHandler(ButtonClickHadler);              
            }

        }

        private void ButtonClickHadler(object sender, EventArgs e)
        {
            Button button = sender as Button;
            if (button != null)
            {
                MessageBox.Show(button.Name);
            }
        }
    }

Előzmény: Törölt nick (856)
csipkebéka Creative Commons License 2011.06.26 0 0 857

Kösz, első ránézésre használhatónak tűnik, minnyá tanulmányozom és átalakítom a céljaimnak megfelelően

Előzmény: Törölt nick (855)
Törölt nick Creative Commons License 2011.06.26 0 0 856

Szerintem te valami ilyesmit akarsz:

 

 public partial class Form2 : Form
    {
        public Form2()
        {
            this.components = new System.ComponentModel.Container();
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.Text = "Form2";

            Button b1 = new Button();

            int hanygombvan = 0;
            b1.Text = "ujember" + hanygombvan;
            b1.Location = new Point(20, 55 + hanygombvan * 10);
            b1.Size = new Size(150, 20);
            b1.Name = "ujember" + hanygombvan;
            this.Controls.Add(b1);
            b1.MouseDown += new MouseEventHandler(b1_MouseDown);
            b1.MouseUp += new MouseEventHandler(b1_MouseUp);
            b1.MouseMove += new MouseEventHandler(b1_MouseMove);
            b1.Focus();

        }

        void b1_MouseMove(object sender, MouseEventArgs e)
        {          
        }

        void b1_MouseUp(object sender, MouseEventArgs e)
        {          
        }

        void b1_MouseDown(object sender, MouseEventArgs e)
        {
            Button button = sender as Button;
            if (button != null)
            {
                MessageBox.Show(button.Name);
            }
        }
    }

Előzmény: csipkebéka (853)
Törölt nick Creative Commons License 2011.06.26 0 0 855

Itt egy példa, ami mozgat egy groupboxot az egérnek megfelelően:

 

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void InitializeComponent()
        {
            this.groupBox1 = new System.Windows.Forms.GroupBox();
            this.label1 = new System.Windows.Forms.Label();
            this.groupBox1.SuspendLayout();
            this.SuspendLayout();
            //
            // groupBox1
            //
            this.groupBox1.Controls.Add(this.label1);
            this.groupBox1.Location = new System.Drawing.Point(63, 62);
            this.groupBox1.Name = "groupBox1";
            this.groupBox1.Size = new System.Drawing.Size(200, 100);
            this.groupBox1.TabIndex = 0;
            this.groupBox1.TabStop = false;
            this.groupBox1.Text = "groupBox1";
            //
            // label1
            //
            this.label1.AutoSize = true;
            this.label1.Location = new System.Drawing.Point(22, 31);
            this.label1.Name = "label1";
            this.label1.Size = new System.Drawing.Size(35, 13);
            this.label1.TabIndex = 0;
            this.label1.Text = "label1";
            //
            // Form1
            //
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(284, 262);
            this.Controls.Add(this.groupBox1);
            this.Name = "Form1";
            this.Text = "Form1";
            this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.Form1_MouseMove);
            this.groupBox1.ResumeLayout(false);
            this.groupBox1.PerformLayout();
            this.ResumeLayout(false);

        }

        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            foreach (Control control in this.Controls)
            {
                GroupBox grp = control as GroupBox;
                if (grp != null && grp.Text == "groupBox1")
                {
                    grp.Location = this.PointToClient(Control.MousePosition);
                }
            }
        }
    }

Előzmény: csipkebéka (850)
csipkebéka Creative Commons License 2011.06.26 0 0 854

OK, kösz, ezt a "fill dock"-dolgot megnézem, sosem hallottam róla

 

(A feleségemnek csinálom "barátságból..:))

Előzmény: Törölt nick (852)
csipkebéka Creative Commons License 2011.06.26 0 0 853

52 évesen legfeljebb az unokám óvodai házifeladatáról lehetne szó...:)))

 

De mondom, apróságokra van szükségem - pl arra, hogy egy program során dinamikusan előállított handlerben (a handler megvan, azt elő tudom állítani) egy olyan sor kellene nekem, ahol a handler kiírja annak az objektumnak a nevét, amire réhúztam az egeret- tehét pl:

 

itt a gombelőállító rutinom - csak hogy bizonygassam, nem mással iratom meg:

 

            hanygombvan = hanygombvan + 1;
       
            Button b1 = new Button();
       
            gombList.Add(b1);
            bu[hanygombvan] = b1;
            b1.Text = "ujember" + hanygombvan;
            b1.Location = new Point(20, 55 + hanygombvan * 10);
            b1.Size = new Size(150,20);
            b1.Name = "ujember"+ hanygombvan;
            this.Controls.Add(b1);
            b1.MouseDown += new MouseEventHandler(OnMouseDown);
            b1.MouseUp  += new MouseEventHandler(OnMouseUp);
            b1.MouseMove  += new MouseEventHandler(OnMouseMove );
            b1.Focus();

 

...és itt az (egyik) handler:

 

 

        public void OnMouseDown(object sender, MouseEventArgs e)
        {
            // Ha a jobb gombot nyomjuk meg


// na ide szeretnék egy olyan utasítást, hogy melyik gombot nyomtam meg, meyyiken van az egér:
// Valami ilyet:

 

 MessageBox.Show( ??melyik gomb??????);

 

 

 

            if (e.Button == MouseButtons.Right)
            {         
                ColorDialog colordialog1 = new ColorDialog();
                colordialog1.ShowDialog();
                ActiveControl.BackColor  = colordialog1.Color;
            }

            // Ha a bal gombot nyomjuk meg

            if (e.Button == MouseButtons.Left)
            {
                lenyomva = 1;
                x = MousePosition.X;
                y = MousePosition.Y;
                regix = x; // MousePosition.X;
                regiy = y; //MousePosition.Y;
            }
        }

Előzmény: Törölt nick (852)
Törölt nick Creative Commons License 2011.06.26 0 0 852

Csak felületesen, első körös gondolataim:

 

1, Csinálnék egy User Controlt, amiben van egy GroupBox Fill Dock-al. Ebbe tenném a három téglalapot. A GroupBox Textjét Propertyként elérhetővé tenném a User Control memberjei között. 

 

(Szivességből csinálod másnak, akinek ez a házija?)

Előzmény: csipkebéka (850)
Törölt nick Creative Commons License 2011.06.26 0 0 851

Az van, hogy elég sok segítség kérő a háziját szeretné megoldatni velünk, olyasmit meg nem szeretünk.

Előzmény: csipkebéka (846)
csipkebéka Creative Commons License 2011.06.26 0 0 850

Vagyok...ki sem látszom belőle..:))...és előre köszönök szépen minden ötletet!

 

Akkor elmondom, mit is kellene csinálnom pontosan:

 

1. Előbb gombnyomásra meg kellene jelennie a képernyőn egy olyan keretnek (group?), amiben van egy címsor (label?) és három ugyanakkora üres téglalap ezek egyszerre egy csoportot kell, hogy alkossanak; ilyen "csoportos objektumból" akármennyit létre kell tudni hozni. A címsor tartalmát a felhasználó módosíthatja kedvére. Ezek a "csoportok" a képernyőn mozgathatók kell, hogy legyenek.

2.  Egy másik gombnyomásra (menüpontra) meg kell jelennie egy téglalapnak (button?), aminek a feliratát és a színét változtathatja a felhasználó és szintén mozgathatja a képernyőn.

3. Ha ezen utóbbi színes téglalapot a felhasználó az egyik csoport fölé húzza, akkor a téglalapnak "bele kell akadnia" egy üres téglalapba ha a felhasználó "úgy nagyjából" egy üres téglalap fölé húzza. Ha egy csoport-beli téglalap nem üres, nem lehet "odatenni" a színes téglalapot.

 

Az egész dolog célja emberek ide-oda rakosgatása hármas csoportokba és a kialakított rendezettség elmentése és esetlegesen elmentett előbbi elosztások visszahívhatósága a képernyőre (és persze azok módosításának lehetősége).

 

Az alkalmazást pusztán "szeretetből" csinálom, nekem kihívás és sikerélményt jelent ha egy-egy részét megcsinálom, így nem mással akarom megcsináltatni! Pénzt végképp nem keresek vele (sajnos)...:)))

 

 

Csak akadnak "apró" problémáim:

 

1. (már) Tudok objektumokat létrehozni dinamikusan és bele tudom őket tenni egy csoportba, de(!) nem tudom úgy beletenni, hogy aztán az egészet egyszerre tudjam mozgatni - mert pl. ha a "group"-ban van egy label (ahogy lennie is kell) ha az egeret épp azon nyomom le, nem a group handlere indul el, a program úgy tekinti, az egér a label felett van, azaz nem tudom a group-ba belerakott objektumokat úgy beletetnni, hogy attól kezdve azok úgy tartozzanak szervesen a gropuhoz, hogy akárhol fogom meg a dinamikusan összerakott objektumot, az egész egyszerre mozogjon. Most pl. ha  a labelen nyomom meg az egérgombot, csak a label mozog külön, holott azt is részévé tettem hitem szerint a group-nak.

 

2. Olyan egyszerű dolgot nem bírok megcsinálni,hogyha ráhúzom az egeret egy objektumra, akkor annak egy változóba megkapjam az objektum pontos nevét; csak azt tudom elérni, hogy megtudhatom róla, hogy az pl. egy textbox vagy label, de nem tudom "megfogni" az általam előzőleg dinamikusan adott nevét - pedig ez marha egyszerű kell, hogy legyen...:((

 

3. A leírások ellenére nem tudom állítani egy-egy objektum "Location" paraméterét és baromira nem értem, hogy lehet a "Left"-tel elérni azt, hogy egy általam meghatározott objektum "odaugorjon", ahol az egeret megnyomtam (azaz a bal felső sarka ott legyen)

 

..szóval ilyen apróságok...részben szintaktikai hiányosságok, részben ennek a nyűnek - már a .NET-ről és a C#-ról beszélek - a logikájának a teljsen nemértése...:)))

 

 

----- 

 

OK,...tudom, tudom, mielőtt ilyen feladatra vállalkozom, tanuljak többet...:))... de erről annyit, hogy csak egy konkrét feladat során lehet bármit is megtanulni...és én ezt a csontot találtam magamnak...:))

Előzmény: Törölt nick (849)
Törölt nick Creative Commons License 2011.06.26 0 0 849

ha este leszel, segitek

Előzmény: csipkebéka (848)
csipkebéka Creative Commons License 2011.06.26 0 0 848

Naja...nekik is hálás vagyok....))

Ha már...megmondhatnád, hogy lehet egy MouseEnter eseménnyel azt az objektumot aktívvá tenni, amelyikre ráhúztam az egeret - mert ez az istennek nem sikerül

...ahogy a dinamikusan előállított objektumnak sem tudom egy egérráhúzással megtudni az általam adott nevet

 

Komolyan mondom, most már végképp nem értem, hogy a fenébe működik...:((

Valamit alapvetően elrontok...:((

Előzmény: NevemTeve (847)
NevemTeve Creative Commons License 2011.06.26 0 0 847

(Nomeg azoknak a kollégáknak a prog.hu -n, akik kb ugyanezt mondogatták neked.)

csipkebéka Creative Commons License 2011.06.26 0 0 846

Nem hit kérdése, eddig is elhittem, hogy TE tényleg tudod, hogy kell/lehet megcsinálni..:))

Amúgy:

Lehet, te nem tudod elképzelni, hogy léteznek olyan hülyék a témához, mint én

De tudd be mentségemre, hogy öreg vagyok, nem fejlesztő vagyok (csak segíteni szeretnék valakinek a munkájában), hajlamos vagyok kérdezni és tanulni a képzettebb elméktől..:))

 

Köszönöm még egyszer, most működik...:)!!!!!

Igaz - ez természetesen az én hozzá nem értésemen múlt - a "buttons"-t marhára nem akarta elfogadni és persze szívtam egy sort azzal, hogy nem csináltam még soha olyan tömböt, amiben nem csak sima számok vagy stringek vannak (sőt, általában nem kellett túl sokat tömbökkel vacakolnom), szóval szívtam egy sort a tömbdeklarációval és a publikussá tételével.

 

 

Tudod, ha simán lehülyézel és leírod, hogy mit csináljak - úgy, ahogy az előbb - valamennyi szívást megspóroltam volna..:))

 

 

(Mint a régi szakállas történetben: "Egyszer Lenin bácsi a kertben sétált  és észrevette, hogy a szomszéd gyerekek átrúgták a labdát. Lehajolt, felvette és mosolyogva visszadobta nekik....pedig akár közéjük is lövethetett volna...)

 

Mindazonáltal tényleg hálás vagyok neked...(kicsit érdes a stílusa, de legalább segített...:)))

Előzmény: NevemTeve (845)
NevemTeve Creative Commons License 2011.06.26 0 0 845

Úgy, hogy amikor létrehozzuk, akkor a visszakapott handle-t nem elfelejtjük, hanem elmentjük, és később használjuk (persze miért épp most hinnél nekem, ha eddig nem hittél...)

 

buttons[17].Name = "ujérték";

Előzmény: csipkebéka (843)
cyszta Creative Commons License 2011.06.26 0 0 844

Létrehoztunk egy tudományos csoportot azon radiográfusok számára akik mélyebben szeretnének elmélyedni a témában.

Cél: új képalkotó és képfeldolgozó eljárások kidolgozása, szoftverfejlesztés, publikáció.

Véleményünk szerint a radiográfus a fotográfushoz hasonlóan nem csak képeket készít, hanem azokat utólagosan fel is dolgozza. Úgy gondoljuk, hogy a radiográfusnak tudományos szempontból részt kéne venni a képalkotó és képfeldolgozó eljárások fejlesztésében.

Én jelenleg a PTE-n dolgozok, és jó lenne összefogni a hasonló érdeklődésű embereket, sok mindent lehetne csinálni.

Ha valakit érdekel az ország többi részéről is jelentkezhet.

Ha kedveled azért, ha nem azért nyomj egy lájkot a Fórumért!