Results 1 to 9 of 9

Thread: Circular Reference in Delphi dotnet

  1. #1

    Circular Reference in Delphi dotnet

    LS,

    Ben wat aan het verkennen van WinForm in Delphi 2006 voor dotnet.
    In klassiek Delphi kun je twee forms aan elkaar refereren. De naam van de een in de uses in de implementation, die van de ander in de uses in de interface. Dat werkt in dotnet ook.

    Maar dan.
    Een druk op de knop in form WF1 creëert form WF2 en laat WF2 verschijnen.
    Een druk op een knop in form WF2 moet nu de inhoud van een string in WF1 in een textbox op form WF2 laten zien.
    Maar dat gaat fout.
    De volgende boodschap verschijnt: 'Project Project1.exe encountered unhandled exception class System.NullReferenceException with message ÔÇÿDe objectverwijzing is niet op een exemplaar van een object ingesteld.ÔÇÖ.'

    Wat moet ik veranderen. In klassiek Delphi werkt dit goed.
    Begrijp goed, ik weet wel een oplossing, geen circular reference gebruiken, maar waarom gaat het in dit geval fout. Wie kan mij dat vertellen.

  2. #2
    Laat de code eens zien. Het heeft zonder code weinig zijn om te gaan gokken.
    We adore chaos because we like to restore order - M.C. Escher

  3. #3
    Een uittreksel uit de code

    Code:
    unit WinForm;
    
    interface
    
    uses
      System.Drawing, System.Collections, System.ComponentModel,
      System.Windows.Forms, System.Data;
    
    type
      TWinForm = class(System.Windows.Forms.Form)
      {$REGION 'Designer Managed Code'}
      strict private
        Components: System.ComponentModel.Container;
        Button1: System.Windows.Forms.Button;
        TextBox1: System.Windows.Forms.TextBox;
        procedure InitializeComponent;
        procedure Button1_Click(sender: System.Object; e: System.EventArgs);
      {$ENDREGION}
      strict protected
        procedure Dispose(Disposing: Boolean); override;
      private
        { Private Declarations }
      public
        s : string;
        constructor Create;
      end;
    
    var
      WF : TWinform;
    
      [assembly: RuntimeRequiredAttribute(TypeOf(TWinForm))]
    
    implementation
    
    uses WinForm1;
    
    {$AUTOBOX ON}
    
    
    procedure TWinForm.Dispose(Disposing: Boolean);
    begin
      if Disposing then
      begin
        if Components <> nil then
          Components.Dispose();
      end;
      inherited Dispose(Disposing);
    end;
    
    constructor TWinForm.Create;
    begin
      inherited Create;
      InitializeComponent;
      s := 'WinForm';
    end;
    
    procedure TWinForm.Button1_Click(sender: System.Object; e: System.EventArgs);
    begin
      WF1 := TWinForm1.Create;
      TextBox1.Text := WF1.s1;
      WF1.ShowDialog;
    end;
    
    end.
    
    
    unit WinForm1;
    
    interface
    
    uses
      System.Drawing, System.Collections, System.ComponentModel,
      System.Windows.Forms, System.Data, WinForm;
    
    type
      TWinForm1 = class(System.Windows.Forms.Form)
      {$REGION 'Designer Managed Code'}
      strict private
        Components: System.ComponentModel.Container;
        Button1: System.Windows.Forms.Button;
        TextBox1: System.Windows.Forms.TextBox;
        procedure InitializeComponent;
        procedure Button1_Click(sender: System.Object; e: System.EventArgs);
      {$ENDREGION}
      strict protected
        procedure Dispose(Disposing: Boolean); override;
      private
        { Private Declarations }
      public
        s1 : string;
        constructor Create;
      end;
    
    var
      WF1 : TWinForm1;
    
      [assembly: RuntimeRequiredAttribute(TypeOf(TWinForm1))]
    
    implementation
    
    
    {$AUTOBOX ON}
    
    procedure TWinForm1.Dispose(Disposing: Boolean);
    begin
      if Disposing then
      begin
        if Components <> nil then
          Components.Dispose();
      end;
      inherited Dispose(Disposing);
    end;
    
    constructor TWinForm1.Create;
    begin
      inherited Create;
      InitializeComponent;
      s1 := 'WinForm1';
    end;
    
    procedure TWinForm1.Button1_Click(sender: System.Object; e: System.EventArgs);
    begin
      TextBox1.Text := WF.s;
    end;
    
    end.
    Last edited by Dees; 18-Mar-06 at 18:14. Reason: quote->code tags

  4. #4
    SillyMember
    Join Date
    May 2003
    Location
    Gent
    Posts
    7,725
    WF is gewoon nil en krijgt nergens een waarde?
    All methodologies are based on fear. -- Kent Beck.

  5. #5
    Ja, dat is het. Overheen gekeken. Dat komt waarschijnlijk omdat klassiek Delphi dat automatisch verzorgt.
    De code als volgt aangepast:

    Code:
    constructor TWinForm.Create;
    begin
        inherited Create;
        InitializeComponent;
        WF := Self;
        s := 'WinForm';
    end;

    En nu gaat het goed.
    Dirk bedankt.

    en Dees ook!
    Last edited by wzandt; 19-Mar-06 at 15:41.

  6. #6

  7. #7
    Senior Member Wuf's Avatar
    Join Date
    Sep 2005
    Location
    Utrecht
    Posts
    323
    “Project Project1.exe encountered unhandled exception class System.NullReferenceException with message ‘De objectverwijzing is niet op een exemplaar van een object ingesteld.’.”

    dit is gewoon een ouderwetse Access violation in een nieuw nederlands jasje gegoten. Ik heb al ontzettend kunnen genieten van die nieuwe foutmeldingen.

    deze krijg ik regelmatig, en ik weet niet wat ik fout heb gedaan, hij komt voor de formcreate aangeroepen:
    Project TestenMsSql.exe raised exception class System.Reflection.AmbiguousMatchException with message 'Dubblezinnige treffer gevonden.'.

    ik heb er verder geen last van, maar vind hem ook wel het vermelden waard :+
    Last edited by Wuf; 04-Apr-06 at 11:45.

  8. #8
    Dit is ook de reden waarom ik geen nederlandstalige software wens.
    Een normale engelse omschrijving van de fout komt over de gehele wereld voor. Een nederlandse omschrijving alleen op een paar vierkante kilometer in de Rijn Delta.
    Bij die engelse foutmeldingen kun je eenvoudig op Google vinden wat er nu precies aan de hand is bij zo'n foutmelding
    De beste manier om te leren is door fouten te maken.
    80 procent van alle leugens die jij en ik vertellen blijft onopgemerkt

  9. #9
    Senior Member Wuf's Avatar
    Join Date
    Sep 2005
    Location
    Utrecht
    Posts
    323
    als je ze vrij letterlijk vertaalt, kom je ook een aardig eind hoor, maar ik vind de omschrijvingen soms briljant gevonden.

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •