Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [ASP.NET 3.5 VB] controllo utente

    ciao.
    ho creato un UC con dei bottoni che dovrei aggiungere ad ogni pagina web.
    le azioni dei pulsanti dovrebbero essere differenti da pagina a pagina quindi devo accedere ad ogni bottone e cambiare le azioni (ENABLE = false, postbackUrl, oppure catturare l'evento onClick)

    <%@ Control Language="VB" AutoEventWireup="false" CodeFile="Botton.ascx.vb" Inherits="_Controls_Botton" %>



    <div align="center">
    <table class="table">

    <tr>
    <td width="60">
    <asp:Button ID="Cbtn_search" runat="server"
    Text="Search" CssClass="btnheader" Enabled="True"/>
    </td>
    <td width="60">
    <asp:Button ID="Cbtn_Delete" runat="server" Text="Delete" Width="70px"
    Enabled="False" CssClass="btnheader" />
    </td>

    <td width="60">
    <asp:Button ID="Cbtn_Save" runat="server" Text="Save" Width="85px"
    Enabled="true" CssClass="btnheader" />
    </td>
    <td width="60">
    <asp:Button ID="Cbtn_exit" runat="server" Text="Exit" Width="70px"
    CssClass="btnheader" Enabled="True" />
    </td>
    </tr>
    </table>
    </div>
    ho provato a titolo di esempio a creare una classe nel mio UC per passare come paramentro il tasto Cbtn_save

    Partial Class _Controls_Botton
    Inherits System.Web.UI.UserControl

    Public Property save() As Button
    Get
    Return cbtn_Save
    End Get
    Set(ByVal value As Button)
    cbtn_Save = value
    End Set
    End Property

    End Class

    Nella mia pagina ASPx ho aggiunto

    .....
    <%@ Register TagPrefix="uc" TagName="bottoni" Src="~/_Controls/botton.ascx" %>
    .....
    .....
    <uc:bottoni id="UserCtrl" runat="server" />
    ....
    come faccio dal VB a leggere e scrivere sulla Property save del UC?

    grazie
    Delfino Cobalto

  2. #2
    l'approccio che hai usato è errato, poiché non ti risolve il problema.
    Esponendo delle proprietà che devono essere settate, richiede comunque la creazione dei bottoni su ogni pagina, quindi il tuo problema di replicare i bottoni rimane.

    Piuttosto crea il tuo userControl con tutti i bottoni che ti servono, aggiungi un evento per ogni bottone che poi lancerai alla pagina contenitore quando l'utente farà click.

  3. #3
    grazie per la risposta.

    infatti il mio User control ha gia tutti i bottoni che mi servono

    come si fa a fare gestire l'Handles dei singoli bottoni dalla pagina ASPX?


    per me è importante poter disattivare i pulsanti dalla pagina ASPx all'occorrenza

    grazie
    Delfino Cobalto

  4. #4
    Nessuno ha la soluzione al suo problema?

  5. #5
    allora, tagliamo la testa al toro e facciamo una cosa semplice e veloce anche se non proprio pulita ed elegante:

    Controllo con i bottoni aspx:
    codice:
    <asp:Button ID="btnSalva" runat="server" Text="Salva" />
    <asp:Button ID="btnElimina" runat="server" Text="Elimina" />
    <asp:Button ID="btnModifica" runat="server" Text="Modifica" />
    e codice:
    codice:
    public partial class raccoltaBottoni : System.Web.UI.UserControl
    {
        public IButtonControl BottoneSalva { get { return btnSalva; } private set; }
        public IButtonControl BottoneElimina { get { return btnElimina; } private set; }
        public IButtonControl BottoneModifica { get { return btnModifica; } private set; }
    }
    In questo modo si espongono direttamente i bottoni

    dalle varie pagine quindi, puoi customizzare i controlli di volta in volta sia per eventi che per proprietà. Ecco un piccolo esempio:
    codice:
    protected void Page_Load(object sender, EventArgs e)
    {
        (raccoltaBottoni1.BottoneModifica as Button).Click += new EventHandler(btnModifica_Click);
        (raccoltaBottoni1.BottoneElimina as Button).Enabled = false;
        (raccoltaBottoni1.BottoneSalva as Button).Visible = false;
    }
    
    void btnModifica_Click(object sender, EventArgs e)
    {
        throw new NotImplementedException();
    }
    Con questo codice ho disabilitato "Elimina", nascosto "Salva" e agganciato una funzione proprietaria nella pagina, al click su Modifica.

    ciao

  6. #6
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Per completezza, per acchiappare un evento generato da uno UC da una pagina che lo ospita, devi creare INTERNAMENTE ALLO UC un evento public e farne il raise quando l'evento che vuoi gestire dall'esterno viene sollevato. Cerca in rete, ci sono tanti esempi.

    Nel tuo caso comunque, non e' quello che ti serve.
    Ti serve rendere pubbliche le proprieta' che devi attivare/disattivare, come da esempio fatto da Gluck.

  7. #7
    perdonatemi ma non riesco a convertire il c# in VB
    i tools di conversione automatica traducono in questo modo

    codice:
     Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
            TryCast(UserCtrl.BottoneModifica, Button).Click = New EventHandler(AddressOf btnModifica_Click)
            TryCast(UserCtrl.BottoneModifica, Button).Enabled = False
            TryCast(UserCtrl.BottoneSalva, Button).Visible = False
    
        End Sub
    
    
        Private Sub btnModifica_Click(ByVal sender As Object, ByVal e As EventArgs)
            Throw New NotImplementedException()
        End Sub
    ma VS mi da un errore

    Errore 8
    'Public Event Click(sender As Object, e As System.EventArgs)' è un evento e non può essere chiamato direttamente.
    Utilizzare un'istruzione 'RaiseEvent' per generare un evento.
    gli eventi non sono il mio forte

    potete aiutarmi?

    Grazie
    Delfino Cobalto

  8. #8
    codice:
     Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
            DirectCast(UserCtrl.BottoneModifica, Button).Click = _
              AddHandler btnModifica.Click, AddressOf btnModifica_Click
            DirectCast(UserCtrl.BottoneModifica, Button).Enabled = False
            DirectCast(UserCtrl.BottoneSalva, Button).Visible = False
        End Sub
    
    
        Private Sub btnModifica_Click(ByVal sender As Object, ByVal e As EventArgs)
            Throw New NotImplementedException()
        End Sub
    Ciao,
    b.

  9. #9
    Grazie del contributo ma non funziona..

    forse c'è una mancanza nel controllo utente o nel codice aspx.
    ma richide un RaiseEvent che nonostante le documentazioni in rete non riesco ad implementarlo.

    codice:
    DirectCast(UserCtrl.BottoneModifica, Button).Click = _ 
    AddHandler btnModifica.Click, AddressOf btnModifica_Click

    user control code:
    codice:
    Partial Public Class _Controls_Botton
    
        Inherits System.Web.UI.UserControl
        Public Property BottoneSalva() As IButtonControl
            Get
                Return btnSalva
            End Get
            Private Set(ByVal value As IButtonControl)
            End Set
        End Property
        Public Property BottoneElimina() As IButtonControl
            Get
                Return btnElimina
            End Get
            Private Set(ByVal value As IButtonControl)
            End Set
        End Property
        Public Property BottoneModifica() As IButtonControl
            Get
                Return btnModifica
            End Get
            Private Set(ByVal value As IButtonControl)
            End Set
        End Property
    End Class


    ASP CODE:
    codice:
    Partial Class test1
        Inherits PageBase
    
    
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
    
    'parte che genera errore
    '-------------------------------------
            DirectCast(UserCtrl.BottoneModifica, Button).Click = _
              AddHandler btnModifica.Click, AddressOf btnModifica_Click
    '-------------------------------------------------------
            DirectCast(UserCtrl.BottoneModifica, Button).Enabled = False
            DirectCast(UserCtrl.BottoneSalva, Button).Visible = False
        End Sub
    
        Private Sub btnModifica_Click(ByVal sender As Object, ByVal e As EventArgs)
            Throw New NotImplementedException()
        End Sub
    Delfino Cobalto

  10. #10
    Secondo me stai facendo un pò di confusione.
    Lo scopo dello usercontrol è di contenere oggetti e codice relativo as essi, che altrimenti dovresti inserire in tutte le pagine.
    Gli UserControl sono come delle sottopagine a livello di design e delle classi utente a livello di code-behind.
    Se lo usercontrol deve gestire dei bottoni, farà tutto lui e ti restituirà solo quale bottone è stato premuto. Tutto il codice relativo allo usercontrol che scrivi all'esterno di esso dovrà essere replicato in tutte le pagine del progetto; capisci quindi che è meglio averne il meno possibile.

    Ci credo che da errore, l'addhandler va nella page_load dello usercontrol, ovvero nel contesto ove esiste il bottone btnModifica.

    Il codice da inserire è contestuale al contenitore, quindi nello usercontrol:
    codice:
    AddHandler btnModifica.Click, AddressOf btnModifica_Click
    inoltre, sempre nello usercontrol, devi aggiungere (in cima, dopo l'inherits)
    codice:
    Public Event ButtonClicked(ByVal ButtonName As String)
    La funzione btnModifica_Click sarà più o meno così:
    codice:
      Private Sub btnModifica_Click(ByVal sender As Object, ByVal e As EventArgs)
            raiseEvent ButtonClicked(ctype(sender,Button).id)
        End Sub
    A questo punto, in tutte le pagine che incorporano lo usercontrol avrai:
    codice:
    Private Sub Usercontrol_ButtonClicked(ByVal ButtonName As String)
            'ButtonName contiene l'id del bottone premuto
        End Sub
    Tutto chiaro?

    b.

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.