info mellem 2 forme

Tags:    delphi

Jeg har prøvet at lave 2 forme hvor 1. form har en label1. og en button1.
når man trykker på på button så åbner en ny form hvor en edit1 og button1 findes.
når man har indtastet noget i edit1 og trykket button knappen, så skal formen lukkes og det
der er indtastet skal overføres i Label1. og det virker bare ikke.



3 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 4 karma
Sorter efter stemmer Sorter efter dato
Jeg har prøvet at lave 2 forme hvor 1. form har en label1. og en button1.
når man trykker på på button så åbner en ny form hvor en edit1 og button1 findes.
når man har indtastet noget i edit1 og trykket button knappen, så skal formen lukkes og det
der er indtastet skal overføres i Label1. og det virker bare ikke.


Det svar du fik virker som en masse linie for meget lidt. Jeg åbnede delphi, lavede to forme. Form1 har button1 og label1 og form2 har button1 og edit.

Jeg dobbeltklikkede på knappen i form 1 og skrev denne kode:

form2.visible:=true;


Compile, den spørger om du vil inkludere det i USES. Tryk ja og compiler evt igen.

Gå til form2. Dobbeltklik på knappen. Tilføj disse linier kode:

form1.label1.caption:=edit1.text;
form2.visible:=false;


Compiler, tilføj til USES, compiler igen - kør programmet, og nu virker det!



Jeg har prøvet at lave 2 forme hvor 1. form har en label1. og en button1.
når man trykker på på button så åbner en ny form hvor en edit1 og button1 findes.
når man har indtastet noget i edit1 og trykket button knappen, så skal formen lukkes og det
der er indtastet skal overføres i Label1. og det virker bare ikke.


Du skal tilføje et "Event" til din indtastningsform:

type
TOnInput = procedure (ASender : TObject; AText : String; AAccepted : Boolean) of object;

TMyInput = class(TForm)
edtInput: TEdit;
btnOk: TButton;
btnCancel: TButton;
procedure btnOkClick(Sender: TObject);
procedure btnCancelClick(Sender: TObject);
procedure MyInputCreate(Sender: TObject);
private
FOnInput : TOnInput;
public
property OnInput : TOnInput read FOnInput write FOnInput;
end;

implementation

procedure TMyForm.btnOkClick(Sender: TObject);
begin
if Assigned(FOnInput) then
begin
FOnInput(Self, edtInput.Text, True);
end;
end;

procedure TMyForm.btnCancelClick(Sender: TObject);
begin
if Assigned(FOnInput) then
begin
FOnInput(Self, edtInput.Text, False);
end;
end;

procedure TMyForm.MyInputCreate(Sender: TObject);
begin
FOnInput := nil;
end;


Du skal nu, i din hoved form, implementere en event funktion:

TMainForm = class(TForm)
Label1 : TLabel;
btnTest: TButton;
procedure btnTestClick(Sender: TObject);
private
procedure OnInput(ASender : TObject; AText : String; AAccepted : Boolean);
protected
procedure DoInput(ADefaultText : String);
end;

implementation

procedure TMainForm.OnInput(ASender : TObject; AText : String; AAccepted : Boolean);
begin
if (AAccepted) then
begin // Wheee, nyt input :0)
Label1.Caption := AText;
end
else
begin
// Ups, input var "canceled"
Label1.Caption := 'Ups...no go!';
end;
end;

procedure TMainForm.DoInput(ADefaultText : String);
var
Dlg : TMyInput;
begin
Dlg := TMyInput.Create;
Dlg.edtInput := ADefaultText;
Dlg.OnInput := OnInput;
Dlg.ShowModal;
Dlg.Free;
end;

procedure TMainForm.btnTestClick(Sender: TObject);
begin
DoInput('Hello world!');
end;


Så skulle du kunne få dine informationer tilbage :0)
Du må selv implementere dine forms og de buttons, Edits og Labels som skal bruges.

Jeg har ikke testet koden (så jeg kan ikke garantere at der ikke er en "taste-bæ" eller to i mellem) men det skulle give dig noget at gå ud fra.

God fornøjelse
Michael.



Det er egentligt meget simpelt. Hvis vi siger du har en form1 og en form2 skal du hvis at du vil hive noget information ud fra form2 og du er i form 1 bare skrive fx: form2.edit1.text.

hvis du vil vise formen er det bare form2.showmodal;



t