Avatar billede challengers Nybegynder
25. maj 2004 - 10:10 Der er 6 kommentarer og
1 løsning

2 custom controls på samme side

Hej Eksperter!

Jeg har to custom controls, der skal vises på én og samme side. Men de skal ikke vises samtidig. Begge kontroller implementerer IPostBackDataHandler, så der kan udføres postback. Da de ikke skal vises samtidig, styrer jeg det med at overstyre Visible property'en fra kontrol.
Mit problem er, at den ene kontrol (den der bliver erklæret først) fanger alle postback events (også dem fra den anden kontrol!), selvom kontrollen ikke bliver vist på siden.

Nu vil jeg så gerne vide, om jeg på en eller anden måde kan disable den kontrol, der ikke skal vises, så hver kontrol kun fanger events fra sin egen "child-kontrols".

Så mit spørgsmål er:

Hvordan disabler man en custom control???
Avatar billede jakobg Nybegynder
25. maj 2004 - 10:20 #1
Prøv at lave en disabled-property på din controls: I aspx-siden, hvor de anvendes, starter du så med at sætte dem aktiv/ikke aktiv i Page_load event'en. Denne event skulle gerne køre før control'ernes load-events.
Du bliver også nød til at tage højde for den nye disabled-property i selve control'en: Når den er disabled, skal der ikke udløses nogen events.
Avatar billede challengers Nybegynder
25. maj 2004 - 10:24 #2
Det har jeg sådan set gjort. Mit problem er, at jeg i mine kontroller ikke kan finde ud af, hvordan jeg sørger for, at der ikke bliver udløst nogen events når min property Enabled=False
Avatar billede jakobg Nybegynder
25. maj 2004 - 11:22 #3
Så skal vi vist til at se lidt sourcekode... :)
Avatar billede yellow Nybegynder
25. maj 2004 - 12:23 #4
Implementerer du INamingContainer i din custom control?
Avatar billede yellow Nybegynder
25. maj 2004 - 12:38 #5
Hmm, sad lige og testede med en af Microsofts samples. Ser ikke ud til INamingContainer er nødvendig alligevel.
Den her custom control fungerer med flere instanser af den må din aspx side. Prøv at bruge skelettet fra den.

//-----------------------------------------------------------------------
//  This file is part of the Microsoft .NET SDK Code Samples.
//
//  Copyright (C) Microsoft Corporation.  All rights reserved.
//
//This source code is intended only as a supplement to Microsoft
//Development Tools and/or on-line documentation.  See these other
//materials for detailed information regarding Microsoft code samples.
//
//THIS CODE AND INFORMATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY
//KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
//IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
//PARTICULAR PURPOSE.
//-----------------------------------------------------------------------

using System;
using System.Web;
using System.Web.UI;
using System.Collections;
using System.Collections.Specialized;
using System.Web.UI.WebControls;

namespace NonCompositionSampleControls {

    public class NonComposition2 : Control, IPostBackDataHandler, IPostBackEventHandler {

        private int _value = 0;

        public int Value {

          get {
              return _value;
          }
          set {
              _value = value;
          }
        }

        public bool LoadPostData(String postDataKey, NameValueCollection values) {

          _value = Int32.Parse(values[this.UniqueID]);
          return false;
        }

        public void RaisePostDataChangedEvent() {

          // Part of the IPostBackDataHandler contract.  Invoked if we ever returned true from the
          // LoadPostData method (indicates that we want a change notification raised).  Since we
          // always return false, this method is just a no-op.
        }

        public void RaisePostBackEvent(String eventArgument) {
         
          if (eventArgument == "Add") {
              this.Value++;
          }
          else {
              this.Value--;
          }
        }

        protected override void OnPreRender(EventArgs e) {
          //Page.RegisterPostBackScript();
        }

        protected override void Render(HtmlTextWriter output) {
          output.Write("<h3>Value: <input name=" + this.UniqueID + " type=text value=" + this.Value + "> </h3>");
          output.Write("<input type=button value=Add OnClick=\"jscript:"+ Page.GetPostBackEventReference(this, "Add")+ "\"> |");
          output.Write("<input type=button value=Subtract OnClick=\"jscript:"+ Page.GetPostBackEventReference(this, "Subtract")+ "\">");
        }   
    }   
}
Avatar billede challengers Nybegynder
26. maj 2004 - 08:21 #6
Så vidt jeg ved, så er InamingContainer nødvendig i mit tilfælde, da min custom control består af flere forskellige kontroller...

Jeg er nu gået over til en anden løsning, hvor jeg sætter kontrollerne ind på hver sin side i stedet for.
Avatar billede challengers Nybegynder
26. maj 2004 - 08:22 #7
lukker
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