Width e hight in un controllo personalizzato

giovedì 30 aprile 2009 - 23.04

venzo Profilo | Junior Member

Ho visto molti esempi di creazione di controlli personalizzati in asp.net.
Il problema che non ho visto risolto è il passaggio di parametri Width e height: rendere cioè il controllo dimensionabile.
Come poter creare un controllo personalizzato che possa essere dimensionabile con i parametri width="250" etc...?

rossimarko Profilo | Guru

Ciao,

il tuo controllo si appoggia ad altri controlli o crea in maniera del tutto autonoma l'html?

Di solito si riportano i valori nell'html, ad esempio utilizzando un div che faccia da contenitore e impostando i valori nello stile del div.

Se altrimenti stai creando un controllo che si basa su altri controlli puoi utilizzare un panel o un controllo simile come contenitore di tutti gli altri e impostare le sue proprietà.

Considera infine che se erediti da webcontrol le proprietà sono già esposte: http://msdn.microsoft.com/it-it/library/system.web.ui.webcontrols.webcontrol.width.aspx

-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

venzo Profilo | Junior Member

Ti riporto l'esempio tratto dalla pagina di Microsoft: http://msdn.microsoft.com/it-it/library/26db8ysc(VS.80).aspx

-------------------------------- codice vb --------------------------

<%@ Control Language="VB" ClassName="Spinner" %>
<script runat="server">
Private m_minValue As Integer = 0
Private m_maxValue As Integer = 100
Private m_currentNumber As Integer = 0
Public Property MinValue() As Integer
Get
Return m_minValue
End Get
Set(ByVal value As Integer)
If value >= Me.MaxValue Then
Throw New Exception _
("MinValue must be less than MaxValue.")
Else
m_minValue = value
End If
End Set
End Property

Public Property MaxValue() As Integer
Get
Return m_maxValue
End Get
Set(ByVal value As Integer)
If value <= Me.MinValue Then
Throw New Exception _
("MaxValue must be greater than MinValue.")
Else
m_maxValue = value
End If
End Set
End Property

Public ReadOnly Property CurrentNumber() As Integer
Get
Return m_currentNumber
End Get
End Property

Protected Sub Page_Load(ByVal sender As Object, _
ByVal e As System.EventArgs)
If IsPostBack Then
m_currentNumber = CInt(ViewState("currentNumber"))
Else
m_currentNumber = Me.MinValue
End If
DisplayNumber()
End Sub

Protected Sub DisplayNumber()
textNumber.Text = Me.CurrentNumber.ToString()
ViewState("currentNumber") = Me.CurrentNumber.ToString()
End Sub

Protected Sub buttonUp_Click(ByVal sender As Object, _
ByVal e As System.EventArgs)
If m_currentNumber = Me.MaxValue Then
m_currentNumber = Me.MinValue
Else
m_currentNumber += 1
End If
DisplayNumber()
End Sub

Protected Sub buttonDown_Click(ByVal sender As Object, _
ByVal e As System.EventArgs)
If m_currentNumber = Me.MinValue Then
m_currentNumber = Me.MaxValue
Else
m_currentNumber -= 1
End If
DisplayNumber()
End Sub
</script>
<asp:TextBox ID="textNumber" runat="server"
ReadOnly="True" Width="32px" Enabled="False" />
<asp:Button Font-Bold="True" ID="buttonUp" runat="server"
Text="^" OnClick="buttonUp_Click" />
<asp:Button Font-Bold="True" ID="buttonDown" runat="server"
Text="v" OnClick="buttonDown_Click" />
-----------------------------------------------------------------------------------

--------------------- codice asp -------------------------------------------

<uc:Spinner ID="Spinner1" runat="server" MinValue=0 MaxValue=10 />

--------------------------------------------------------------------------------

Quello che vorrei implementare è la possibilità di definire anche la larghezza e l'altezza del controllo dalla pagina ASP:

<uc:Spinner ID="Spinner1" runat="server" style="width : 500px; Height=25px;" MinValue=0 MaxValue=10 />



4mane Profilo | Junior Member

Prova un po' così:

Spinner1.Style.Add("width", "500px") Spinner1.Style.Add("height", "25px")

rossimarko Profilo | Guru

>Quello che vorrei implementare è la possibilità di definire anche
>la larghezza e l'altezza del controllo dalla pagina ASP:
>
><uc:Spinner ID="Spinner1" runat="server" style="width : 500px;
>Height=25px;" MinValue=0 MaxValue=10 />
>

Per capire come procedere dovresti guardare come viene renderizzato il controllo nella pagina web. Viene inserito un div che fa da contenitore dei controlli (textbox e button) oppure no?
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

venzo Profilo | Junior Member

Nel controllo non ho inserito nessun tag <div> o <Table>
Sbaglio a non usarli? Comunque ti posto un esempio semplicissimo del controllo utente, dove non riesco ad usare gli Style:

<%@ Control Language="VB" AutoEventWireup="false" CodeFile="TestControlVB.ascx.vb" Inherits="TestControlVB" %>
<asp:TextBox ID="textboxVB" runat="server"></asp:Label>

Poi negli eventi , faccio alcuni controlli per restituire il risultato.


rossimarko Profilo | Guru

>Nel controllo non ho inserito nessun tag <div> o <Table>
>Sbaglio a non usarli? Comunque ti posto un esempio semplicissimo
>del controllo utente, dove non riesco ad usare gli Style:

Potresti usare un div come contenitore dei tuoi controlli semplicemente per impostare la larghezza e l'altezza.

Una cosa del tipo

<%@ Control Language="VB" AutoEventWireup="false" CodeFile="TestControlVB.ascx.vb" Inherits="TestControlVB" %> <div id="ctrlContainer" runat="server"> <asp:TextBox ID="textboxVB" runat="server"></asp:TextBox > </div>

Comunque prima di usarlo verifica che codice html viene renderizzato nel browser. Nel caso riportato controlla se viene inserita solo la textbox o se implicitamente viene creato anche uno span/div come contenitore (ovviamente parlo del caso in cui non hai messo tu un div)

-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5