removeTextField() removed nicht

daflowjoe

Mitglied
Hi,

Ich will ein attachtes Textfeld und einen Movieclip von der Bühne verschwinden lassen.
Das entfernen des Movieclips klappt wunderbar. Allderdings macht removeTextField() noch diverse Probleme.

Ich benutze folgende Routine um das Textfeld und den Movieclip zu attachen:

Code:
var abstand = 0;
		for( var i = 0; i < monat_ges[year_index].length ; i++)
		{
			movieclip[i] = "monat"+i+"_mc";
			_root.attachMovie("quad", movieclip[i], 300+1+i);
			_root[movieclip[i]]._x = diagram_startx + abstand;
			_root[movieclip[i]]._height = (monat_ges[year_index][i]) * diagram_height / (scale*5);
			_root[movieclip[i]]._width = balkenbreite;
			_root[movieclip[i]]._y = diagram_starty - _root[movieclip[i]]._height;
			abstand = mc_abstand*(i+1);
			bezeichnung[i] = "monat"+i+"_txt";
			_root.createTextField(bezeichnung[i], 200+i, _root[movieclip[i]]._x, diagram_starty, 300, 100);
			_root[bezeichnung[i]].text = monat_besch[year_index][i];	
		}

und folgenden zum löschen
Code:
on(release)
{
		for( var a = 0; a < 100; a++)
		{
			movieclip[a] = "jahr"+a+"_mc";
			bezeichnung[a] = "jahr"+a+"_txt";
			_root[movieclip[a]].unloadMovie();
			_root[bezeichnung[a]].removeTextField();
		}

}

Wie gesagt, das Problem ist, dass nur der Movieclip verschwindet, was ich mir irgendwie nicht erklären kann.

Jemand eine Idee, woran das liegen kann?

Vielen Dank schonmal im Vorraus.

MFG Joe
 
Hi,

bist Du auch sicher, dass
Code:
_root[bezeichnung[a]]
auf eine gültige Textfeldinstanz verweist (lass Dir die Referenz mal per trace() ausgeben)?

Ansonsten: Warum packst Du das Textfeld nicht einfach in den MovieClip - dann wärst Du es beim Aufruf von removeMovieClip gleich mit los. ;)

Gruß
.
 
Also bei dem Trace kommt nur undefined raus.

So wie es aussieht verweist es auf kein gültiges Textfeld. Ich verstehe nur nicht warum! Der Movieclip lässt sich doch auch erfolgreich aus der anderen Instanz ansprechen, welcher ja dem gleichen Prinzip unterliegt!?

Wie meinst du das ich soll das Textfeld in den Movieclip packen?

Meinst Du :

Code:
_root.movieclip[i].createTextField(bezeichnung[i], 200+i, _root[movieclip[i]]._x, diagram_starty, 300, 100);

MFG Joe
 
Hi,

vielleicht ist "bezeichnung" eine lokale Variable einer Funktion, die zum Zeitpunkt des Löschens nicht mehr existiert? Ohne die Quelldatei zu sehen, kann ich nur raten.

Das Hineinpacken in den MC hätte auch den Vorteil, dass alle Textfelder den selben Instanznamen, die selbe Tiefe und die selbe Position bekommen könnten:
Code:
_root.movieclip[i].createTextField("inhalt" , 0, 0, diagram_starty, 300, 100);

Gruß
.
 
Das Anhängen an den Movieclips funktioniert nicht. In dem Quellcode steht das bezeichnung[x] bzw movieclip[x] für diverse Strings z.B. "jahr1_txt". Die Variablen werden dann bei jedem Schleifenaufruf dementsprechend belegt.

Damit der String auch für das Ansprechen der Variable genutzt werden kann benutze ich:
Code:
_root.[bezeichnung[x]].text = "Text";
anstatt
Code:
_root.bezeichnung[x].text = "Text";

Das funktioniert auch soweit ganz gut. Allderdings nicht in dieser Form:

Code:
_root.[movieclip[x]][bezeichnung[x]].text = "Text";

Weiß aber auch nicht wie ich da jetzt eine Instanz mit dem "Array-String" ansprechen kann?!

