Numerische Kontrollfelder leeren ?

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

der.milco
***
Beiträge: 51
Registriert: Mo, 07.11.2005 16:44

Numerische Kontrollfelder leeren ?

Beitrag von der.milco »

Hallo an alle,

ich habe ein Dokument mit verschiedenen Kontrollfeldern erstellt: Textfelder, Listenfelder, Komboboxen und auch Numerische Felder.
Nachdem ich in alle Felder etwas eingeben habe, möchte ich per Makro-Schaltfläche alle Felder leeren, also die Inhalte löschen.

Bei Text-, Listen- und Kombofeldern gelingt mir das auch prima. Aber die Numerischen Felder bekomme ich nicht komplett leer.
Ich schaffe es immer nur eine "0" einzutragen. Die Felder sollen aber gar nichts enthalten. Geht das irgendwie?

Mein bisheriger Code an diese Stelle sieht so aus:

Code: Alles auswählen

NumField.value = 0
Habe es schon ohne die "0" versucht: Fehlermeldung.
Habe es statt der "0" mit Anführungszeichen [""] wie bei Textfeldern versucht: Fehlermeldung.
Habe statt "value = 0" erstetzt durch "text = "" ": Fehlermeldung
Dann war da noch dispose(): Feld selbst wird gelöscht und Programm stürzt ab.

In den Eigenschaften kann ich als Standard-Wert einfach nichts eintragen (sieht dann genau so aus, wie ich es gerne hätte) und er meckert nicht. Könnte ich also, wenn das andere nicht geht per Makro auf die Standardwerte zurücksetzen?

Hat jemand nen Tipp??
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Numerische Kontrollfelder leeren ?

Beitrag von komma4 »

Die Felder sollen aber gar nichts enthalten. Geht das irgendwie?

Code: Alles auswählen

NumField.Model.Text = ""
Hilft das?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
der.milco
***
Beiträge: 51
Registriert: Mo, 07.11.2005 16:44

Re: Numerische Kontrollfelder leeren ?

Beitrag von der.milco »

komma4 hat geschrieben:Hilft das?
Leider nicht :-(
Fehlermeldung: "BASIC-Laufzeitfehler. Eigenschaft oder Methode nicht gefunden."

-----------------------
Ist übrigens ne Calc-Tabelle unter OpenOffice 2.2
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Numerische Kontrollfelder leeren ?

Beitrag von komma4 »

Habe nachgeschaut und getestet (NumField.Model.Text war aus'm Kopf und falsch):

Code: Alles auswählen

oNF = oDialog.getControl("NumericField1")
oNF.text = ""
funktioniert hier (2.3.0/Linux).

Teste selbst mit Xray, ob Du an der Stelle noch das Objekt im Speicher hast.
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Numerische Kontrollfelder leeren ?

Beitrag von turtle47 »

Hallo Zusammen,

wenn ich richtig gelesen habe es geht hier um ein NumericField in einem Tabellenblatt und nicht in einem Dialog.
der.milco hat geschrieben:Dann war da noch dispose(): Feld selbst wird gelöscht und Programm stürzt ab.
Kann ich nicht bestätigen.

Für ein NumericField in einem Tabellenblatt funktioniert bei mir folgender Code:

Code: Alles auswählen

Sub EmptyNumericField
	Dim oForms
	oForms = ThisComponent.CurrentController.ActiveSheet.DrawPage.Forms
	vForm=oForms.getByIndex(0)
	NumericField1 = vForm.getByName("NumericalField")
	NumericField1.Value = dispose()
End Sub

Viel Erfolg.

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
der.milco
***
Beiträge: 51
Registriert: Mo, 07.11.2005 16:44

Re: Numerische Kontrollfelder leeren ?

Beitrag von der.milco »

Jetzt hats geklappt. Danke
der.milco
***
Beiträge: 51
Registriert: Mo, 07.11.2005 16:44

Re: Dispose() deklarieren?

Beitrag von der.milco »

Hab doch noch eine Frage dazu:

Ich gebe im Basic-Code am Kopf immer "Option Explicit" ein.
Dafür muss ich aber dispose mit einem "dim" versehen.

Wenn ich das nicht mache kommt die Fehlermeldung:
"BASIC-Laufzeitfehler. Variable nicht definiert"
Wie muss diese Zeile denn aussehen?
Hab schon folgende probiert, ohne Erfolg:

Code: Alles auswählen

Dim dispose()
Dim dispose(0) = 0
Dim dispose() = 0
Danke schon mal


PS: Wie wichtig ist eigentlich "Option Explicit"? Ich mache das immer, weil ich das mal irgendwo gelesen habe...
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Numerische Kontrollfelder leeren ?

Beitrag von Toxitom »

Hey milco,

Hmm, ich glaube, da muss ich mal ein wenig "weiter" ausholen.

Also, zunächst folgendes: ein Numerisches Feld setzt du normalerweise mit der Methode reset() zurück, also auf "nichts".
Richtig wäre also der folgende Code:

Code: Alles auswählen

Sub EmptyNumericField
   Dim oForms
   oForms = ThisComponent.CurrentController.ActiveSheet.DrawPage.Forms
   vForm=oForms.getByIndex(0)
   NumericField1 = vForm.getByName("NumericalField")
   NumericField1.reset()
End Sub
Nun ist es in der Programmierung so wie überall anders - es gibt viele Wege, das Ziel zu erreichen.
Was du da allerdings tust.... ist schon sehr merkwürdig:

Code: Alles auswählen

NumericField1.Value = dispose()
"dispose()" ist eine Methode - und entfernt normalerweise ein Objekt aus dem Speicher - ganz hart, es zerstört also das Objekt!
Eine Methode als Zuweisung für eine Eigenschaft???? Wunderlich, dass da überhaupt etwas herauskommt. Aber OK.

Mit "Option explizit" legst du dir selbst auf, dass alle Variablen vor der ersten Benutzung definiert werden müssen - sonst gibt es einen Laufzeitfehler.
Für das Programm selbst hat das überhaupt keine Auswirkung - lediglich für den Programmierer. Er erkennt nämlich sehr schnell, wenn er sich irgendwo "vertippt" hat und zum Beispiel einen Buchstabendreher in einem Variablennamen erzeugt hat. Das Programm würde jetzt einfach eine weiter Variable eröffnen - und das erwartete Ergebnis wäre dann wahrscheinlich nicht erreichbar.
Also - nur wichtig für den Programmierer, aber dort unbedingt gut!

Damit dürfte auch deine andere Frage erledigt sein: "dispose()" ist keine Variabel, sondern eine Methode, die auf ein Objekt angewendet werden kann. In deinem Fall erwartet der Interpreter aber eine Variable auf der rechten Seite der Zuweisung - und denkt, dass mit "dispose()" ein Variablenname übergeben wird - der ist aber nicht definiert - und kann auch nicht ("belegtes Schlüsselwort").
Du siehst, die Fehler sind vielschichtig - ändere einfach deinen Code.

Viele Grüße
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
der.milco
***
Beiträge: 51
Registriert: Mo, 07.11.2005 16:44

Re: Numerische Kontrollfelder leeren ?

Beitrag von der.milco »

Hallo Toxitom,

zunächst kam der Vorschlag mit dem dispose() von turtle47.
Nachdem ich in einem Selbstversuch sämtliche Kontrollfelder gelöscht hatte, bekomme ich mit dem Code von ihm ein leeres Feld.

Dein Code funktioniert auch. Allerdings setzt er nicht auf "nichts" zurück, wie du geschrieben hast, sondern auf den eingetragenen Standardwert.
Müsste ich denn reset() mit einem dim definieren? Das habe ich bis jetzt noch nicht ausprobiert.

Mein Problem ist zwar nicht weiter tragisch, aber ich bekomm es trotzdem nicht gelöst:
Ich habe ein Formular in einer Calc-Tabelle mit vielen Kontrollfeldern - darunter auch Numerische und Währungsfelder. Im Verlauf einer Funktion wird auf ein anderes Tabellenblatt gewechselt. Wenn ich später wieder zurück wechsle, sind sämtliche Numerische und Währungsfelder, die vorher so schön leer waren mit einer "0" versehen. Das sieht einfach doof aus.
Hast du da nen Tipp?
Gabriel123
***
Beiträge: 65
Registriert: Mo, 14.01.2008 19:31

Re: Numerische Kontrollfelder leeren ?

Beitrag von Gabriel123 »

Hallo=)

muss auch hier mal ein Posting hinterlassen...Habe den Code von Thomas mal versucht aber es passiert genau nichts. Habe das Makro eine Button zugewiesen. Bei Klick müssten die Kontrollfelder leer werden oder ? Oder wird nur der wert in der tabelle leer und ich muss ein reload machen?

Code: Alles auswählen

oForm = thisComponent.drawpage.forms.getByName("gafuform1")
with oform
.getByName("ComboBox").Text =""
.getByName("ComboBox1").Text =""
.getByName("CheckBox").reset()
.getByName("CheckBox1").reset()
.getByName("CheckBox2").reset
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Numerische Kontrollfelder leeren ?

Beitrag von Toxitom »

Hallo Gabriel,

hmm, du kannst natürlich nicht den Code auf jedes Kontrollfeld übertragen! Der bisherige Thread bezog sich nur auf numerische Kontrollfelder, du nutzt aber offensichtlich eine Combo-Box. Die hat natürlich komplett andere Eigenschaften und daher können die genannten Methoden und Properties natürlich nicht funktionieren. Zudem hast du offensichtlich die Kombobox direkt mit dem Tabellenblatt verknüpft - und damit hast du wiederum andere Verhältnisse.

Also: Neuen Thread erzeugen, genau deine Aufgabenstellung schildern und was du erreichen willst - dann können wir dir sicher auch helfen.

Viele grüße
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Gabriel123
***
Beiträge: 65
Registriert: Mo, 14.01.2008 19:31

Re: Numerische Kontrollfelder leeren ?

Beitrag von Gabriel123 »

Hallo Thomas,

ich bin mir nicht ganz sicher ob meine Fragestellung so anders ist. Ich habe eine Checkbox. Die ComoBox zu reseten klappt ohne Probleme! Meine CheckBox ist mit einem Tabellenfeld verknüpft. Zurücksetzen möchte ich lediglich das Checkfeld im Formular, also eigentlich ersteinmal nur optisch. Ein späteres Makro speichert mein ganzes Formular und übergibt auch das Checkfeld an die Tabelle.

Ist das schon einen neuen Thread wert?=)

Grüße
Gabriel
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Numerische Kontrollfelder leeren ?

Beitrag von turtle47 »

Hallo Gabriel,
Gabriel123 hat geschrieben:Zurücksetzen möchte ich lediglich das Checkfeld
??? Ist bei Dir Checkfeld = Checkbox ???

Wenn ja dann versuche mal folgendes:

Code: Alles auswählen

ctl_CheckBox1 = oForm.getByName("CheckBox1")
ctl_CheckBox1.State=0
Ist es das was Du suchst?

Mehr zu Kontrollfeldern findest Du hier.


Viel Erfolg.

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Numerische Kontrollfelder leeren ?

Beitrag von Stephan »

Ist das schon einen neuen Thread wert?=)
ja, natürlich ist es das. Ich werde echt nie verstehen warum das Eröffnen eines neuen Threads immer solange wie möglich hinausgezögert wird, in der Annahme das wäre 'erwünscht' oder 'besser', das Gegenteil ist der Fall - in DEinem Fall ist es nun ganz offensichtlich das die FRage nicht mehr zum bestehenden Thread passt, aber auch in jedem anderen Fall ist es besser im Zweifel immer einen neuen Thread zu eröffnen.


Gruß
Stephan
Gabriel123
***
Beiträge: 65
Registriert: Mo, 14.01.2008 19:31

Re: Numerische Kontrollfelder leeren ?

Beitrag von Gabriel123 »

Danke Jürgen !!

So hat es nun hingehauen! Auch Dein Link ist genau das, was ich gesucht hatte!
Antworten