Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Button einer anderen unit Enabled auf false setzen (https://www.delphipraxis.net/106071-button-einer-anderen-unit-enabled-auf-false-setzen.html)

winkelmesser 4. Jan 2008 20:10


Button einer anderen unit Enabled auf false setzen
 
Hallo und ein Frohes neues Jahr an alle


In der ersten Form benutze ich

Delphi-Quellcode:
var
  Form1: Tform1;
  SenderForm1 : TObject;
und

Delphi-Quellcode:
procedure TForm1.Button(Sender: TObject);
begin
  SenderForm1 := TButton(sender);
  form2.ShowModal;
end;


In der zweiten Form

Delphi-Quellcode:
procedure TForm2.SchlieseForm2(sender : TObject);
begin
  if TButton(sender) = BOK then
  begin
    TButton(SenderForm1).Enabled := false;
  end;
end;

bekomme die Fehlermeldung Zugriffsverletzung

TButton(SenderForm1).Enabled := false;


mfg Winkelmesser

dominikkv 4. Jan 2008 20:22

Re: Button einer anderen unit Enabled auf false setzen
 
überprüf zuerst mal ob senderform1 überhaupt ein button ist:
Delphi-Quellcode:
procedure TForm2.SchlieseForm2(sender : TObject);
begin
  if TButton(sender) = BOK then
  begin
    if (SenderForm1 is TButton) then
      (SenderForm1 as TButton).Enabled := false else
      showmessage('nÖ!');
  end;
end;

Ralf Kaiser 4. Jan 2008 20:31

Re: Button einer anderen unit Enabled auf false setzen
 
Hallo,

erstmal: Warum nennst du eine Variable die hinterher wohl einen TButton enthalten soll SenderForm?

Wenn ich das richtig verstehe dann soll wenn der Aufruf des zweiten Formulars mit OK beendet wurde der Button auf "Enabled = false" gesetzt werden, stimmts?

Warum dann nicht einfach so:

Delphi-Quellcode:
procedure TForm1.Button(Sender: TObject);
var aButton: TButton;
begin
  if Sender is TButton then begin
    aButton := TButton(sender);
    if form2.ShowModal = mrOK then begin
      aButton.Enabled := false;
    end;
  end;
end;
Da "ShowModal" das Ergebnis liefert und auch nicht ohne Ergebnis zurückkehrt ist es nicht nötig den Button aus From2 heraus zu manipulieren.

Ciao,
Ralf

winkelmesser 4. Jan 2008 21:00

Re: Button einer anderen unit Enabled auf false setzen
 
Danke dominikkv

Klappt super


Hallo Alfi001

Die form1 besitzt 14 Buttons deren Caption je eine andere Maschinen Nummer enthalten
Diese Caption wird in Form2 ausgelesen und mit weiteren Daten die in form2 zusammengetragen werden in eine DB gespeichert

Ralf Kaiser 5. Jan 2008 09:32

Re: Button einer anderen unit Enabled auf false setzen
 
Zitat:

Zitat von winkelmesser
Hallo Alfi001

Die form1 besitzt 14 Buttons deren Caption je eine andere Maschinen Nummer enthalten
Diese Caption wird in Form2 ausgelesen und mit weiteren Daten die in form2 zusammengetragen werden in eine DB gespeichert

Dann verpass dem Form2 ein Property in dem diese Nummer gespeichert wird und setze es bevor du Form2 anzeigst von Form1 aus.

Also in etwa so:

Delphi-Quellcode:
Form2 := TForm2.Create(Self);
Form2.MaschinenNummer := (Sedner as TButton).Caption;
if Form2.ShowModal = mrOK then begin
 //...
end;
Form2.Free;
Auf diese Weise muss das Form2 nicht "wissen" dass die Nummer in der Caption eines TButtons gespeichert ist. Es ist immer schlecht, wenn ein Formular den Aufbau des jeweils aufrufenden Formulars kennen muss damit etwas funktioniert.

Was ist, wenn du irgendwann entscheidest, dass kein TButton sondern ein TBitButton oder TSpeedButton benutzt wird? Dann musst du überall die Stellen im Source suchen, wo per Casting auf den "Sender" zugegriffen wird und mindestens eine Stelle wird meistens vergessen, was dann erst zur Laufzeit auffällt.

Ciao,
Ralf


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz