Autor | Zpráva | ||
---|---|---|---|
Adrifinel Profil |
#1 · Zasláno: 9. 2. 2013, 13:47:05
Mám kamaráda, který by potřeboval poradit:
Ahoj, Je tu prosim nějaký programátor v C# ??? Potřeboval bych poradit s triviální věcí, na kterou nemůžu přijít... Jde o to, že do obrázku vykresluju rámeček, tam kde uživatel klikne... Přes pictureBox.CreateGraphics().DrawRectangle(). A potom, když uživatel klikne na jiné místo, tak se mi vykreslí rámeček na jíném místě, ale potřeboval bych, aby původní rámeček zmizel... A já nemůžu přijít na to jak to udělat... Co byste poradili? Chtěl by to udělat pokud možno, co nejefektivnější, aby se počítač moc nenadřel... |
||
Prochy Profil |
#2 · Zasláno: 9. 2. 2013, 14:25:52
Nevim, jestli píše zrovna do správné diskuze. Lepší bude forum.zive.cz, Builder forum.
Jinak k problému, máš instanci toho rámečku, tak ji normálně přesune na jinou pozici ne a překreslí ji ne? Problém je v tom, že kamarád nejspíš vytváří pokaždé novou instanci, což je podle mě špatně. Při prvním kliknutí zjistí, jestli je vytvořena instance rámečku, když ne, tak ji vytvoří, jinak pracuje s již vytvořenou a té následně změní souřadnice vykreslení. |
||
Jan Tvrdík Profil |
#3 · Zasláno: 9. 2. 2013, 15:23:37
Prochy:
Metoda DrawRectangle žádnou instanci nevrací. Bude zřejmě potřeba to překreslit celé. |
||
Adrifinel Profil |
#4 · Zasláno: 9. 2. 2013, 17:06:01
Posílá toto a říká, že si myslí, že má jen jednu instanci:
Graphics g; g = pictureBox1.CreateGraphics(); Tady si definuji koordináty 30ti obdélníků... private Rectangle rect_A1 = new Rectangle(75, 40, 60, 82); private Rectangle rect_A2 = new Rectangle(75, 137, 60, 82); private Rectangle rect_A3 = new Rectangle(75, 236, 60, 82); private Rectangle rect_A4 = new Rectangle(75, 332, 60, 82); private Rectangle rect_A5 = new Rectangle(75, 429, 60, 82); private Rectangle rect_A6 = new Rectangle(75, 526, 60, 82); atd ... až 30... Tady si do pole nacpu těch 30 koordinátů těch 30ti obdélníků.. private Rectangle[] SadaRectangle = new Rectangle[30]; SadaRectangle[0] = rect_A1; SadaRectangle[1] = rect_A2; SadaRectangle[2] = rect_A3; SadaRectangle[3] = rect_A4; SadaRectangle[4] = rect_A5; SadaRectangle[5] = rect_A6; atd ... až 30... Tady v cyklu projíždím kolekci toho pole a porovnávám koordináty kam bylo kliknuto s koordináty do pole vložených Rectanglů. Pokud je shoda a bylo kliknuto na plochu Rectanglu - tak okolo obdélníku vykreslím ještě jeden červený... Koordináty kam bylo kliknuto jsou uloženy v proměnné mousePt foreach (Rectangle rect in SadaRectangle) { VymazStareRectangly(rect, g); //Volám funkci, která překreslí všechny rectangly na černo.. Pen outline = new Pen(Color.Red, 1); g.DrawRectangle(outline, rect); If (rect.Contains(mousePt)) { g.DrawRectangle(outline, rect); } } private void VymazStareRectangly(Rectangle[] rect, Graphics g) { Pen outline = new Pen(Color.Black, 1); g.DrawRectangle(outline, rect[0]); g.DrawRectangle(outline, rect[1]); g.DrawRectangle(outline, rect[2]); g.DrawRectangle(outline, rect[3]); g.DrawRectangle(outline, rect[4]); g.DrawRectangle(outline, rect[5]); atd ... a6 rect[30] ... } |
||
Časová prodleva: 11 let
|
0