Benutzer mit den meisten Antworten
Picture Box ID rausfinden

Frage
-
Ich hab mal wieder ein Problem:
Kann man eine pictureBox aufgrund ihrer Position identifizieren? Also z.B. wenn sie von einer Klasse erstellt wurde und in einem Array angelegt ist irgendwie den Namen herausfinden, also z.B. pictureBox[1] ? (Habe allerdings mehrere Objekte, die wiederrum alle eine pictureBox[1] haben. Muss aber genau wissen, welche es ist).
Oder gibt es eine andere Möglichkeit die Box genau zuzuordnen?
Vielen Dank schonmal im Voraus =)
Antworten
-
- Als Antwort markiert Stippy19 Donnerstag, 26. Januar 2012 14:03
-
Meinst du dem Konstruktor beim erstellen der Objekte übergeben? Dann muss ich ja jedem Objekt (weil es mehrere sind) ein handle zu jedem Objekt übergeben. Dann wird die Argumentenliste ja endlos... Oder wie meinst du das? Glaube wir reden grad fett aneinander vorbei XD
/Edit: Außerdem ändert das mein Problem nicht. Dann habe ich nämlich viele verschiedene Objekte und weiß aber trotzdem nicht, von welchem jetzt davon die pictureBox unter meiner liegt... -
Vielleicht solltest Du erstmal noch etwas über das Konzept Deiner Software nachdenken.
1. Musst Du die wohl eine zentrale Verwaltung bauen, die Deine Objekte identifizieren. Das ist sicherlich schneller als alle immer zu enumerieren.
2. Kannst Du einem Objekt, dass Du erzeugst einen entsprechenden Zeiger auf ein Verwaltungsobjektmitgeben, dass Dir genau über "diese Deine Fragen" Auskunft gibt. "Wo liegt wer? Wer kollidiert mit wem?" etc.
3. Ich halte es für absolut falsch, diese Informationen in den realen dargestellten Objekten zu verwalten.BTW:
Meistens hat man interne Objekte, die die Spielsituation darstellen.
Dann hat man eine Engine die diese Spielsituation rendert...Das Spielfiguren durch ein eigenes Form-Objekt dargestellt werden halte ich für kleine "gute" / "effektive" Lösung.
Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de- Als Antwort markiert Stippy19 Donnerstag, 26. Januar 2012 14:03
Alle Antworten
-
Das Control::Handle Property ist eindeutig.
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.handle.aspx
Es gibt keinen Namen. Andernfalls kannst Du auch die Handles vergleichen...
Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de -
Ja, nein, meinte nicht den Namen in dem Fall, meinte... kp wie das eigentlich heißt XD
Hm. Leider weiß ich konkret nicht, wie ich das anwenden kann.
Ich habe eine pictureBox, auf der eine andere liegt. Wenn man auf die obere klickt, soll was mit der unteren passieren (und mit dem Objekt, dass die untere erzeugt hat!). D.h. ich muss dann jedem Objekt ein Handle zuweisen?
Irgendwie komm ich damit nicht klar...
Und die Beispiele auf der msdn seite sind mehr schlecht als recht. Einige sind für mich komplett nutzlos, wobei ich das auf anderen Seiten dann direkt verstehe. Leider gibts zur Verarbeitung von Handle wohl keine guten externen Beispiele (zumindest noch nicht gefunden).--> Das Control::Handle hilft mir nicht, da ich eine eigene Klasse habe, in der die untere picturebox erzeugt wird. Und genau auf diese Klasse (bzw Objekt dieser Klasse) will ich zugreifen.
- Bearbeitet Stippy19 Mittwoch, 25. Januar 2012 14:18
-
Hm. Ok, nochmal (bin nicht so gut im erklären):
Ich habe eine Klasse Spielfigur. Daraus erzeuge ich 2 Objekte (Objekt1 und Objekt2). Objekt1 und Objekt2 wiederrum erzeugen jeweils eine pictureBox (pBox1 und pBox2). Jetzt liegen beide pBoxen aufeinander. Von pBox1 weiß ich die Position (also X und Y Wert). Und ich will jetzt auf Objekt2 zugreifen. Ich muss also über die Position der pBox1 auf pBox2 schließen und dann von pBox2 auf Objekt2. Das klappt aber zum verrecken nicht.Dieses Event ist in spielfigur.cpp enthalten. Beim Aufruf wird auf pBox1 zugeriffen und damit auf Objekt1.
void Spielfigur::attackMark_Click(System::Object^ sender, System::EventArgs^ e) { PictureBox^ pBoxAttack_clicked = safe_cast<PictureBox^>(sender); Hitpositionx = positionfield->repositionX(pBoxAttack_clicked->Location.X); Hitpositiony = positionfield->repositionY(pBoxAttack_clicked->Location.Y); //Und hier würde ich gerne sowas in der Art machen: Knight^ knight1 = pBoxAttack_clicked->Handle; //Um dann mit: knight1->pBarHP->Value = 10; //Den Wert zu ändern }
- Bearbeitet Stippy19 Mittwoch, 25. Januar 2012 15:55 genauere Erläuterung
-
- Als Antwort markiert Stippy19 Donnerstag, 26. Januar 2012 14:03
-
Meinst du dem Konstruktor beim erstellen der Objekte übergeben? Dann muss ich ja jedem Objekt (weil es mehrere sind) ein handle zu jedem Objekt übergeben. Dann wird die Argumentenliste ja endlos... Oder wie meinst du das? Glaube wir reden grad fett aneinander vorbei XD
/Edit: Außerdem ändert das mein Problem nicht. Dann habe ich nämlich viele verschiedene Objekte und weiß aber trotzdem nicht, von welchem jetzt davon die pictureBox unter meiner liegt... -
Vielleicht solltest Du erstmal noch etwas über das Konzept Deiner Software nachdenken.
1. Musst Du die wohl eine zentrale Verwaltung bauen, die Deine Objekte identifizieren. Das ist sicherlich schneller als alle immer zu enumerieren.
2. Kannst Du einem Objekt, dass Du erzeugst einen entsprechenden Zeiger auf ein Verwaltungsobjektmitgeben, dass Dir genau über "diese Deine Fragen" Auskunft gibt. "Wo liegt wer? Wer kollidiert mit wem?" etc.
3. Ich halte es für absolut falsch, diese Informationen in den realen dargestellten Objekten zu verwalten.BTW:
Meistens hat man interne Objekte, die die Spielsituation darstellen.
Dann hat man eine Engine die diese Spielsituation rendert...Das Spielfiguren durch ein eigenes Form-Objekt dargestellt werden halte ich für kleine "gute" / "effektive" Lösung.
Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de- Als Antwort markiert Stippy19 Donnerstag, 26. Januar 2012 14:03
-
Hm. Ja, ich bin mittlerweile noch auf ein anderes Problem gestoßen, bedingt durch mein "Konzept" (einfach mal drauf los XD). Da muss ich wohl nochmal neu anfangen =)
Vielleicht könntest du mir noch einen Tipp geben:
Ich habe mehrere Spielfiguren ähnlich wie beim Schach. Jede hat Lebenspunkte, eigene Laufwege und eventuell andere Eigenschaften. ich dachte daran, jede Figur durch eine pictureBox darzustellen, mit einer progressBar darüber als Lebensbalken. Sollte ich eine Klasse Spielfigur machen mit den Eigenschaften Lebenspunkte, pictureBox und Verwaltung der progressBar und dann von dieser Klasse vererben und in den abgeleiteten Klassen dann z.B. die Funktion für die Bestimmung der Laufwege reinschreiben?
Oder ist es besser einfach eine Klasse pro Spielfigurentyp zu erstellen?Bin mir da unschlüssig, weil es nur sehr wenige Eigenschaften gibt, die alle Spielfiguren gemeinsam haben...
Außerdem: Da mein Spielfeld wie ein Schachbrett angeordnet ist und jedes Feld die gleiche Größe habe soll, wäre die Verwaltung (also, ob das Feld besetzt ist oder welche Einheit darauf steht) wahrscheinlich relativ einfach mit einem zweidimensionalen Array zu realisieren. Ist das eine gute Idee, oder gibt es wichtige dagegen sprechende Argumente?
//Edit2: Man kann ja mit Messagebox(""+Object,"") das Objekt als String ausgeben. Kann man andersherum auch vom String auf ein Objekt kommen?
//Edit: Schonmal vielen Dank für deine Ratschläge.- Bearbeitet Stippy19 Donnerstag, 26. Januar 2012 12:39
-
Hm. Ja, ich bin mittlerweile noch auf ein anderes Problem gestoßen, bedingt durch mein "Konzept" (einfach mal drauf los XD). Da muss ich wohl nochmal neu anfangen =)
Dann hast Du ja schon mal gelernt, dass beim Programmieren ein Konzept hilfreich sein kann ;)
Vielleicht könntest du mir noch einen Tipp geben:
Nein! Kann ich nicht.
Ich habe zwar Vorstellungen von so etwas, aber eigentlich gibt es klassische Bücher um so etwas zu lernen. Zudem entwickle ich keine Spiele.
Und ich bin immer noch der festen Überzeugung, dass man so etwas aus Büchern besser lernt als durch Fragen in einem Forum... Just my 2 cents...
Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de