Błąd podczas wprowadzania liczby do edita

0

Witam
Na formie mam 2 edity i checkboxa, w implementation zadeklarowałem
dwie zmienne (a,b) o typie real, kod wygląda następująco:

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if CheckBox1.Checked=True then
begin
a:=50;
Edit1.Text:='50';
b:=StrToFloat(Edit2.Text);
b:=a;
end
end;

Dlaczego do edita nie chce wprowadzic sie liczba 50?
w jaki sposob to zrobic, probowalem tez stala przypisac do edita i tez nie dzialalo, w czym problem?

0
b:=StrToFloat(Edit2.Text);
b:=a;

Ten kod nie ma sensu.
To tak, jakby robić coś takiego:

b := 10;
b := 40;

Dlaczego do edita nie chce wprowadzic sie liczba 50?

Możesz nieco dokładniej?
Po wykonaniu tego kodu w Edit1 powinna być liczba 50.
Poza tym nazywaj normalnie komponenty...

0

chyba, ze brak średnika po end powoduje takie zachowanie.

Ze składni pascala wynika że jest to całkowicie dopuszczalne. Więc niestety, chybiony pomysł. Mógłbyś sie nauczyć dokładnie niuansów składni zamiast mówić że to może przez to że program jest zgody ze składnią.

@Topic, opisz dokładniej problem i logiczniej. Powiedz co masz, co chcesz osiągnąć. I ogarnij podstawy pascala...

0

No więc tak, chcę uzyskać taki efekt:

  • Jeżeli użytkownik zaznaczy CheckBox1 to a:=50
  • Jeżeli użytkownik zaznaczy CheckBox2 to b:=100
  • Jeżeli użytkownik zaznaczy CheckBox3 to c:=150
  • W Edit1.Text ma być wypisana suma zmiennych a, b, c

d:=a+b+c;
Edit1.Text:=IntToStr(d);

?

Domyślam się, że jest to dla was prosta sprawa, ale dopiero się uczę,
także proszę o wyrozumiałość.

Tak wygląda kod:

implementation
var
a:integer;
b:integer;
c:integer;
d:integer;


{$R *.dfm}

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
If CheckBox1.Checked=True then
a:=50;
end;

procedure TForm1.CheckBox2Click(Sender: TObject);
begin
If CheckBox2.Checked=True then
a:=100;
end;

procedure TForm1.CheckBox3Click(Sender: TObject);
begin
If CheckBox3.Checked=True then
a:=150;
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
d:=a+b+c;
Edit1.Text:=IntToStr(d);
end;

end.
1

Tak:

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
 if CheckBox1.Checked then
  a:=50;
 Edit1Change(Self);
end;
 
procedure TForm1.CheckBox2Click(Sender: TObject);
begin
 if CheckBox2.Checked then
  b:=100;
 Edit1Change(Self);
end;
 
procedure TForm1.CheckBox3Click(Sender: TObject);
begin
 if CheckBox3.Checked then
  c:=150;
 Edit1Change(Self);
end;
 
procedure TForm1.Edit1Change(Sender: TObject);
begin
 d:=a+b+c;
 Edit1.Text:=IntToStr(d);
end;

?
Poza tym nazywaj komponenty inaczej, niżeli "Edit1", "CheckBox3".
Potem dojdzie do "Button666"...

0
  • Jeżeli użytkownik zaznaczy CheckBox1 to a:=50
  • Jeżeli użytkownik zaznaczy CheckBox2 to b:=100
  • Jeżeli użytkownik zaznaczy CheckBox3 to c:=150

No dobra, ale jeżeli użytkownik zaznaczy CheckBox1 i ustawimy a := 50; to co się dzieje z b i c? Ustawiasz tylko jedną zmienną, a powinieneś wszystkie; Jeżeli nie ustawisz ich to gdzie do nich wprowadzasz nowe dane?

Sam warunek:

if CheckBox1.Checked then
  begin
    a := 50;
    { ustawienie pozostałych zmiennych }
  end
else
  if CheckBox2.Checked then
    begin
      b := 100;
      { ustawienie pozostałych zmiennych }
    end
  else
    if CheckBox3.Checked then
      begin
        c := 150;
        { ustawienie pozostałych zmiennych }
      end;

Co dalej? Musisz obliczyć sumę zmiennych i wpisać ją do Edit1:

Edit1.Text := IntToStr(a + b + c)

Zmienna d nie jest potrzebna chyba, że później też wykonujesz jakieś operacje, gdzie wykorzystujesz sumę tych trzech liczb;

EDIT: Spóźniłem się z postem... :P

0

Furious Programming twoim sposobem to nie zadziałało, dopiero po dodaniu Edit1.Change(Self) działa.

dzięki Patryk27

1 użytkowników online, w tym zalogowanych: 0, gości: 1