Avatar billede lundsby Nybegynder
26. december 2002 - 10:07 Der er 8 kommentarer og
1 løsning

Nedarvning af Page objektet

Jeg har lavet en klasse der nedarver fra Page objektet, til så den giver hurtigt adgang til en række kommandoer.
Men jeg kunne godt tænke mig at klassen automatisk inkludere en f.eks. en textbox control på siden, hvordan gøres dette?

Jeg har prøvet at overskrive OnInit, OnLoad m.m. men hvergang for at vide jeg kun tilføje kontrollen et sted hvor der er et form tag!
Avatar billede a1a1 Novice
26. december 2002 - 11:43 #1
jeg tror at det du er ude efter er en placeholder.
Avatar billede simon.ulsnes Nybegynder
26. december 2002 - 11:50 #2
Jeg plejer at gøre som følger:

Default.aspx.cs:
using og alt det der;
namespace Banana
{
  public class Default : BananaPage
  {
    public override void Page_Load(object sender, EventArgs e)
    {
      InitControls();
    }
  }
}

Banana.cs:
using en hel masse;
namespace Banana
{
  public abstract class BananaPage : Page
  {
    public PlaceHolder Contents = new PlaceHolder();
    public abstract void Page_Load(object sender, EventArgs e);

    protected void InitControls()
    {
      Contents.Controls.Add(new LiteralControl("Davs..."));
    }
  }
}

Default.aspx:
<%@ Page Language="C#" CodeBehind="Default.aspx.cs" Inherits="Banana.Default" %>
<html>
<head>...</head>
<body>
<form runat="server">
<asp:PlaceHolder id="Contents" runat="server" />
</form>
</body>
</html>

// Simon
Avatar billede simon.ulsnes Nybegynder
26. december 2002 - 11:51 #3
Som du kan se, er det et udsnit af en projekt jeg har kørende med navnet Banana...
Avatar billede simon.ulsnes Nybegynder
26. december 2002 - 11:53 #4
Hovsa, jeg glemte noget:

Til BananaPage-klassen:
        public BananaPage()
        {
            this.Load += new EventHandler(this.Page_Load);           
        }
Avatar billede burningice Nybegynder
26. december 2002 - 14:29 #5
simon.ulsnes>> ang.
public PlaceHolder Contents = new PlaceHolder();...
skal det ikke være
protected PlaceHolder Contets;

og
this.Load += new EventHandler(this.Page_Load);
er kun nødvendigt hvis du har sat AutoEventWireup til false
Avatar billede simon.ulsnes Nybegynder
26. december 2002 - 15:49 #6
AutoEventWireup=false som default i nye Visual Studio.NET-projekter...

Om man kalder det for public eller protected afhænger af situationen. Hvis man vil have adgang til objektet fra andre klasser, skal det være public - ellers protected.

// Simon
Avatar billede lundsby Nybegynder
26. december 2002 - 21:21 #7
Hej Simon

Tak for dit hurtige svar, desværre kan ikke bruges i denne situation. Fordi alt logikken skal ligge i den klasse der nedarves fra, hvilket vil sige at jeg ikke kan bruge en placeholder i selve den form, der nedarver fra klassen.
Avatar billede simon.ulsnes Nybegynder
26. december 2002 - 21:23 #8
Du vil altså have, at alting foregår i klassen du nedarver fra så det overhovedet ikke er nødvendigt at gøre noget i de klasser der nedarver?
Avatar billede lundsby Nybegynder
26. december 2002 - 21:41 #9
Hey, jeg har selv fundet svaret, man skal bare bruge:

Me.FindControl("Form1").Controls.Add(New TextBox())

- Peter
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester