Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di Kahm
    Registrato dal
    Dec 2004
    residenza
    Rome
    Messaggi
    3,582

    [vb.net 2003]problema con userControl e properties

    salve a tutti
    sto studiando gli usercontrol con vb.net 2003
    ho creato un user con nome "Filtro.ascx"

    quindi lo ho trascinato su un webform
    ho notato che ha aggiunto il tag register in automatico
    codice:
    <%@ Register TagPrefix="uc1" TagName="Filtro" Src="Filtro.ascx" %>
    e mi ha messo il codice per riconoscerlo nell'html
    codice:
    <uc1:filtro id="a" runat="server" ></uc1:filtro>
    ok fin qui tutto bene, almeno spero(correggetemi se ho sbagliato qualcosa)
    il bello è che ho diverse properties nel file controllo, eppure nella barra a destra delle proprietà non le vedo, anzi se digito nel codice "a." non mi fa vedere nessuna delle proprietà

    cosa sbaglio? devo fare qualcosa in particolare?
    grazie
    NN vi diro mai chi sono in realta,
    tutti i miei 3D sono orfani, non insistete per farmi rispondere ai 3D aperti da me

  2. #2
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Ti faccio un esempio semplice

    user control WebUserControl1.ascx
    codice:
    <%@ Control Language="vb" AutoEventWireup="false" Codebehind="WebUserControl1.ascx.vb" Inherits="WebApplication1.WebUserControl1" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %>
    <asp:LinkButton id="LinkButton_indietro" runat="server">Indietro</asp:LinkButton>
    <asp:label id="Label_numero" runat="server"></asp:label>
    <asp:linkbutton id="LinkButton_avanti" runat="server">Avanti</asp:linkbutton>
    codice user control
    codice:
    Public Class WebUserControl1
        Inherits System.Web.UI.UserControl
    
    #Region " Codice generato da Progettazione Web Form "
    
        'Chiamata richiesta da Progettazione Web Form.
        <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
    
        End Sub
        Protected WithEvents LinkButton_avanti As System.Web.UI.WebControls.LinkButton
        Protected WithEvents Label_numero As System.Web.UI.WebControls.Label
        Protected WithEvents LinkButton_indietro As System.Web.UI.WebControls.LinkButton
    
        'NOTA: la seguente dichiarazione è richiesta da Progettazione Web Form.
        'Non spostarla o rimuoverla.
        Private designerPlaceholderDeclaration As System.Object
    
        Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
            'CODEGEN: questa chiamata al metodo è richiesta da Progettazione Web Form.
            'Non modificarla nell'editor del codice.
            InitializeComponent()
        End Sub
    
    #End Region
    
        'definisco l'evento che si scatena al cambio del numero
        Public Event NumberChanged(ByVal sender As Object, ByVal e As EventArgs)
    
    
        Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            'Inserire qui il codice utente necessario per inizializzare la pagina
            Me.Label_numero.Text = numero
        End Sub
    
    
    
        'definisco un proprità pubblica numero, intero, >= 0, predefinito = 0
        Private _numero As Integer = Integer.MinValue 'valore sicuramente non valido
        Public Property numero() As Integer
            Get
                'se il numero non è valido
                If Me._numero = Integer.MinValue Then
                    'ripristino il viewstate solo quando la proprietà viene letta per la prima volta
                    Dim o As Object = Me.ViewState("numero")
                    If Not (o Is Nothing) Then
                        Me._numero = CInt(o)
                    Else
                        Me._numero = 0 'valore predefinito
                    End If
                End If
                Return Me._numero
    
            End Get
            Set(ByVal Value As Integer)
                If Value >= 0 Then
                    Me._numero = Value
    
                    'lo salvo
                    Me.ViewState("numero") = Value
    
                    'aggiorno la label
                    Me.Label_numero.Text = Value.ToString
    
                    'scateno l'evento
                    RaiseEvent NumberChanged(Me, EventArgs.Empty)
    
                End If
            End Set
        End Property
    
    
        Private Sub LinkButton_avanti_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles LinkButton_avanti.Click
            numero += 1
        End Sub
    
        Private Sub LinkButton_indietro_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles LinkButton_indietro.Click
            If numero > 0 Then numero -= 1
        End Sub
    End Class
    pagina che utilizza l'user control
    codice:
    <%@ Register TagPrefix="uc1" TagName="WebUserControl1" Src="WebUserControl1.ascx" %>
    <%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="WebApplication1.WebForm1"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <html>
      <head>
    		<title>WebForm1</title>
    		<meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1">
    		<meta name="CODE_LANGUAGE" content="Visual Basic .NET 7.1">
    		<meta name="vs_defaultClientScript" content="JavaScript">
    		<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
      </head>
    	<body>
    		<form id="Form1" method="post" runat="server">
    			
    
    
    				<uc1:webusercontrol1 id="WebUserControl11" runat="server"></uc1:webusercontrol1>
    			</p>
    			<p id="p1" runat="server"></p>
    			
    
    <asp:linkbutton id="LinkButton1" runat="server">Refresh</asp:linkbutton></p>
    		</form>
    	</body>
    </html>
    codice
    codice:
    Public Class WebForm1
        Inherits System.Web.UI.Page
    
    #Region " Codice generato da Progettazione Web Form "
    
        'Chiamata richiesta da Progettazione Web Form.
        <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
    
        End Sub
        Protected WithEvents LinkButton1 As System.Web.UI.WebControls.LinkButton
        Protected WithEvents p1 As System.Web.UI.HtmlControls.HtmlGenericControl
    
        'NOTA: la seguente dichiarazione è richiesta da Progettazione Web Form.
        'Non spostarla o rimuoverla.
        Private designerPlaceholderDeclaration As System.Object
    
        Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
            'CODEGEN: questa chiamata al metodo è richiesta da Progettazione Web Form.
            'Non modificarla nell'editor del codice.
            InitializeComponent()
        End Sub
    
    #End Region
    
        Protected WithEvents WebUserControl11 As WebUserControl1
    
        Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            'imposto la proprietà numero dell'user control
            If Not Me.IsPostBack Then
                Me.WebUserControl11.numero = 10
            End If
    
        End Sub
    
        Private Sub WebUserControl11_NumberChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles WebUserControl11.NumberChanged
            'intercetto l'evento dell'user control
            Me.p1.InnerText = String.Format("Ho cambiato il numero: {0}", Me.WebUserControl11.numero)
        End Sub
    End Class
    Pietro

  3. #3
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887

    Re: [vb.net 2003]problema con userControl e properties

    Originariamente inviato da Kahm
    cosa sbaglio? devo fare qualcosa in particolare?
    grazie
    A parte l'esempio fatto, ma hai dichiarato lo UC nel code-behind ?

    codice:
    Protected WithEvents a as NomeClasseFiltro
    ?


    Comunque, esiste un altro metodo. Senza Register e senza il tag dello UC nell'Html.
    Se metti un PlaceHolder nell'ASPX, nel punto dove vuoi che venga visualizzato lo UserControl, puoi caricarlo da codice in questo modo:

    codice:
    Dim objFiltro As New TuoProgetto.NomeClasseFiltro
    objFiltro = DirectCast(LoadControl("filtro.ascx"), NomeClasseFiltro)
    objFiltro. [etc]
    
    TuoPlaceholder.Controls.Add(objFiltro)

  4. #4
    Utente di HTML.it L'avatar di Kahm
    Registrato dal
    Dec 2004
    residenza
    Rome
    Messaggi
    3,582
    si ok
    ora provo il vostro esempio

    cmq quando parlavo di proprietà intendevo quelle a livello visuale, di visual studio (parte desta)
    NN vi diro mai chi sono in realta,
    tutti i miei 3D sono orfani, non insistete per farmi rispondere ai 3D aperti da me

  5. #5
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Originariamente inviato da Kahm
    si ok
    ora provo il vostro esempio

    cmq quando parlavo di proprietà intendevo quelle a livello visuale, di visual studio (parte desta)
    Gli UserControls non sono supportati interamente dall'IDE.
    Quando ne vedi le proprietà credo ti faccia vedere quelle generiche della classe UserControl.

    Per un supporto maggiore di Visual Studio, (ad esempio per dare una icona al controllo e per metterlo nella ToolBox a sinistra) devi sviluppare dei CustomControl (che ereditano da System.Web.UI.WebControls.WebControl invece che da System.Web.UI.UserControl)

  6. #6
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    :master: secondo me, l'amico ha dimenticato proprio

    Protected WithEvents a as NomeClasseFiltro


    Pietro

  7. #7
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Originariamente inviato da pietro09
    :master: secondo me, l'amico ha dimenticato proprio

    Protected WithEvents a as NomeClasseFiltro


    Allora gli basterà switchare da Progettazione ad Html e VS2003 aggiungerà da solo la dichiarazione

    Meno male che dalla 2.0 non c'e' più bisogno di sto giochetto

  8. #8
    Utente di HTML.it L'avatar di Kahm
    Registrato dal
    Dec 2004
    residenza
    Rome
    Messaggi
    3,582
    grazie a tutti siete stati gentilissimi
    grazie a voi ho trovato la soluzione

    ora solo una questione , ma si tratta di un chiarimetno non di un problema,

    ho visto il codcie di pietro09, ed ho notato che nella property lui setta nel view state il valore quando si imposta la property e legge dal viewstate quando si esegue il GET

    ancora devo finire la stesura del codice del controllo, ed ovviamente è una delle ultime cose che devo scrivere è questa procedura di scrittura/lettura dal viewstate

    pensavo che asp.net salvasse tutto lo stato del controllo in automatico già nel viewstate, quindi devo scrivere appositamente il codice per valorizzare il valore?

    grazie del chiarimento
    NN vi diro mai chi sono in realta,
    tutti i miei 3D sono orfani, non insistete per farmi rispondere ai 3D aperti da me

  9. #9
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    :master: Il mio era solo un esempio, ma credo utile per la sua semplicità.

    Quando hai una variabile o proprietà che vuoi salvare, o la salvi nella session o nel viewstate. .Net non te la salva certo lui in automatico.

    E' chiaro che la variabile puoi salvarla in una label o in un hidden. In questo caso lo stato è salvato da .Net in automatico.
    Pietro

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.