Jump to content

Empfohlene Beiträge

Geschrieben

Hallo,

 

ich mal wieder...  Ob meine Frage jetzt den Sinn schlechthin macht oder nicht, das sei einmal dahin gestellt. Was ich nur möchte, ist die Variable A in einem Textfeld anzuzeigen. Die Übergabe als solche klappt ja, aber das Textfeld bleibt leer. Was mache ich da falsch?

 

Gruß,

Michael

A wird nicht angezeigt.mbp

Geschrieben (bearbeitet)
vor 1 Stunde schrieb m.weber:

Was mache ich da falsch?

Deine Variable enthält das Fahrzeug, nicht den Fahrzeugnamen.

Das Fahrzeug ist die Objektreferenz. Sozusagen eine für uns unsichtbare Identifikationsnummer dieses Objekts auf der Anlage. Uns wird zwar der Name des Objekts angezeigt (weil wir bei der Nummer überhaupt nicht wissen würden, welches Objekt damit gemeint ist) aber den Namen bekommst du nur mit Fahrzeug.Name (so, wie du es beim oberen Textfeld machst.)

Deine Variablen sind ebenfalls für Objekte bestimmt. Du benötigst aber eine Variable für Text (weil der Name eines Objekts ein Text ist.)

Außerdem würde eine Variable reichen. Mit den zwei Variablen machst du nur zweimal denselben Fehler.

Lokname wird jetzt angezeigt.mbp

Bearbeitet von Goetz
Schreibfehler verbessert
Geschrieben

Hallo Goetz,

das mit den Variablen, ok, das denke ich, habe ich verstanden.

Aber mein Deutschlehrer hätte jetzt gesagt: Thema verfehlt, denn die eigentliche Frage war ja, warum "A" nicht angezeigt wird, wo da der Fehler liegt.

"A" hat ja den Inhalt übernommen, das zeigt ja die Ereignis-Protokollierung ganz klipp und klar. Nur angezeigt wird er nichtFehler.thumb.JPG.1bc2905cfacaa529a9758c6b3c8650de.JPG

 

Und wo hier der Fehler liegt, DAS war die Frage.

 

Gruß,

Michael

Geschrieben (bearbeitet)
vor 22 Minuten schrieb m.weber:

DAS war die Frage.

Und die Frage habe ich dir beantwortet. Du hast die Antwort nur noch nicht richtig interpretiert.

Dein A enthielt keinen Text, sondern eine Objektreferenz. Und etwas anderes als Text kann das Beschriftungsfeld nicht anzeigen.

Bearbeitet von Goetz
Geschrieben (bearbeitet)

Hmm,

 

gemäß der Ereignis-Protokollierung hat "A" den Inhalt "V200". Und genau  diesen will ich zur Anzeige bringen.

Protokollanzeige.JPG

Was steht denn sonst Deiner Ansicht nach in "A" ?

Bearbeitet von m.weber
Geschrieben (bearbeitet)
vor 7 Minuten schrieb m.weber:

gemäß der Ereignis-Protokollierung hat "A" den Inhalt "V200"

Bitte, lies meine Erklärung oben noch einmal aufmerksam und Wort für Wort durch.

Ach - warte. Ich schreibe es einfach noch einmal und in etwas anderen Worten:

Deine Variable enthält eine Referenz zum Objekt V200. Diese Referenz wird als V200 angezeigt, weil die EV dir nichts anderes zeigen kann. Mit einer kryptischen Nummer wäre dir ja nicht gedient. Aber das, was da in der Variablen gespeichert ist, ist kein Text!

Objektreferenz.jpg.e9ac0f84a09f19ef49a06f074408bc5e.jpg

Hier siehst du es deutlicher als in der Ereignisprotokollierung.

 

Bearbeitet von Goetz
Geschrieben (bearbeitet)

ok, kapiert, aber wie löse ich das Problem? Wie bekomme ich den Namen der Lok in die Variable A?

Früher konnte ich das wunderbar mit dem Trigger lösen. Wenn die Lok "Dresden" hieß,  konnte ich wunderbar in der Bahnhofsanzeige anzeigen: Es läuft ein der Eilzug aus Dresden.

 

Und nun? Wie jetzt? Das ist die Kernfrage. Wie kann ich aus dem Objekt einen text machen?

Bearbeitet von m.weber
Geschrieben (bearbeitet)
vor 12 Minuten schrieb m.weber:

aber wie löse ich das Problem?

Hast du meinen Lösungsvorschlag nicht gelesen?

vor einer Stunde schrieb Goetz:

so, wie du es beim oberen Textfeld machst.

Hast du dir die angefügte Anlage mit dem Lösungsvorschlag nicht angesehen?

Das hier ist die entscheidende Änderung:

1823782071_LoknameinVariable.thumb.jpg.7119f89d8768f5fc1d8a2a455eb3cfb7.jpg

Ich habe dafür deine Variable "Lokname" benutzt und diese an das Textfeld übergeben.

Ebenso gut hätte ich die Variable A nehmen können.

Oder unnötigerweise den Text noch einmal von "Lokname" nach "A" übertragen können ...

 

(Und jetzt schau ich mir mal dein "Jetzt hab ich's" an …)

 

Nachtrag:

Ja, jetzt hast du's. Du nutzt nur immer noch zwei Variablen, obwohl du nur eine benötigst.
In A speicherst du eine exakte Kopie von dem, was in Lokname steht. Das bringt dir nichts.

 

Bearbeitet von Goetz
Geschrieben (bearbeitet)
vor 3 Minuten schrieb Goetz:

 

Oder unnötigerweise den Text noch einmal von "Lokname" nach "A" übertragen können ...

Aber genau das war ja die Aufgabe... übertragen und anzeigen, nicht mehr und nicht weniger

 

Deine Wege sind sicherlich schneller  und genialer...

Bearbeitet von m.weber
Geschrieben
vor 1 Minute schrieb m.weber:

übertragen und anzeigen

Ja - aber nicht zweimal übertragen und dann anzeigen.

Ich übertrage den Loknamen doch auch in eine Variable und zeige dann den Inhalt dieser Variablen an.

 

Geschrieben
vor 7 Minuten schrieb Goetz:

 

Nachtrag:
In A speicherst du eine exakte Kopie von dem, was in Lokname steht. Das bringt dir nichts.

 

Es mag ja nichts bringen, aber ICH wollte es.

 

Trotzdem DANKE für Deine Geduld und Mühe

Geschrieben
Gerade eben schrieb m.weber:

Es mag ja nichts bringen

Wenn du verstehst, dass es nichts bringt und warum es nichts bringt, dann bringt das was:
Nämlich ein besseres Verständnis für die Materie. Und das ist doch der eigentliche Sinn der Übung. ;)

Geschrieben

Hallo,

vor 5 Stunden schrieb m.weber:

Früher konnte ich das wunderbar mit dem Trigger lösen.

nochmal der Vollständigkeit halber der Hinweis, dass sich V5 in dieser Hinsicht nicht von V4 unterscheidet:

Um in V4 den Namen der Lok in eine Variable zu schreiben musstest du den Ausdruck $_Trigger1._Name für "Variable setzen" verwenden. Jetzt in V5 wählst du als Objekt das auslösende Fahrzeug und als Eigenschaft den Namen.

Es hat sich also lediglich die Art der Eingabe geändert. Statt einer Textzeile (auf die kein Einsteiger von alleine kommt) kann man nun in V5 mit wenigen Mausklicks das gleiche erreichen.

Viele Grüße,

Neo

Geschrieben
vor 17 Stunden schrieb Goetz:

Wenn du verstehst, dass es nichts bringt und warum es nichts bringt, dann bringt das was:
Nämlich ein besseres Verständnis für die Materie. Und das ist doch der eigentliche Sinn der Übung. ;)

