UserControls nummerieren und ansteuern

Guybrush2003 hat gesagt.:
Gibt es da keine Möglichkeit, im Konstruktor eine Nummer zuzuweisen? So ähnlich wie ich mit "this.Name" einen eindeutigen Namen gebe, kann ich da nicht mit einem "this.irgendwas" eine eindeutige Nummer vergeben?

MfG

Gerd


Guybrush2003 hat gesagt.:
Hallo,

das m_iID ist doch eine normale Integer Variable. Sie hätte immer den gleichen Wert wie der Zähler, aber damit habe ich immer noch keine konkrete Verknüpfung mit den UCs.

Oder öffne ich jedesmal eine neue Instanz vom jeweiligen UC? Wenn ja, wie kann ich dann auf die Vorgänger zugreifen? Gibt es so etwas wie z.B. "wechsel zu der Instanz mit der m_iID=5"?

MfG

Gerd

Der code von Mage kommt natürlich in die Klasse vom UC.
da m_iCounter statisch ist, gehört sie zur Klasse selber und wird bei jeder Instanziierung weitergezählt.
Somit ist der wert m_iID bei jeder Instanz ein anderer.

Du könntest dann zb in einer Schleife überprüfen, welcheInstanz den Wert hat den du suchst.

Aber warum benutzt du nicht einfach eine ArrayList für beide UserControls? Dort kannst du auch auf die Objekte über einen Index zugreifen.. nur casten musst du diese dann noch.



michback20:
Zeig doch mal den Code :)
 
Man kann zusätzlich natürlich die Referenzen auch mitspeichern.

Entweder in einem Array oder einer Collection, was ich Favorisieren würde, aber jetzt nicht genau hinschreiben kann wie es aussehen muss. Wahrscheinlich über die implementierung einer Hilfsklasse für die Collection.

Deklaration
Code:
static int m_iCounter = 0;
static UserControlClass[] m_ucControls;
int m_iID = 0;

Im Konstruktor
Code:
m_iCounter++;
m_iID = m_iCounter;
UserControl[m_iID] = this;
 
Hallo alle zusammen,

Ich habe mein Problem mit der Adressierung gelöst. Bei jedem Klick auf meine Schaltfläche wird eine neue Instanz des UCs geöffnet und jedes UC hat nun eine eigene Nummer. Vielen Dank für die qualitativen und zahlreichen Antworten.

Allerdings habe ich nun ein neues Problem, was ich vorher nicht beachtet habe:
Diese UCs sollen verschiebbar sein, das habe ich mit "MouseDown, MouseMove und MoveUp" gelöst. Sie sollen aber auch einfach nur anklickbar sein, um einzelne UCs zu selektieren. Mein Problem ist jetzt, daß nicht zwischen "MouseClick" und "MouseDown+MouseUp" unterschieden wird. Bei jedem "MouseDown+MouseUp" wird auch gleichzeitig das Event MouseClick mit ausgelöst.

Kennt sich da jemand mit aus?

MfG

Gerd
 
Ich versteh nicht was das Problem ist. Ob man ein Control nur anklickt oder nur verschiebt, das letzte ausgewählte Control ist doch das angeklickte bzw. das verschobene ?
 
Ich kann nun mehrere UCs erstellen mit verschiedenen IDs. Diese UCs sollen aber Funktionen haben, zum einen selektierbar und Verschiebbar sein. Wenn ich jetzt auf eines der UCs klicke und gedrückt halte (MouseDown) kann ich es verschieben (MouseMove). Wenn ich es dann an der gewünschten Position loslasse(MouseUp) wird gleichzeitig auch das MouseClick Event ausgelöst, da MouseDown+MouseUp wie ein Mouseklick interpretiert wird.
 
Wenn kein Click-Event gesetzt ist, passiert da ja auch nichts. Ist eines gesetzt, dann setz eine temporäre Variable, die auf true gesetzt wird, wenns ein MouseMove gegeben hat. Sprich beim MouseDown setzt sie auf falsch, bei MouseDown+MouseMove auf true und im MouseClick springst darüber ... Oder du gehst über die Änderung der Location des Controls.

Es gibt da einige Möglichkeiten.
 
Hallo Norbert,

dein Tipp hat prima geklappt, das Klick Event jetzt nur noch ausgeführt, wenn MouseMove nicht angesprochen wird.

Wie würde das denn beim Doppelklick funktionieren? Dort wird doch immer auch die Click aufgerufen, wenn man eigentlich den Doppelklick haben will. Hier hab ich ja nicht mehr die Möglichkeit, das über MouseMove und MouseUp zu regeln.

MfG

Gerd
 
Zurück