textField darf nicht leer sein - Cocoa Applescript Application

MichaHo

MichaHo

Aktives Mitglied
Thread Starter
Dabei seit
09.11.2010
Beiträge
121
Reaktionspunkte
8
Hallo,

falls ich hier falsch bin, bitte verschieben.

Ich arbeite gerade an einer kleinen App, die Netzlaufwerke verbindet (nur für den Hausgebrauch).

Jetzt habe ich unter anderem ein Secure TextField um das Kennwort einzugeben.

Ich habe eine Action erstellt, die abfragt ob das Feld Inhalt hat, oder leer ist. Ist das Feld leer, soll ein Hinweis kommen, ist das Feld gefüllt, soll ein Button enabled werden.

mein Code sieht so aus:

Code:
on btnCheckPass_(sender)
        set myPass to thePass's stringValue
        if myPass is "" then
            display dialog "Bitte Kennwort eingeben!"
        else
            btnMount's setEnabled:true
        end if
end btnCheckPass_

der Code ist mit dem SecureTextField verknüpft und wird ausgelöst, wenn in dem Feld Enter gedrückt wird.

Aber egal ob das Feld leer ist oder gefüllt, es springt IMMER in den Else Zweig.

Es steht in dem SecureTextField aber definitiv NICHTS drinn, auch kein Leerzeichen.

schreibe ich den Code im Applescript Editor, dann klappt es wunderbar, warum nicht in meiner Cocoa Applescript Application?

Kann der Inhalt eines SecureTextFiled nicht ausgelesen werden?

Wenn ich die Prüfung weg lasse und weise der Variable myPass den Inhalt des Textfeldes zu und lasse dann die Laufwerke verbinden, werden die Laufwerke mit dem Passwort aus myPass verbunden, also MUSS der Inhalt doch abgefragt werden können.

Ich glaub ich steh aufm Schlauch.

Hat jemand einen Tip für mich?

Vielen Dank

Grüße

Micha
 
Hallo,

… is equal to … bzw. besser length of text < 1

Viele Grüße
 
Hallo littl_pixel,

danke für die Antwort.

irgendwie bekomme ich es nicht hin :-(

Code:
on btnCheckPass_(sender)
        set myPass to thePass's stringValue
        if lenght of myPass is < 1 then
            display dialog "Bitte Kennwort eingeben!"
        else
            btnMount's setEnabled:true
        end if
    end btnCheckPass_

hab mehrere Varianten probiert, der Build schlägt immer fehl und markiert mir die Zeile

Code:
if lenght of myPass < 1 then

Ich glaub ich hab gerade den größeren RaffNix....

Kannst Du mir nochmal auf die Sprünge helfen?

Vielen Dank

Grüße

Micha
 
length richtig schreiben? ;)
oder hast das nicht aus dem editor kopiert?
 
Hi,

hab ich mich doch vertippt :eek:

klappt aber leider trotzdem nicht....

Code:
on btnCheckPass_(sender)
        set myPass to thePass's stringValue
        if length of myPass is < 1 then
            display dialog "Bitte Kennwort eingeben!"
        else
            btnMount's setEnabled:true
        end if
    end btnCheckPass_

Grüße

Micha
 
Hallo,

mit less than 1 gibt es keinen Build Fehler und die App wird gestartet, aber wenn ich dann im TextFeld Enter drücke, erhalte ich den Fehler "Can’t get length of «class ocid» id «data optr0000000058478374FF7F0000». (error -1728)"
 
versuch es mal mit
length of text of myPass
 
nutzt leider auch nix... dann heisst die Fehlermeldung "Can’t get length of every text of «class ocid» id «data optr0000000058478374FF7F0000». (error -1728)"

ich werd bekloppt....

ich habs auch mit if myPass is equal to "" Then probiert, dann springt er mir direkt wieder in den Else zweig.

Kann es sein das der Inhalt des SecureTextfield nicht so richtig gelesen werden kann??
 
was ist denn, wenn du
set myPass to thePass's stringValue() as text
probierst?
 
Hallo MichaHo,

ist kein Passwort nicht Missing Value oder NULL?

Gruß Andi
 
Ich würde einfach mal die Variable ausgeben lassen. In #3 und #5 ist bei der if-Abfrage das "is" zuviel.
 
Hallo,

mit as text funktioniert es nun....

eine Frage habe ich aber noch.... wenn nun in das Feld nix eingegeben wird und der Hinweis kommt, springt der Cursor trotzdem ins nächste feld. wie kann ich das gleiche Feld wieder aktivieren?
 
Hallo Pill,

das komische ist, wenn ich mir die Variable ausgeben lasse erhalte ich genau das was ich erwarte nämlich "leer".

mit dem Hinweis "as text" klappt es nun einwandfrei.
 
Hallo,

hier noch einmal der Code, der jetzt so funktioniert wie ich es haben wollte:

Code:
on btnCheckPass_(sender)
        set myPass to thePass's stringValue() as text
        if length of myPass is less than 1 then
            display dialog "Bitte Kennwort eingeben!"
            btnMount's setEnabled:false
        else
            btnMount's setEnabled:true
        end if
    end btnCheckPass_

wie setze ich jetzt den cursor wieder in das feld wenn myPass leer ist?

Vielen Dank

Grüße

Micha
 
ich hab es jetzt so gelöst, das ich das Kennwort Feld ans Ende gestellt habe und das Attribut "nextKeyView" nicht gesetzt habe. Somit ist nach Enter oder Tab immer das Kennwort Feld aktiviert.

Ist das Kennwort Feld leer, wird das Textfeld ausgeblendet, ein Label mit Hinweis eingeblendet und nach einem delay 1.5 wird das Label wieder aus und das Textfeld wieder eingeblendet....

der Button zum Verbinden wird erst eingeblendet, wenn das Kennwort Feld gefüllt wurde. durch das Attribut "KeyEquivalent" und einem Enter ist der Button dann auch blau unterlegt und flimmert (oder blinkt leicht).

Das ist dann soweit für mich OK.

der Code für das Kennwort Feld sieht jetzt so aus:

Code:
[FONT="Verdana"][size=2][b]on[/b] [color=#3F7F00]btnCheckPass[/color]:[color=#3F7F00]sender[/color]
	[b]set[/b] [color=#3F7F00]myPass[/color] [b]to[/b] [color=#3F7F00]thePass's[/color] [color=#3F7F00]stringValue[/color]() [b]as[/b] [color=#0000FF][i]text[/i][/color]
	[b]if[/b] [color=#6C04D4]length[/color] [b]of[/b] [color=#3F7F00]myPass[/color] [b]is[/b] [b]less than[/b] 1 [b]then[/b]
		[color=#3F7F00]btnMount's[/color] [color=#3F7F00]setHidden[/color]:[color=#6C04D4][i]true[/i][/color]
		[color=#3F7F00]thePass's[/color] [color=#3F7F00]setHidden[/color]:[color=#6C04D4][i]true[/i][/color]
		[color=#3F7F00]pwdLabel's[/color] [color=#3F7F00]setHidden[/color]:[color=#6C04D4][i]false[/i][/color]
		[color=#0000FF][b]delay[/b][/color] 1.5
		[color=#3F7F00]pwdLabel's[/color] [color=#3F7F00]setHidden[/color]:[color=#6C04D4][i]true[/i][/color]
		[color=#3F7F00]thePass's[/color] [color=#3F7F00]setHidden[/color]:[color=#6C04D4][i]false[/i][/color]
	[b]else[/b]
		[color=#3F7F00]btnMount's[/color] [color=#3F7F00]setHidden[/color]:[color=#6C04D4][i]false[/i][/color]
	[b]end[/b] [b]if[/b]
[b]end[/b] [color=#3F7F00]btnCheckPass[/color]:[/size][/FONT]

jetzt muss ich nur noch das Problem beheben, das wenn das Volume nicht über smb gemountet werden kann, sondern nur ftp oder afp, das dann entweder ein Hinweis kommt, oder alternativ gemountet wird.

Aber dazu melde ich mich dann ggf. noch mal.

Danke an alle die geholfen haben.

Grüße

Micha
 
Zurück
Oben Unten