Własna kontrolka?

0

Mam utworzony projekt server control, po dodaniu strony dodalem tez reference zeby powstal Bin z dll i tym drugim plikiem a i jeszcze wrzucilem ta kontrolke do toolboxa tylko ze ta kontrolka nic nie ma oprocz napisu ServiceControl w jaki sposob dodac do niej np button lub cos innego?

0

Musisz to zrobić ręcznie w kodzie. Button jako pole kontrolki, inicjalizacja w OnInit, a renderowanie w Render.

0

To jest troche za ogolnie mozesz mi pokaza na tym kodzie gdzie umiescic buttona i np textboxa w tej kontrolce?

[DefaultProperty("Text")]
    [ToolboxData("<{0}:ServerControl1 runat=server></{0}:ServerControl1>")]
    public class ServerControl1 : WebControl
    {
        [Bindable(true)]
        [Category("Appearance")]
        [DefaultValue("")]
        [Localizable(true)]
        public string Text
        {
            get
            {
                String s = (String)ViewState["Text"];
                return ((s == null) ? "[" + this.ID + "]" : s);
            }

            set
            {
                ViewState["Text"] = value;
            }
        }
        public class LabeledTextBox : TextBox
        {
            public string PromptText { get; set; }
            public int PromptWidth { get; set; }
        }
      

        protected override void RenderContents(HtmlTextWriter output)
        {
            output.Write(Text);
           

            
        } 
0

Chyba użycie RenderContents jest tu nie trafione.
Jeśli masz inne kontrolki w swojej, to najlepiej utworzyć je w OnInit, a później w CreateChildControls je dodajesz do kolekcji Controls.

protected override void CreateChildControls(){this.Controls.Add(this._myButton);}

Jeśli nie chcesz posługiwać się kontrolkami, możesz od razu "produkować" kod html w Render.

protected override void Render(HtmlTextWriter output)
{
  output.Write(string.Format("<input type=\"button\" value=\"{0}\" class=\"{1}\" /> <span>A tu jeszcze jakiś teks kontrolki: {2}</span>", this.ButtonText, this.CssClass, this.Text));
}

Jeśli bazowałeś na tym (drugi link):
http://msdn.microsoft.com/en-us/library/zt27tfhy.aspx
http://msdn.microsoft.com/en-us/library/yhzc935f.aspx
to nadpisali RenderContents, bo dziedziczyli z Label, która renderuje się w postaci Text, więc nie modyfikowali renderowania tagu span, tylko to co w środku. Tu bardzo wiele zależy od tego czy dziedziczysz z ogólnej System.Web.UI.WebControls.WebControl, czy nawet System.Web.UI.WebControls.Control, czy właśnie jak w przykładzie na MSDN rozszerzasz jakąś istniejącą kontrolkę.
W przypadku roszerzania/modyfikacji istniejącej należy dokładnie zdawać sobie sprawę z tego jak renderuje się dana kontrolka, aby wiedzieć którą jej część chce się zmodyfikować.

0
 [DefaultProperty("Text")]
[ToolboxData("<{0}:WebCustomControl1 runat=server></{0}:WebCustomControl1>")]
public class WebCustomControl1 : WebControl
{
    private Button btnOk;

    [Bindable(true)]
    [Category("Appearance")]
    [DefaultValue("")]
    [Localizable(true)]
    public string Text
    {
        get
        {
            String s = (String)ViewState["Text"];
            return ((s == null) ? String.Empty : s);
        }

        set
        {
            ViewState["Text"] = value;
        }
    }

    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);

        this.btnOk = new Button();
        this.btnOk.Text = "Wciśnij mnie";
    }

    protected override void RenderContents(HtmlTextWriter output)
    {
        output.Write(Text);

        this.btnOk.RenderControl(output);
    }
}
0

To jest plik utworzony tuz po dodaniu server control ja tu nic nie zmienialem i teraz pytam w jaki sposob do tego kodu dodac sobie texbox, button czy co mi tam sie jeszcze podoba, u gory na kodzie jesli moge prosic pokazcie w jaki sposob to dodac?

Ok dzieki somekind a jeszcze w jaki sposob ta kontrolke jak gdyby zaktualizowac?Zeby pokazala mi tego buttonika usunalem dll i wstawile raz jeszcze no ale nadal jest tylko napis ServerControl bez buttona ?

ok znalazlem co i jak dzieki raz jeszcze :D

Jeszcze jedno, jak dodac zdarzenie np dla tego buttona ze po kliknieciu np wyswietli sie messagebox?

0

Wystawić event w kontrolce, pod który podepnie się strona i wyświetli messagebox.
Lub w kontrolce obsłużyć kliknięcie, ale to fatalne rozwiązanie, bo nie wiesz czy każdy będzie chciał pokazywać messagebox tak samo. Chyba że masz na myśli javascriptowy alert.

0

Jaki niby MessageBox? To nie jest WinForms!

1 użytkowników online, w tym zalogowanych: 0, gości: 1