Ob es was bringt, liegt im Auge des Betrachters. In diesem speziellen Fall bringt es nichts, das ist richtig, aber wie Du schon bemerkst: es geht darum, das Prinzip zu verstehen.

Und mal davon ab, ich kann mir durchaus Fälle vorstellen, in denen es durchaus Sinn macht, den Loknamen in einer Variablen zwischen zuspeichern.

Geschrieben

Hallo Michael,

bis zur V4 waren bei Objektvaribalen die Objekt-Namen das A & O. Denn es gab keine andere Möglichkeit, ein Objekt zu identifizieren und zu adressieren. Hierfür mussten aber die Objekt-Namen eindeutig sein, damit für das Modellbahn-Studio überhaupt eine Identifizierung des Objekts über den Namen möglich war.

Seit V5 kann man aber in der Objektvariable das Objekt selbst (Variable vom Typ Objekt) hinterlegen. Damit ist man auch dann "auf der sicheren Seite", wenn man denselben Objektnamen (sei es absichtlich oder versehentlich) mehrfach verwendet hat. Der Objekt-Name ist beispielsweise dann notwendig, wenn man ihn als Text ausgeben möchte (z.B. in einem Beschriftungs-Objekt). Hierfür kann man ihn aber auch direkt als Eigenschaft des Objekts auslesen, ohne ihn in einer separaten Variable zwischengespeichert haben zu müssen (Objektvariable adressiert das Objekt, Name ist Eigenschaft des adressierten Objekts).

Objekt-Name.jpg.176987788e378f6b2fc57c47ce7cb60d.jpg

Viele Grüße
BahnLand

Geschrieben
vor einer Stunde schrieb m.weber:

ich kann mir durchaus Fälle vorstellen, in denen es durchaus Sinn macht, den Loknamen in einer Variablen zwischen zuspeichern.

Es gibt sogar sehr viele Fälle, in denen das sinnvoll ist.

Aber du speicherst denselben Namen in zwei Variablen zwischen. Erst in Ereignisse.Lokname und dann eine Kopie davon in Ereignisse.A.
Das ist weniger sinnvoll. Und dir vielleicht auch gar nicht richtig bewusst?

Geschrieben
vor 10 Minuten schrieb Goetz:

Aber du speicherst denselben Namen in zwei Variablen zwischen. Erst in Ereignisse.Lokname und dann eine Kopie davon in Ereignisse.A.
Das ist weniger sinnvoll. Und dir vielleicht auch gar nicht richtig bewusst?

Ja, das stimmt schon mit der Doppelbezeichnung. Mein Gedanke ist, daß ich den Namen nicht überschrieben bekomme, wenn ich zB an anderer Stelle ebenso den Loknamen abfrage, ihn aber an anderer Stelle weiter verwenden will. Deshalb die Zwischenspeicherung... (oder bin ich jetzt vollkommen gaga und es geht viel einfacher? grübel...)

Geschrieben
vor 1 Stunde schrieb m.weber:

es geht viel einfacher?

Ja, geht es.

Denn wenn du einmal die Variable ausgelesen und den Text an das Beschriftungsfeld übergeben hast, dann ist die Variable doch wieder frei für andere Zwecke. Das Beschriftungsfeld hat keine permanente Verbindung zur Variablen A.

Geschrieben

Ja Goetz, in diesem Fall ja, aber die eigentliche Anwendung hinter der Variablensicherung war, daß ich die Variable für einen Sound kurz vor der Zugeinfahrt als Bahnhofsdurchsage verwenden will. Und in der Zeit könnte sie durch einen anderen Zug irgendwo auf der Anlage in einem irgend einem anderen Bahnhof überschrieben worden sein. Daher also der Wunsch nach einer Sicherung.

Wie dem auch sei, ich weiß jetzt (und habe verstanden), wie es geht. Problem gelöst :)

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto besitzen, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen.

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...