AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Button einer anderen unit Enabled auf false setzen
Thema durchsuchen
Ansicht
Themen-Optionen

Button einer anderen unit Enabled auf false setzen

Ein Thema von winkelmesser · begonnen am 4. Jan 2008 · letzter Beitrag vom 5. Jan 2008
Antwort Antwort
winkelmesser

Registriert seit: 9. Mär 2005
Ort: Hannover
17 Beiträge
 
Delphi 7 Personal
 
#1

Button einer anderen unit Enabled auf false setzen

  Alt 4. Jan 2008, 20:10
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
Immer auf der Suche nach der Antwort auf die allumfassende Frage: Wo ist mein Kugelschreiber?
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Button einer anderen unit Enabled auf false setzen

  Alt 4. Jan 2008, 20:22
ü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;
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
Benutzerbild von Ralf Kaiser
Ralf Kaiser

Registriert seit: 21. Mär 2005
Ort: Wuppertal
932 Beiträge
 
Delphi 10.3 Rio
 
#3

Re: Button einer anderen unit Enabled auf false setzen

  Alt 4. Jan 2008, 20:31
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
Ralf Kaiser
  Mit Zitat antworten Zitat
winkelmesser

Registriert seit: 9. Mär 2005
Ort: Hannover
17 Beiträge
 
Delphi 7 Personal
 
#4

Re: Button einer anderen unit Enabled auf false setzen

  Alt 4. Jan 2008, 21:00
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
Immer auf der Suche nach der Antwort auf die allumfassende Frage: Wo ist mein Kugelschreiber?
  Mit Zitat antworten Zitat
Benutzerbild von Ralf Kaiser
Ralf Kaiser

Registriert seit: 21. Mär 2005
Ort: Wuppertal
932 Beiträge
 
Delphi 10.3 Rio
 
#5

Re: Button einer anderen unit Enabled auf false setzen

  Alt 5. Jan 2008, 09:32
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
Ralf Kaiser
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz