Discussion:
deshabilitar una pestaña del tabcontrol
(demasiado antiguo para responder)
Miguel F
2009-03-15 12:47:52 UTC
Permalink
Hola amigos. ¿ domo puedo deshabilitar una pestaña del tabcontrol? por mas
vueltas que lo doy no veo como hacerlo.

gracias
SoftJaén
2009-03-15 15:30:10 UTC
Permalink
¿domo puedo deshabilitar una pestaña del tabcontrol? por mas vueltas que
lo doy no veo como hacerlo.
Si te refieres a deshabilitar todos los controles existentes en un control
TabPage de un contenedor TabControl, tienes que establecer el valor «False»
a su propiedad «Enabled»:

TabPage2.Enabled = Not TabPage2.Enabled

Salvo que esté equivocado, el control TabPage, tal y como se encuentra
implementado, no se puede deshabilitar; puedes deshabilitar sus controles,
pero no el control propiamente dicho.

No obstante, échale un vistazo al código fuente publicado por Éric Moreau
que encontrarás en el enlace de abajo, para ver si realmente deshabilita el
control TabPage:

http://groups.google.com/group/microsoft.public.dotnet.framework.windowsforms/browse_thread/thread/e06bf456e9141e18/f6d68a66af4d992d?lnk=st&q=tabpage+disable+author%3AMoreau&rnum=4&hl=en#f6d68a66af4d992d

Te advierto que no lo he probado.

Como alternativa, puedes eliminar el control, y añadirlo nuevamente, cuando
lo estimes conveniente:

- A nivel del formulario:

Private tp As TabPage

- Para eliminarlo:

tp = TabControl1.TabPages("Tabpage2")
TabControl1.Controls.Remove(TabControl1.TabPages("TabPage2"))

- Para añadirlo nuevamente:

TabControl1.Controls.Add(tp)
--
Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.
SoftJaén
2009-03-15 16:25:56 UTC
Permalink
Ahora que me he parado en revisar el código fuente de Éric Moreau que te he
indicado (que por cierto funciona), la verdad es que se puede hacer lo mismo
de una manera un poco más fácil.

Si tu intención es que se pueda deshabilitar la pestaña o control TabPage de
un control TabControl, de tal forma que no pueda ser seleccionada por el
usuario mientras se encuentre deshabilitada, pienso que es cuestión de
"jugar un poquito" con el evento «Selecting» del control TabControl, el cual
se desencadena cada vez que se selecciona una pestaña o control TabPage. Si
éste control se encuentra deshabilitado, sería cuestión de cancelar el
evento, tal y como muestra el siguiente código:

Private Sub TabControl1_Selecting( ... )

' Referenciamos el control TabPage que ha sido seleccionado
'
Dim tp As TabPage = e.TabPage

' Cancelamos la selección si el control
' se encuentra deshabilitado.
'
e.Cancel = Not tp.Enabled

End Sub
--
Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.
Miguel F
2009-03-16 15:01:22 UTC
Permalink
la idea no es deshabilitar los controles, sino la pestaña, es decir, un
tabcontrol con varias pestañas y que el usuario solo tenga permiso para ver
algunas, que no pueda ver el contenido de la pestaña. Si en vb6 habia un
tabenabled, por que en .net es tan complicado deshabilitar una pestaña? ¿por
que no han puesto la propiedad enabled en el tabpages?

intentare hacer este codigo a ver si me vale, gracias amigo.

un saludo
Post by SoftJaén
Ahora que me he parado en revisar el código fuente de Éric Moreau que te
he indicado (que por cierto funciona), la verdad es que se puede hacer lo
mismo de una manera un poco más fácil.
Si tu intención es que se pueda deshabilitar la pestaña o control TabPage
de un control TabControl, de tal forma que no pueda ser seleccionada por
el usuario mientras se encuentre deshabilitada, pienso que es cuestión de
"jugar un poquito" con el evento «Selecting» del control TabControl, el
cual se desencadena cada vez que se selecciona una pestaña o control
TabPage. Si éste control se encuentra deshabilitado, sería cuestión de
Private Sub TabControl1_Selecting( ... )
' Referenciamos el control TabPage que ha sido seleccionado
'
Dim tp As TabPage = e.TabPage
' Cancelamos la selección si el control
' se encuentra deshabilitado.
'
e.Cancel = Not tp.Enabled
End Sub
--
Enrique Martínez
[MS MVP - VB]
Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado
o sugerido en el presente mensaje.
SoftJaén
2009-03-16 15:41:06 UTC
Permalink
Si en vb6 habia un tabenabled, por que en .net es tan
complicado deshabilitar una pestaña?
¿por que no han puesto la propiedad enabled en el
tabpages?
Como se decía en el ejército, «las quejas al maestro armero». :-)
la idea no es deshabilitar los controles, sino la pestaña, es decir, un
tabcontrol con varias pestañas y que el usuario solo tenga permiso
para ver algunas, que no pueda ver el contenido de la pestaña.
Simplemente tienes que hacer lo que te he comentado en mi segunda respuesta.
Por supuesto, previamente tienes que deshabilitar el control TabPage
(pestaña):

TabPage2.Enabled = Not TabPage2.Enabled
--
Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado
o sugerido en el presente mensaje.
Miguel F
2009-03-16 15:46:06 UTC
Permalink
vale, voy a probar.

gracias
Post by SoftJaén
Si en vb6 habia un tabenabled, por que en .net es tan
complicado deshabilitar una pestaña?
¿por que no han puesto la propiedad enabled en el
tabpages?
Como se decía en el ejército, «las quejas al maestro armero». :-)
la idea no es deshabilitar los controles, sino la pestaña, es decir, un
tabcontrol con varias pestañas y que el usuario solo tenga permiso
para ver algunas, que no pueda ver el contenido de la pestaña.
Simplemente tienes que hacer lo que te he comentado en mi segunda
respuesta. Por supuesto, previamente tienes que deshabilitar el control
TabPage2.Enabled = Not TabPage2.Enabled
--
Enrique Martínez
[MS MVP - VB]
Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado
o sugerido en el presente mensaje.
Miguel F
2009-03-16 15:47:46 UTC
Permalink
no es por ser pesado, pero no veo la propiedad enabled en el objeto tabpage1

andandara?
Post by SoftJaén
Si en vb6 habia un tabenabled, por que en .net es tan
complicado deshabilitar una pestaña?
¿por que no han puesto la propiedad enabled en el
tabpages?
Como se decía en el ejército, «las quejas al maestro armero». :-)
la idea no es deshabilitar los controles, sino la pestaña, es decir, un
tabcontrol con varias pestañas y que el usuario solo tenga permiso
para ver algunas, que no pueda ver el contenido de la pestaña.
Simplemente tienes que hacer lo que te he comentado en mi segunda
respuesta. Por supuesto, previamente tienes que deshabilitar el control
TabPage2.Enabled = Not TabPage2.Enabled
--
Enrique Martínez
[MS MVP - VB]
Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado
o sugerido en el presente mensaje.
SoftJaén
2009-03-16 15:53:37 UTC
Permalink
Post by Miguel F
no es por ser pesado, pero no veo la propiedad enabled en el objeto tabpage1
andandara?
No te preocupes porque no puedas ver la propiedad «Enabled» del control
TabPage. Limítate a asignarle un valor True/False y verás como funciona. :-)
--
Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado
o sugerido en el presente mensaje.
Miguel F
2009-03-16 15:58:10 UTC
Permalink
gracias SoftJaén eres uno de los maestros de este foro, ¿donde puedo comprar
el libro llamado "propiedades ocultas del .Net? asi no os doy la brasa.

un saludo.

P.D. es broma
Post by SoftJaén
Post by Miguel F
no es por ser pesado, pero no veo la propiedad enabled en el objeto tabpage1
andandara?
No te preocupes porque no puedas ver la propiedad «Enabled» del control
TabPage. Limítate a asignarle un valor True/False y verás como funciona. :-)
--
Enrique Martínez
[MS MVP - VB]
Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado
o sugerido en el presente mensaje.
unknown
2009-10-07 14:11:29 UTC
Permalink
1 agregar el tab
2 agregar el componente ToolTip de la barra de herramientas ( se encuentra bajo el texbox)
3 en las propiedades del controltab ubicar "modifiers"
y establecer en public

4 agregar el codigo
SSTab1.TabPages.Item(1).Enabled = False

y listo por algun motivo q desconosco despues de item(1). >> no aparece ".enabled" pero lo escriben y no da error y funciona

Atte. Victor Soto




SoftJa?n wrote:

Re: deshabilitar una pesta?a del tabcontrol
16-mar-09

"Miguel F" escribi?

No te preocupes porque no puedas ver la propiedad ?Enabled? del control
TabPage. Lim?tate a asignarle un valor True/False y ver?s como funciona. :-

--
Enrique Mart?ne
[MS MVP - VB

Nota informativa: La informaci?n contenida en este mensaje, as? como e
c?digo fuente incluido en el mismo, se proporciona ?COMO EST??, si
garant?as de ninguna clase, y no otorga derecho alguno. Usted asum
cualquier riesgo al poner en pr?ctica, utilizar o ejecutar lo recomendad
o sugerido en el presente mensaje.

EggHeadCafe - Software Developer Portal of Choice
HOSTING THE CLR IN SQL SERVER 2005
http://www.eggheadcafe.com/tutorials/aspnet/8b404153-a952-4a7e-9eca-22ec7f387aea/hosting-the-clr-in-sql-se.aspx
Miguel F
2009-03-16 15:55:37 UTC
Permalink
eso de poner tabpage dentro de un tabcontrol esta muy bien y es una idea
genial, pero como se cambia el color del texto de la pesaña? me estoy
calentando yo solito, ¿por que han hecho este control tan complicado de
usar? este control es menos intuitivo que jugar al waterpolo


a ver, les voy a enseñar a estos del .net , no era mas facil poner:

Tabcontrol.Tab(0).TextColor = color.red
Tabcontrol.Tab(0).Enabled = false
TabControl.Tab(0).Visible = True
Tabconrol.Tab(0).PropiedadNecesariaParaContolarEstaPestaña = asi mas
facil


digo yo vamos.

un saludo.
Post by SoftJaén
Si en vb6 habia un tabenabled, por que en .net es tan
complicado deshabilitar una pestaña?
¿por que no han puesto la propiedad enabled en el
tabpages?
Como se decía en el ejército, «las quejas al maestro armero». :-)
la idea no es deshabilitar los controles, sino la pestaña, es decir, un
tabcontrol con varias pestañas y que el usuario solo tenga permiso
para ver algunas, que no pueda ver el contenido de la pestaña.
Simplemente tienes que hacer lo que te he comentado en mi segunda
respuesta. Por supuesto, previamente tienes que deshabilitar el control
TabPage2.Enabled = Not TabPage2.Enabled
--
Enrique Martínez
[MS MVP - VB]
Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado
o sugerido en el presente mensaje.
SoftJaén
2009-03-16 16:29:53 UTC
Permalink
Post by Miguel F
como se cambia el color del texto de la pesaña?
Esto ya es un pelín más complicado de hacer. Te dejo el siguiente tip
gentileza del maestro Eduardo A. Morcillo:

Tienes que establecer el valor «OwnerDrawFixed» a la propiedad «DrawMode»
del control TabControl:

TabControl1.DrawMode = TabDrawMode.OwnerDrawFixed

Y en su evento «DrawItem» dibujarías las pestañas, donde le puedes indicar
el color de fondo y de primer plano que deseas que tengan:

Private Sub TabControl1_DrawItem( _
ByVal sender As Object, _
ByVal e As DrawItemEventArgs) Handles TabControl1.DrawItem

Dim g As Graphics = e.Graphics
Dim page As TabPage = _
CType(sender, TabControl).TabPages(e.Index)

' Color de fondo de la pestaña
Dim bc As New SolidBrush(Color.AliceBlue)

' Color de primer plano de la pestaña
Dim fc As New SolidBrush(Color.Blue)

Dim sf As New StringFormat
Dim rect As New RectangleF( _
e.Bounds.X, e.Bounds.Y, _
e.Bounds.Width, e.Bounds.Height)

g.FillRectangle(bc, e.Bounds)
sf.Alignment = StringAlignment.Center
sf.LineAlignment = StringAlignment.Center
g.DrawString(page.Text, page.Font, fc, rect, sf)

sf.Dispose()
fc.Dispose()

End Sub

Ahora, no me preguntes como colorear individualmente cada pestaña, porque de
antemano te digo que por ahora lo ignoro.

Y ya puestos, si deseas que el ancho de las pestañas ocupen el ancho del
control TabControl, ejecuta lo siguiente en el evento «Load» del formulario,
también por gentilieza de Eduardo A. Morcillo:

TabControl1.SizeMode = TabSizeMode.Fixed
TabControl1.ItemSize = New Size( _
CInt(TabControl1.Width / TabControl1.TabCount - 2), 22)
--
Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado
o sugerido en el presente mensaje.
Loading...