Ansonsten hier mal der Quelltext der betreffenden Funktion(das Laden der XML-Datei hab ich mal weggelassen):
Code:
var h1 = "Bitte wählen sie ein Diagramm";
_root.createTextField("h1_txt", 1, 350, 120 , 600, 40);
_root.h1_txt.html = true;
_root.h1_txt.htmlText = "<font size='24' color='#165454'>"+_root.h1+"</font>";

/* ----------------------------------------------BEGINN JAHR ----------------------------------------------------- */

//Standard: alle Jahre abbilden
jahr_btn.onRelease = function(){
var starten = show_jahr(0);
	}
function show_jahr(sort)
{	
	_root.diagram = "jahr";
	_root.jahr_desc = sort;
	_root.h1 = "           Jahresübersicht";
	_root.h1_txt.htmlText = "<font size='24' color='#165454'>"+_root.h1+"</font>";
	
	var daten = new Array();
	var jahr_ges = new Array();
	var monat_ges = new Array();
	var tag_ges = new Array();
	var stunde = new Array();
	
	var jahr_besch = new Array();
	var monat_besch = new Array();
	var tag_besch = new Array();
	var stunde_besch = new Array();
	
/* -----------------------------------------------------DATEN auslesen ----------------------------------*/
	for(var jahr = 0; jahr < XMLdaten.firstChild.childNodes.length; jahr++)
	{
		daten[jahr] = new Array();		//jahr schleife			
		jahr_besch[jahr] = XMLdaten.firstChild.childNodes[jahr].attributes.datum;
							
		for(var monat= 0; monat < XMLdaten.firstChild.childNodes[jahr].childNodes.length; monat++)
		{	
			monat_besch[monat] = XMLdaten.firstChild.childNodes[jahr].childNodes[monat].attributes.nr;
			daten[jahr][monat] = new Array();	//monats schleife
			for(var tag= 0; tag < XMLdaten.firstChild.childNodes[jahr].childNodes[monat].childNodes.length; tag++)
			{
				tag_besch[tag] = monat_besch[monat] = XMLdaten.firstChild.childNodes[jahr].childNodes[monat].childNodes[Tag].attributes.nr;
				daten[jahr][monat][tag] = new Array(); //tag schleife
				for(var stunde= 0; stunde < XMLdaten.firstChild.childNodes[jahr].childNodes[monat].childNodes[tag].childNodes.length; stunde++)
				{
					daten[jahr][monat][tag][stunde] = XMLdaten.firstChild.childNodes[jahr].childNodes[monat].childNodes[tag].childNodes[stunde].attributes.hits;
					// Datenaufbereitung --
					jahr_ges[jahr] = Number(jahr_ges[jahr]) + Number(daten[jahr][monat][tag][stunde]);
				}
			}
		}
		//trace(jahr_ges[jahr]);
		//trace(jahr_ges.length);
	}

	var diagram_starty = 515;
	var diagram_startx = 250;
	
	var skala_startx = 150;
	var skala_starty = diagram_starty-8;
	var skala_margin = 60;
	
	var diagram_height = 300;
	var maximum = 0;
	var mc_abstand = 40;
	
	movieclip[i] = new Array();
	var bezeichnung = new Array();

	
	for ( z = 0; z< jahr_ges.length; z++)
	{
		maximum = Math.max(jahr_ges[z], maximum);
	}
	length_maximum = length(maximum) - 1;
	rounded = (Math.round(maximum / Math.pow(10, length_maximum ))+1) * Math.pow(10, length_maximum );
	var div = Math.round(maximum / Math.pow(10, length_maximum ))+1;
	var scale = (rounded/div);
	var differenz = scale*5 - maximum;
	var tiefe = 600;
	
	if(_root.jahr_desc == 1)
	{
		abstand = 0;
		for( var h = jahr_ges.length-1; h >= 0 ; h--)
		{	
			movieclip[h] = "jahr"+h+"_mc";
			tiefe++;
			_root.attachMovie("quad", movieclip[h],tiefe);
			_root[movieclip[h]]._x = diagram_startx + abstand;
			_root[movieclip[h]]._height = (jahr_ges[h]) * diagram_height / (scale*5);
			_root[movieclip[h]]._width = 100;
			_root[movieclip[h]]._y = diagram_starty - _root[movieclip[h]]._height;
			
			abstand = abstand + mc_abstand + 100;
			bezeichnung[h] = "jahr"+h+"_txt";
			tiefe++;
			_root[movieclip[h]].createTextField(bezeichnung[h], tiefe, _root[movieclip[h]]._x, diagram_starty, 300, 100);
			_root[movieclip[h]].bezeichnung[h].text = jahr_besch[h];	
		}
	}
	else
	{	abstand = 0;
		for( var i = 0; i < jahr_ges.length ; i++)
		{
			tiefe++;
			movieclip[i] = "jahr"+i+"_mc";
			_root.attachMovie("quad", movieclip[i], tiefe);
			_root[movieclip[i]]._x = diagram_startx + abstand;
			_root[movieclip[i]]._height = (jahr_ges[i]) * diagram_height / (scale*5);
			_root[movieclip[i]]._width = 100;
			_root[movieclip[i]]._y = diagram_starty - _root[movieclip[i]]._height;
			abstand = (abstand + mc_abstand+ 100);
			bezeichnung[i] = "jahr"+i+"_txt";
			tiefe++;
			_root[movieclip[i]].createTextField(bezeichnung[i], tiefe, _root[movieclip[i]]._x, diagram_starty, 300, 100);
			_root[movieclip[i]].bezeichnung[i].text = jahr_besch[i];	
		}
	}
	
		
	var skala_wert5 = scale*5;
	_root.createTextField("skala5_txt", 44, skala_startx, skala_starty - skala_margin*5 , 300, 100);
	skala5_txt.text = skala_wert5;
	
	var skala_wert4 = scale*4;
	_root.createTextField("skala4_txt", 43, skala_startx, skala_starty - skala_margin*4 , 300, 100);
	skala4_txt.text = skala_wert4;
	
	var skala_wert3 = scale*3;
	_root.createTextField("skala3_txt", 42, skala_startx, skala_starty - skala_margin*3, 300, 100);
	skala3_txt.text = skala_wert3;
	
	var skala_wert2 = scale*2;
	_root.createTextField("skala2_txt", 41, skala_startx,skala_starty - skala_margin*2, 300, 100);
	skala2_txt.text = skala_wert2;
	
	var skala_wert1 = scale;
	_root.createTextField("skala1_txt", 40, skala_startx, skala_starty - skala_margin, 300, 100);
	skala1_txt.text = skala_wert1;
	
}

