Autor Beitrag
bayerleo
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mi 31.08.05 11:26 
Hallo,

habe ein Problem was meiner Meinung nach jeden Tag 10000x in Deutschland auftritt, und demnach einfach zu lösen sein MUSS !

Habe drei Seiten,
- meine ASPX Webseite WebForm1, die zwei UserControls beinhaltet,
- links das UserControl phMenuLeft, das eine Navigation beinhaltet,
- rechts das UserControl phMenuMain, das beliebigen Content beinhaltet.

SO SIEHT'S AUS: www.delphi-forum.de/download.php?id=1297

Beim laden der ASPX Seite werden die beiden UserControls mit den entsprechenden Seiten "navigation.ascx" und "content.ascx" on page_Load geladen.

Im linken UserControl (= der Navigations"frame") klicke ich auf Button1, der dem WebForm1 sagen soll 'Lade im rechten Content"frame" eine neue Seite'. (Der Einfachheit halber, und weils eh nicht geht, sagen wir hier mal nur 'Seite das rechte UserControl einfach nur auf visible')

Ich bin zwar neu in der Thematik, aber ich glaube das ist eine gängige und völlig alltägliche Praxis eine Homepage aufzubauen oder?

Seht euch bitte mal den Code an, ich erhalte beim klicken auf den Button1 nur eine Fehlermeldung "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt".
Es scheint als könne das UserControl nicht auf seinen "parent" zugreifen, obwohl alles public deklariert ist und WebForm1 im UserControl auch bekannt ist.


Bin um JEDE Hilfe und JEDE Anregung dankbar da ich mir seit geraumer Zeit die Zähne daran ausbeiße!


Inhalt der Seite WebForm1.aspx
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
unit WebForm1;

interface

uses
  System.Collections, System.ComponentModel,
  System.Data, System.Drawing, System.Web, System.Web.SessionState,
  System.Web.UI, System.Web.UI.WebControls, System.Web.UI.HtmlControls;

type
  TWebForm1 = class(System.Web.UI.Page)
  strict private
    procedure Page_Load(sender: System.Object; e: System.EventArgs);
  strict protected
    procedure OnInit(e: EventArgs); override;
  private
  public
    phMenuLeft: System.Web.UI.WebControls.PlaceHolder;
    phMenuMain: System.Web.UI.WebControls.PlaceHolder;

end;

implementation

procedure TWebForm1.Page_Load(sender: System.Object; e: System.EventArgs);
begin
  phMenuLeft.Controls.Add(Page.LoadControl('Navigation.ascx'));
  phMenuMain.Controls.Add(Page.LoadControl('Content.ascx'));
end;

end.



Inhalt der Navigationsseite Navigation.ascx
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
unit Navigation;

interface

uses System.Data, System.Drawing, System.Web, System.Web.UI,
     System.Web.UI.WebControls, System.Web.UI.HtmlControls,WebForm1;
     
type
  TNavigationControl1 = class(System.Web.UI.UserControl)
  strict private
    procedure Page_Load(sender: System.Object; e: System.EventArgs);
  strict protected
    Button1: System.Web.UI.WebControls.Button;
    Button2: System.Web.UI.WebControls.Button;
    procedure OnInit(e: System.EventArgs); override;
  private
  public
  end;

implementation
 
procedure TNavigationControl1.Button1_Click(sender: System.Object; e: System.EventArgs);
var
  test:TWebForm1;
begin
  test :=  WebForm1.TWebForm1.Create;

  //Rechtes Usercontrol ausblenden...
  test.phMenuMain.Visible:=true;

  //Neue Contentseite ins rechte Usercontrol laden
  test.phMenuMain.Controls.Add(Page.LoadControl('Content_neu.ascx'));

  //Rechtes Usercontrol wieder einblenden...
  test.phMenuMain.Visible:=false;

end;

end.


Falls mehr Informationen benötigt werden kann ich diese gerne zur Verfügung stellen, ebenso den kompletten Source Code zum Download.


Moderiert von user profile iconChristian S.: Topic aus .NET verschoben am Sa 17.09.2005 um 22:23
Einloggen, um Attachments anzusehen!
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 31.08.05 11:33 
Hallo!

Wenn ich das richtig sehe, erzeugst Du im letzten Code eine neue Instanz von TWebForm1, aber Du willst doch etwas an der bestehenden Instanz ändern bzw. diese etwas tun lassen, oder sehe ich das falsch? :gruebel:

Grüße
Christian

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
bayerleo Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mi 31.08.05 11:38 
Die neue Instanz zu erzeugen war Idee eines Users im anderen Forum.

Mein Menschenverstand sagt mir eigentlich auch, das ein direkter Zugriff funktionieren sollte:

WebForm1.TWebForm1.phMenuMain.Visible := false;

Doch es geht nicht!

Moderiert von user profile iconChristian S.: b- durch Delphi-Tags ersetzt.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 31.08.05 11:44 
Hallo!

Ich habe ein wenig den Eindruck, ein paar Grundlagen können Dir nicht schaden, bevor Du mit solchen Sachen anfängst ;-)

Denn in Deinem letzten Code versuchst Du, auf eine Klasse so zuzugreifen, als wäre es ein Objekt! Du musst auf die bestehende Instanz zugreifen! Irgendwie werden in Deinem gesamten Quellcode nirgendwo Instanzen erzeugt.

Ist das (a) einer Kürzung zum Opfer gefallen oder (b) eine Eigenart von ASP, dass die irgendwo anders erzeugt werden oder (c) ein Fehler? (Du hast noch den Publikumsjoker und darfst jemanden anrufen. 50:50 geht bei drei Möglichkeiten nicht :D)

Grüße
Christian

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
bayerleo Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mi 31.08.05 12:00 
Hallo,

danke für den Link, Grundlagen fehlen mir definitiv.

Ich hoffe bei diesem konkreten Problem kannst du mir trotzdem helfen, das raubt mir nämlich die gesamte Freude am 'Einstieg in die Materie' und ich möchte damit beginnen!

Ich tippe auf Antwort C, ein Fehler meinerseits. :D

Aber moment, TWebForm1 ist doch ein Objekt oder habe ich akuten Kaffeemangel?! Also müsste ich doch hiermit darauf zugreifen können?

ausblenden Delphi-Quelltext
1:
TWebForm1.phMenuMain.Visible := false;					


EDIT:
Okay, ich greife auf die Klasse zu... ich finde allerdings nicht die Stelle wo das Objekt erzeugt wird, und habe keine Ahnung wie das Objekt heisst (ausser self, was mir vom UserControl aus wenig hilft).
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 31.08.05 12:24 
Ich habe bei mir gerade mal ein ASP.NET-Projekt erstellt und in dem Assembly werden anscheinend nur die Klassen zur verfügung gestellt und die Instanzen dann wohl woanders erzeugt, sobald die entsprechende Seite (und damit das Assembly) geladen wird.

Leider bin ich da mit meinem Latein am Ende, weil ich mich noch nicht mal so richtig mit den Grundlagen von ASP .NET beschäftigt habe und alles, was ich Dir jetzt noch sagen würde, wäre wahrscheinlich falsch.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".