Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Button nur aktivieren wenn edit Feld eine Eingabe enthält


Purzel90 - Mi 27.02.08 21:45
Titel: Button nur aktivieren wenn edit Feld eine Eingabe enthält
Hallo

Ich habe folgendes Problem:
Ich habe einen Button, der nur Anklickbar sein soll wenn eine Eingabe in einem edit-Feld besteht.

Danke im Vorraus!

--
Gruß Purzel90


jakobwenzel - Mi 27.02.08 21:52

Im Edit gibt ein Eregnis OnChange, das ausgelöst wird, wenn sich der Inhalt ändert.
Mit der Eigenschaft enabled vom Button kannst du einstellen, ob er aktiviert is.
Dann einfach den Inhalt des Edits mit nem Leerstring vergleichen und Enabled zuweisen.


Hidden - Mi 27.02.08 21:56

Hi und :welcome: im Delphi-Forum,

Die Eigenschaft, die du suchst ist Enabled:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.Edit1Change(Sender: TObject);
begin
  if Edit1.Text = '' then
    Button1.Enabled := false;
  else Button1.Enabled := true;
end;

Das ist es im groben.

Edit: Zu langsam...
mfG,


jakobwenzel - Mi 27.02.08 21:59

Nein, bitte nicht so!
Du übergribst deiner if-Bedingung schon einen Boolean-Wert, wozu das if?

Delphi-Quelltext
1:
Button1.Enabled:=not (Edit1.Text = '')                    


Purzel90 - Mi 27.02.08 22:21

Danke für die schnellen Antworten!

--
Gruß Purzel90


Hanni007 - Fr 04.02.11 19:37

Hallo!
Irgendwie klappt das bei mir nicht. Ich verwende gerade Delphi6 aber habe auf dem andren PC noch Delphi7, an dem ich gerade leider nicht ran komme. Naja.

Mein Problem hier konkret ist, dass ich zwei Editfelder habe, die erst, wenn in denen eine Zahl steht, einen Button aktivieren sollen. Dazu habe ich hier diese eingabe versucht.

Button1.Enabled:=not (Edit1.Text = '')

Aber das klappt leider nicht. Könnt ihr mir da bitte weiterhelfen, indem ihr den Befehl exakt aufschreibt? Ich programmiere erst seit kurzem mit Delphi.

Danke! =)
Hanni007


bummi - Fr 04.02.11 19:46


Delphi-Quelltext
1:
Button1.Enabled:=Length(TRIM( (Edit1.Text)) > 0;                    


und schau Dir mal Actions an, die würden sich empfehlen.


Crombo - Fr 04.02.11 19:55

user profile iconbummi hat folgendes geschrieben Zum zitierten Posting springen:

Delphi-Quelltext
1:
Button1.Enabled:=Length(TRIM( (Edit1.Text)) > 0;                    


und schau Dir mal Actions an, die würden sich empfehlen.


Hallo,

nach über 2 Jahren wird ihn das wohl in dem Projekt nicht mehr weiterbringen, aber guter Vorschlag für alle, die jetzt den Thread hier lesen.

Crombo


Hanni007 - Fr 04.02.11 20:02

geht das jetzt nun oder nicht?

Trotzdem schonmal danke! =)


Crombo - Fr 04.02.11 20:10

Der Vorschlag von bummi:

Delphi-Quelltext
1:
Button1.Enabled:=Length(TRIM( (Edit1.Text)) > 0;                    


sollte funktioniert.

Crombo


Hanni007 - Fr 04.02.11 20:13

das geht leider nicht. da kommt ein error auf.

[Error] Unit1.pas(50): Incompatible types: 'String' and 'Integer'


Marc. - Fr 04.02.11 20:15

user profile iconHanni007 hat folgendes geschrieben Zum zitierten Posting springen:
das geht leider nicht. da kommt ein error auf.

[Error] Unit1.pas(50): Incompatible types: 'String' and 'Integer'

Meine Glaskugel ist gerade etwas vernebelt. Zeigst Du ins bitte Deinen Code, denn der Code-Schnippsel sollte definitiv funktionieren.
Alternativ nocheinmal selbst drüber sinnieren. ;)


Crombo - Fr 04.02.11 20:15

Nein der Codeschnipsel funktioniert so eben nicht, weil da ne schließende Klammer fehlt... ;)

Crombo


Hanni007 - Fr 04.02.11 20:18


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure TForm1.Button1Click(Sender: TObject);
var a,b : integer;
begin
a:=StrToInt(Edit1.Text);
b:=StrToInt(Edit2.Text);

Button1.Enabled:=Length(TRIM( (Edit1.Text)) > 0;

Begin
If a+b > 0
        Then Button1.Visible:=false
        Else Button1.Visible:=true;

End;
Randomize;
Label5.Caption:=IntToStr(Random((b)-a+1)+a);
Label6.Caption:=IntToStr(Random((b)-a+1)+a);
Label7.Caption:=IntToStr(Random((b)-a+1)+a);
Label8.Caption:=IntToStr(Random((b)-a+1)+a);
Label9.Caption:=IntToStr(Random((b)-a+1)+a);
end;



so siehts aus.
ein button soll erst sichtbar sein, wenn in beiden editfeldern etwas steht, um dann zufallszahlen auszugeben.

Moderiert von user profile iconMartok: Delphi-Tags gesetzt


Marc. - Fr 04.02.11 20:19

user profile iconCrombo hat folgendes geschrieben Zum zitierten Posting springen:
Nein der Codeschnipsel funktioniert so eben nicht, weil da ne schließende Klammer fehlt... ;)

Indeed. Das habe ich beim zweiten Mal hingucken nun auch gesehen. Ich ging aber davon aus, dass man sowas schon beim Abschreiben merkt.


Hanni007 - Fr 04.02.11 20:19

user profile iconCrombo hat folgendes geschrieben Zum zitierten Posting springen:
Nein der Codeschnipsel funktioniert so eben nicht, weil da ne schließende Klammer fehlt... ;)

Crombo


die klammer hab ich rein gemacht, das programm startet jetzt, aber hat keine auswirkungen.


Crombo - Fr 04.02.11 20:19

user profile iconHanni007 hat folgendes geschrieben Zum zitierten Posting springen:


Button1.Enabled:=Length(TRIM( (Edit1.Text))) > 0;


so siehts aus.
ein button soll erst sichtbar sein, wenn in beiden editfeldern etwas steht, um dann zufallszahlen auszugeben.


Habs rot markiert...

Crombo

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---


Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.Edit1Change(Sender: TObject);
begin
  Button1.Enabled := Length(trim(Edit1.Text)) > 0;
end;


Das klappt bei mir wunderbar.

Crombo


Hanni007 - Fr 04.02.11 20:28

Sorry. Geht leider immernoch nicht. :( Tut mir jetzt schon leid, dass ich euch damit nerve.

Hier nochmal der neue Quelltext:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
procedure TForm1.Button1Click(Sender: TObject);
var a,b : integer;
begin
a:=StrToInt(Edit1.Text);
b:=StrToInt(Edit2.Text);

Begin
Button1.Enabled:=Length(TRIM((Edit1.Text))) > 0;
Button1.Enabled:=Length(TRIM((Edit2.Text))) > 0;
End;

Begin
If a+b > 0
        Then Button1.Visible:=false
        Else Button1.Visible:=true;

End;
Randomize;
Label5.Caption:=IntToStr(Random((b)-a+1)+a);
Label6.Caption:=IntToStr(Random((b)-a+1)+a);
Label7.Caption:=IntToStr(Random((b)-a+1)+a);
Label8.Caption:=IntToStr(Random((b)-a+1)+a);
Label9.Caption:=IntToStr(Random((b)-a+1)+a);
end;


Moderiert von user profile iconMartok: Delphi-Tags gesetzt


Crombo - Fr 04.02.11 20:29

Dein Problem ist, dass du es beim Klick auf deinen Button überprüfst, der aber gar nichts von dem Klick mitbekommt, weil er nicht Enabled ist.

Machs in die Edit1.OnChange wie ich, dann funktionierts.

Crombo


elundril - Fr 04.02.11 20:30

wozu eigentlich diese wahllosen begins und ends im quelltext? machen das ganze nur unnötig länger und komplizierter.

lg elundril


Hanni007 - Fr 04.02.11 20:32

und wo packe ich das rein? auf alle fälle vor dem button aber wo denn genau?


Marc. - Fr 04.02.11 20:33


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
begin
  { was passiert, wenn in Edit1/2 nichts steht?
    lässt sich auch mit der weiteren Abfrage kombinieren,
    siehe zusätzlich TryStrToInt() und StrToIntDef() ! }

  a := StrToInt(Edit1.Text);
  b := StrToInt(Edit2.Text);

  Begin // redundant
  Button1.Enabled:=Length(TRIM((Edit1.Text))) > 0;
  Button1.Enabled:=Length(TRIM((Edit2.Text))) > 0// Button1.Enabled hängt nur von Edit2 ab!
  End;  // redundant

  Begin // redundant
  If a+b > 0
        Then Button1.Visible:=false
        Else Button1.Visible:=true;
        { lässt sich vereinfachen zu
          Button1.Visible := (a+b) > 0 }


  End// redundant
  Randomize;
  // Der Pseudo-Zufallsgenerator sollte nur einmal initialisiert werden (FormCreate)
  Label5.Caption:=IntToStr(Random((b)-a+1)+a);   // hat sicher nichts mit dem Problem zu tun
  Label6.Caption:=IntToStr(Random((b)-a+1)+a);
  [...]
end;


Crombo - Fr 04.02.11 20:33

Doppelklick auf dein Edit-Feld -> Code-Editor öffnet sich -> die Zeile die wir dir genannt haben, dort rein kopieren -> gut ist :)

Crombo


Hanni007 - Sa 05.02.11 09:42

Ja es klappt. =) Danke!
Aber es gibt jetzt nur noch zwei schönheitsfehler.

Wenn ich das programm starte, dann kann man den button drücken. nachdem ich aber jetzt den "wiederherstellen-button" drücke, der alles zurücksetzt(felder leert, button wieder sichtbar macht), dann funktioniert das. wie bekommt man das so hin, dass der button gleich beim start nicht verfügbar ist?

und der zweite schönheitsfehler. Wie kann ich einstellen, dass sich der button erst aktiviert, wenn ich in erst in beiden feldern was stehen hab. zurzeit braucht man nur ein feld ausfüllen.

Danke schon mal für die tolle hilfe!!! =)


Crombo - Sa 05.02.11 10:12

Hallo,

Im Objektinspektor Enabled auf false stellen. Oder beim Starten deiner Anwendung per Codezeile Enabled auf false.

Zwei Bedingungen kannst du mit AND verknüpfen:


Delphi-Quelltext
1:
2:
3:
4:
if (Bedingung 1and (Bedingung 2then
begin
  {...}
end;


Crombo