und der button:
Code:
on(release)
{
		for( var a = 0; a < 100; a++)
		{
			movieclip[a] = "jahr"+a+"_mc";
			bezeichnung[a] = "jahr"+a+"_txt";
			_root[movieclip[a]].unloadMovie();
			_root[bezeichnung[a]].removeTextField();
			trace(_root[bezeichnung[a]].text = "0");
		}

}
Vielen Dank schonmal im Vorraus.

MFG Joe
 
Zuletzt bearbeitet:
Hi,

soweit ich das sehe, ist "bezeichnung" ein lokales Array der Funktion "show_jahr" und daher zum Zeitpunkt des Buttonklicks nicht mehr verfügbar. Lege das Array als Zeitleistenvariable an.

Übrigens: So etwas:
Code:
_root.[bezeichnung[x]].text = "Text";
dürfte auch nicht funktionieren - der Punkt hinter _root muss entfernt werden.

Gruß
.
 
Funktioniert auch nicht. Außerdem ist das Array bei der onRelease Funktion das gleiche. Es werden ja in den beiden Funktionen die Bezeichnungen neuinitialisiert.

Die Bezeichnungen sind da also die Textfeldnamen, falls das nicht durchgekommen sein sollte. Von daher ist der Inhalt dieser Variablen der gleiche. Ein ändern der Instanz führte daher leider nicht zum Erfolg.

Ich verstehe nur nicht, warum die generierten Textfeld mit den Namen jahr1_txt, jahr2_txt usw. ansprechbar sind.

Ich vermute, dass es irgendein Problem gibt mit den generierten Textfeldnamen. Nur weiss ich nicht wie das anders lösen könnte, da die Anzahl derren eben Variablen ist.


Mit freundlichen Grüßen

Joe
 
Zurück