Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Variablenübergabe - ich verzweifle (https://www.delphipraxis.net/112333-variablenuebergabe-ich-verzweifle.html)

raena 18. Apr 2008 21:26


Variablenübergabe - ich verzweifle
 
hallo,

ich bin langsam am ende :wall: .
Die Übergabe eine Listbox variable klappt einfach nicht von einer Unit zu einer anderen.
Ich habe viel gelesen über public und private, alles ausprobiert, die Variable wird einfach nicht
übergeben. Was mach ich nur falsch. In der Sub Unit kommt einfach nix an. Hilfe :bounce2:

Delphi-Quellcode:
unit Main;

interface

uses
  Sub, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm3 = class(TForm)
    Button1: TButton;
    listboxm:TListBox;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }

  end;

var
  FormMain: TForm3;


implementation
{$R *.dfm}

procedure TForm3.Button1Click(Sender: TObject);
begin
listboxm.AddItem('Test',TObject(-1));
sub.testen:=listboxm;
FormSub.showmodal;
end;

end.





unit Sub;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm5 = class(TForm)
    ListBoxSub: TListBox;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
 { Public declarations }

  end;
  var FormSub: TForm5;
    testen:TListBox;
implementation
{$R *.dfm}

procedure TForm5.Button1Click(Sender: TObject);
begin
ListBoxSub:=testen;
listboxsub.Refresh;
listboxsub.Repaint;
end;

end.

dominikkv 18. Apr 2008 21:29

Re: Variablenübergabe - ich verzweifle
 
dein ButtonClick in der SubUnit müsste so aussehen:
Delphi-Quellcode:
procedure TForm5.Button1Click(Sender: TObject);
begin
  testen.Refresh;
  testen.Repaint;
end;
edit:: ahh ich verstehe^^
versuchs so:
Delphi-Quellcode:
procedure TForm5.Button1Click(Sender: TObject);
begin
  listboxsub.Items.Assign(testen.Items);
end;

raena 18. Apr 2008 21:35

Re: Variablenübergabe - ich verzweifle
 
da kommt die fehlermeldung list index out of bounds

MrKnogge 18. Apr 2008 22:56

Re: Variablenübergabe - ich verzweifle
 
Zitat:

Zitat von dominikkv
dein ButtonClick in der SubUnit müsste so aussehen:
Delphi-Quellcode:
procedure TForm5.Button1Click(Sender: TObject);
begin
  testen.Refresh;
  testen.Repaint;
end;

refresh ruft automatisch repaint auf.

raena 19. Apr 2008 10:47

Re: Variablenübergabe - ich verzweifle
 
geht auch nicht. ich denke aber dass ich das Problem eingrenzen kann.

Das Problem liegt an der List Box. die Übergabe mit listbox1:=listbox2 klappt irgendwie nicht.

Die Übergabe einer einfachen Stringvaribalen klappt gut. Hier der Code für den den es interessiert:
Delphi-Quellcode:
unit Main;

interface

uses
  Sub, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm3 = class(TForm)
    Button1: TButton;
   
    procedure Button1Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  FormMain: TForm3;
implementation
{$R *.dfm}

procedure TForm3.Button1Click(Sender: TObject);
begin
sub.test_str:='ich schreibe aus Main';
FormSub.showmodal;
end;
end.
und die sub
Delphi-Quellcode:
unit Sub;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm5 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);

  private
    { Private declarations }
  public
 { Public declarations }

  end;
  var FormSub: TForm5;
      test_str:string;
implementation
{$R *.dfm}

procedure TForm5.Button1Click(Sender: TObject);
begin
memo1.Text:=test_str;
end;


end.
Ich schliesse diesen Threat da das Übergabe Problem gelöst ist.
Ich öffnen eine neuen Threat mit dem eigentlichen Problem. :arrow: :arrow:

Klaus01 19. Apr 2008 11:02

Re: Variablenübergabe - ich verzweifle
 
Delphi-Quellcode:
listbox1:=listbox2
damit weist Du der Listbox1 die Adressen der Listbox2 zu.
und nicht deren Inhalt.

Delphi-Quellcode:
listbox1.assign(listbox2):
<- das geht nicht
Delphi-Quellcode:
listbox1.items.Assign(Listbox2.items);
so sollte es das machen was Du willst.
Grüße
Klaus

alzaimar 19. Apr 2008 11:08

Re: Variablenübergabe - ich verzweifle
 
Vielleicht sollte man noch erwähnen, das eine Listbox immer nur auf einer(!) Form liegen kann. Der INHALT jedoch kann von einer Listbox in eine andere Listbox kopiert werden.

raena 19. Apr 2008 12:18

Re: Variablenübergabe - ich verzweifle
 
Hallo Klaus01,

ich denke hiermit
Delphi-Quellcode:
listbox1.items.Assign(Listbox2.items);
hast du vollkommen Recht. Dies funktioniert.

Ich hab dies aber nicht hinbekommen wenn listbox1 in unit1 und listbox2 in unit2 liegt.

DeddyH 19. Apr 2008 12:28

Re: Variablenübergabe - ich verzweifle
 
Versuch es mal mit
Delphi-Quellcode:
listbox1.items.Assign(Form2.Listbox2.items);

Die Muhkuh 19. Apr 2008 12:35

Re: Variablenübergabe - ich verzweifle
 
Hi,

ich würde einen anderen Weg wählen.

Definiere die Dinge, die Du übergeben willst, als property der Subform.
Erstelle diese Form dann zur Laufzeit, übergebe Deine Variablen und rufe die Form per ShowModal auf.

raena 19. Apr 2008 13:22

Re: Variablenübergabe - ich verzweifle
 
Hallo MuhKuh

könntest du vielleicht an einem simplen Beispiel zeigen wie das geht?

:roll:

Die Muhkuh 19. Apr 2008 13:32

Re: Variablenübergabe - ich verzweifle
 
Hi,

ist mal aus dem Kopf getippt:

Delphi-Quellcode:
unit Main;

interface

uses
  Sub, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm3 = class(TForm)
    Button1: TButton;
   
    procedure Button1Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  FormMain: TForm3;
implementation
{$R *.dfm}

procedure TForm3.Button1Click(Sender: TObject);
begin
  with TForm5.Create(Application) do
  begin
    try
      MemoText := 'Das ist ein Test';
      ShowModal;
    finally
      Free;
    end;
  end;
end;
end.
Delphi-Quellcode:
unit Sub;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm5 = class(TForm)
    Memo1: TMemo;
  private
    { Private declarations }
    function GetMemoText: String;
    procedure SetMemoText(const Value: String);
  public
    property MemoText: String read GetMemoText write SetMemoText;
  end;

implementation
{$R *.dfm}

function TForm5.GetMemoText: String;
begin
  Result := Memo1.Text;
end;

procedure TForm5.SetMemoText(const Value: String);
begin
  Memo1.Text := Value;
end;

end.

raena 19. Apr 2008 13:45

Re: Variablenübergabe - ich verzweifle
 
vielen dank fuer die Antwort. Ich werde es gleich mal ausprobieren und mich dann nochmal melden.

:stupid:

DP-Maintenance 19. Apr 2008 16:22

DP-Maintenance
 
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.
Delphi-Frage

raena 19. Apr 2008 17:19

Re: Variablenübergabe - ich verzweifle
 
Hi Muh Kuh,

jepp es klappt :bounce2: vielen Merci.
Manche einfach erscheinende Dinge kosten oft viel Schweiss.
Ich habe die Sache jetzt mal für den "Transfer" von ListBoxen umgebogen.

Vielen Dank.

Delphi-Quellcode:
unit Main;

interface

uses
  Sub, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm3 = class(TForm)
    Button1: TButton;
    ListBoxMain: TListBox;

    procedure Button1Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  FormMain: TForm3;

implementation
{$R *.dfm}
procedure TForm3.Button1Click(Sender: TObject);
var
  i: integer;
begin
  with TForm5.Create(Application) do
  begin
    try
      ListBoxMain.Items[0]:='erster eintrag';
      ListBoxMain.Items[1]:='zweiter eintrag';
      ListBoxMain.Items[2]:='noch ein eintrag';
      listboxtrans:=listboxmain;
      ShowModal;
    finally
      Free;
    end;
  end;
end;
end.
Delphi-Quellcode:
unit Sub;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm5 = class(TForm)
    ListBox1: TListBox;
  private
    function GetListBox(): Tlistbox;
    procedure SetListBox(const Value: TListBox);
  public
    property ListBoxTrans: TListBox read GetListBox write SetListBox;
  end;
     var FormSub: TForm5;
implementation
{$R *.dfm}


function TForm5.GetListBox: TListBox;
begin
GetListBox:= listbox1;
end;

procedure TForm5.SetListBox(const Value: TListBox);
var i:integer;
begin
 for i := 0 to value.Count - 1 do ListBox1.Items[i]:=value.Items[i];
end;

end.

Klaus01 19. Apr 2008 18:11

Re: Variablenübergabe - ich verzweifle
 
Ich denke, dies:

Delphi-Quellcode:
procedure TForm5.SetListBox(const Value: TListBox);
var i:integer;
begin
  for i := 0 to value.Count - 1 do
    ListBox1.Items[i]:=value.Items[i];
 end;
kann man durch das:

Delphi-Quellcode:
procedure TForm5.SetListBox(const Value: TListBox);

begin
  Listbox1.items.assign(Value.items);
 
end;
ersetzen.

Grüße
Klaus

raena 20. Apr 2008 10:22

Re: Variablenübergabe - ich verzweifle
 
Danke Klaus
Delphi-Quellcode:
 ListboxFields.items.assign(Value.items);
geht auch. Das hatte ich schonmal probiert, hat aber wegen eines anderen Fehlers nicht gefunzt.

Merci :corky:


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:23 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