| 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: 14 let
|
|||
0