Avatar billede idiotbarn Nybegynder
20. maj 2005 - 18:42 Der er 12 kommentarer og
1 løsning

C# Oprette controlls i hovedfil fra klasse

Jeg har en klasse hvor andre klasser så nedarver fra. Den klasse der nedarver skal have nogen egenskaber ind, men det er ikke de samme egenskaber i de forskellige klasser(derfor nedarvning). Jeg vil gerne ha at jeg i klassen har en metode der laver de tekstfelter osv som jeg skal bruge inde i filen. Så jeg fx har en placeholder1 i min hovedfil og min klasse indeholder metoden:
createPropertiesInput(){
TextBox UserTextBox = new TextBox();
UserTextBox.ID = "UserTextBox";
UserTextBox.Columns = 50;
PlaceHolder1.Controls.Add(UserTextBox);
}
men hvordan fortæller jeg den at den skal oprette den i hoved filen? og er der en bedre måde at lave sådan noget på?
Sidste ting. Hvad med formateringen af elementerne, så de står pænt?
Avatar billede burningice Nybegynder
21. maj 2005 - 10:19 #1
hvis du laver din PlaceHolder protected i din BaseClass (den de andre nedarver fra), kan du gøre følgende trick:

createPropertiesInput(){
TextBox UserTextBox = new TextBox();
UserTextBox.ID = "UserTextBox";
UserTextBox.Columns = 50;
base.DinPlaceHolder.Controls.Add(UserTextBox);
}
Avatar billede idiotbarn Nybegynder
21. maj 2005 - 22:02 #2
Jeg har en abstrakt klasse, som jeg nedarver fra. Kan det så gøres på samme måde? Jeg har lidt problemer med at compile klassen:

namespace Modules {
    using System;

    public class EditText : Module {
        public EditText(String streng) : base(streng){
        }

        public void createPropertiesInput(){
        TextBox TekstBox = new TextBox();
        TekstBox.ID = "User";
        TekstBox.Columns = 50;

        }
    }
}
Det lyder som om jeg mangler at inkludere et eller andet:

EditText.cs(12,10): error CS0246: The type or namespace name 'TextBox' could not
        be found (are you missing a using directive or an assembly reference?)
Avatar billede burningice Nybegynder
22. maj 2005 - 01:07 #3
prøv at skriv

using System.Web.UI.WebControls
Avatar billede idiotbarn Nybegynder
22. maj 2005 - 13:24 #4
Jeg får nu en:
EditText.cs(16,10): error CS0117: 'Modules.Module' does not contain a definition
        for 'myPlaceHolder'

Men min base er vel også den abstrakte klasse, kan man så gøre det på denne måde?
Avatar billede burningice Nybegynder
22. maj 2005 - 21:44 #5
nu har du ikke vist nogen decideret kode hvor du bruger myPlaceHolder, så jeg skal ikke kunne svare dig hvordan og hvorledes det hænger sammen.
Avatar billede idiotbarn Nybegynder
23. maj 2005 - 01:11 #6
ok...here goes...Jeg har min side som brugeren kommer ind på. (stadig på et begynder stadie) som ser således ud:

<%@ Page Language="C#" %>
<%@ import Namespace="Modules" %>
<script runat="server">

    public void Page_Load(Object sender, EventArgs E){
        EditText TekstRedigering = new EditText("TekstRedigering");
TekstRedigering.createPropertiesInput();


    }

</script>
<html>
<head>
</head>
<body>
    <form runat="server">
        <p>
            <asp:Label id="Label1" runat="server">Label</asp:Label>
            <br />
            <asp:Label id="Label2" runat="server">Label</asp:Label>
        </p>
        <p id="Placeholder1">
            &nbsp;<asp:PlaceHolder id="myPlaceHolder" runat="server"></asp:PlaceHolder>
        </p>
        <!-- Insert content here -->
    </form>
</body>
</html>


Klassen EditText arver fra den abstrakte klasse Module, de ser således ud:
namespace Modules {
    using System;

    abstract public class Module {
    String name;
    DateTime untilDate;

        //opret
        public Module(String na) {
            name=na;
            }

        //Hent navnet
        public String getName(){
            return name;
        }

        //Set/hent stopdato
        public DateTime StopDate{
            get{
                return untilDate;
            }
            set{
                untilDate=value;
            }
        }

    }
}


EditText------------------------------------------------
namespace Modules {
    using System;
    public class EditText : Module {
        public EditText(String streng) : base(streng){
        }

        public void createPropertiesInput(){
        TextBox TekstBox = new TextBox();
        TekstBox.ID = "User";
        TekstBox.Columns = 50;
        base.myPlaceHolder.Controls.Add(TekstBox);

        }
}
}

Jeg vil således gerne ha bundet Tekstfelterne til myPlaceHolder i den første fil
Avatar billede burningice Nybegynder
23. maj 2005 - 09:54 #7
men... hvor i alverden ser du at myPlaceHolder blvier ærkleret? Det sker jo hverken i Module-klassen eller i EditText-klassen, men på din aspx-side. Dvs. at eneste måde du kan få fat i den placeholder i EditText er på en eller anden måde at smide en reference ind i den. Det kan evt. gøre sådan her:

Metoden i EditText:

        EditText TekstRedigering = new EditText("TekstRedigering");
TekstRedigering.createPropertiesInput(myPlaceHolder);

public void createPropertiesInput(Placeholder plc){
        TextBox TekstBox = new TextBox();
        TekstBox.ID = "User";
        TekstBox.Columns = 50;
        plc.Controls.Add(TekstBox);


din aspx-side:
Avatar billede burningice Nybegynder
23. maj 2005 - 09:55 #8
din aspxside

        EditText TekstRedigering = new EditText("TekstRedigering");
TekstRedigering.createPropertiesInput(myPlaceHolder);
Avatar billede idiotbarn Nybegynder
26. maj 2005 - 16:57 #9
ah fantastisk. Tak, jeg kunne ikke rigtigt finde ud af hvordan jeg fik den erklæret. Ligger du et svar?
Hvis man skal lave noget der minder om et layout i det. Er det så ikke htmltable der er det smarteste at bruge?
Avatar billede burningice Nybegynder
26. maj 2005 - 17:41 #10
jo.. hvis du vil hardcode designet i din kode er htmltable det rette... ellers skal du kigge på en template-control som f.eks. Repeater.
Avatar billede idiotbarn Nybegynder
26. maj 2005 - 18:35 #11
Tak. Hvis jeg lige må komme med et sidste spørgsmål...?

Hvorfor kan jeg ikke:
ArrayList Content = new ArrayList();
        TextBox TestBox = new TextBox();
        TestBox.ID = "Use";
        TestBox.Columns = 10;
       
        Content[0]=TestBox;

...
cell.Controls.Add(Content[0]);
...
Jeg får en:
CS1502: Den overloadede metode, der passer til 'System.Web.UI.ControlCollection.Add(System.Web.UI.Control)', indeholder ugyldige argumenter

det må være fordi jeg gør noget forkert når jeg tilføjer det til arraylist, kan man ikke det?
Avatar billede burningice Nybegynder
26. maj 2005 - 18:41 #12
du skal nok caste det tilbage til en Control. Problemet med arraylist er at den ikke er typestærk.

cell.Controls.Add((Control)Content[0]);
Avatar billede idiotbarn Nybegynder
26. maj 2005 - 18:58 #13
ja tak. Igen tak for hjælpen
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