POR FAVOR! biblioteca de clases

21/06/2006 - 12:34 por Hugo Gsell | Informe spam
Hola. Voy a ser un poco largo... pero creo es necesario.
El objetivo es crear una clase "generica" para crear pantallas de abm de
datos sin acceso a base ni nada
Es decir, un formulario con bonotes nuevo, modificar, grabar, imprimir,
buscar y salir... con sus iconos (imagenes) y comportamientos es decir, por
ej. si hago clic en nuevo que se deshabilite buscar... si estoy modificacndo
no puedo hacer nuevo.. y cosas de ese tipo o sea todo ese manejo es el
que deseo poder heredar a otros objetos.. con 2 o 3 procedimientos
reescribibles (mustoverride) que serian buscar, mostrar registro, y grabar
registro...
Hasta acá mas o menos el objetivo del formulario

Paso a explicar lo que hice:
*inicialmente cree un proyecto aplicacion windows.
*Cree un formulario llamado ABM cree la barra toolstrip (con sus botones
nuevo, grabar, etc) con sus iconos (imagenes)
*Luego programé el comportamiento de los botones y cree los procedimientos
(mustoverride) buscar, mostrar y grabar.

luego cree una clase llamada CLASS1 que heredó de mi clase base es
decir, el codigo del modulo de queda como en CODIGO1 (ver mas abajo) y
donde agrego el método new (para probar) y esta sobreescrito el
procedimiento
Ahora buenísimo... cuando hago doble clic en la clase class1, aparece el
formulario "clonado".
Luego, para probar cree otro formulario con un boton... donde en el evento
clic hace

Dim k As New Class1

y boilá... aparece el formulario CLONADO hasta acá de 10. Ahora quise
crear una biblioteca de clases, para poder crear una dll y utilizar esta
última.
creo el proyecto y en el codigo del formulario me subraya
Partial MustInherit Class ABM
Inherits System.Windows.Forms.Form

me subraya el SYSTEM.WINDOWS.FORMS.FORM diciendo que la misma NO ESTA
INCLUIDA

¿PORQUE ES ESTO? ¿COMO PUEDO SOLUCIONARLO?
Desde ya muchas gracias.

Hugo A. Gsell
Sgo del Estero
Argentina

CODIGO1:
Public Class Class1
Inherits ABM
Sub New()
Me.Show()
End Sub
Private Sub InitializeComponent()
Me.SuspendLayout()
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.ClientSize = New System.Drawing.Size(423, 297)
Me.Name = "Class1"
Me.ResumeLayout(False)
Me.PerformLayout()
End Sub
Public Overrides Sub MuestraRegistro()
'aca va el código de muestra regiostro Modificado (reescrito)
End Sub
End Class

Preguntas similare

Leer las respuestas

#6 Carlos Gómez
21/06/2006 - 18:35 | Informe spam
Hugo Gsell wrote:

bien... GRACIAS... inicialmente funciona...
agregue en las referencias SYSTEM.DRAWING y SYSTEM.WINDOWS.FORMS

ahora el problema es con elementos como CONTROL o TEXTBOX que ambos
deberia... ya que en algunas partes de codigo hago cosas como

Dim Ctrl As Control
For i = 0 To Me.Controls.Count - 1
Ctrl = Me.Controls(i)
If TypeOf Ctrl Is TextBox Then
CType(Ctrl, TextBox).Text = ""
End If
Next i

y me da error en CONTROL y TEXT BOX... si funciona si le pongo
System.Windows.Forms.Control y
System.Windows.Forms.TextBox segun corresponda supongo que esto
deberia poder evitarse... y supongo que tiene
que ver con los namespace pero no se como solucionarlo.

Hugo A. Gsell
Sgo del Estero
Argentina




Pon al principio de la clase:
Imports System.Windows.Forms

el bucle está bien, pero es más sencillo (y puede que tenga mejor
rendimiento) asi:

Dim Ctrl As Control
For Each Ctrl In Me.Controls
If TypeOf(Ctrl) Is TextBox Then
CType(Ctrl, TextBox).Text = ""
End If
Next

Desde Aguadulce - España
Carlos Gomez
Respuesta Responder a este mensaje
#7 Diego Cofré
21/06/2006 - 18:42 | Informe spam
En realidad eso no es un error, es simplemente que no tienes declarado el
Import correspondiente, por lo tanto tienes que escribir el nombre de la
clase completo. Puedes resolverlo pondiendo el import en cada clase o
agregar un import global al proyecto (en propiedades del proyecto - Imports)

Saludos
Lic. Diego Cofré
Desarrollador
EWAVE GROUP S.A
www.e-wavegroup.com
Respuesta Responder a este mensaje
#8 Eduardo A. Morcillo [MS MVP VB]
21/06/2006 - 19:38 | Informe spam
el bucle está bien, pero es más sencillo (y puede que tenga mejor
rendimiento) asi:



No creo. A diferencia de VB6, en .net por lo general For Each tiene un
rendimiento menor que accediendo por indice.

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
http://mvp.support.microsoft.com/pr...4EF5A4191C
Respuesta Responder a este mensaje
#9 Hugo Gsell
22/06/2006 - 13:14 | Informe spam
Hola. Soy Hugo A. Gsell de la pcia de Sgo del Estero en la República
Argentina.
Me ayudaste en el foro sobre un tema de creación de una clase.
Donde cree un proyecto tipo bibliteca de clases y una clase (en realidad un
formulario) con botones y varios comportamientos comunes que necesito en
varios proyectos... Basicamente es una pantalla de abm... Con los botones
agregar, eliminar, etc... La idea era crear esta clase... Generar la dll, y
luego en 'mis proyectos' crear una clase que HEREDE de esta y yo le agrego
textbox, etc

ahora:
1)Compilo (genero la dll) (que tiene mi clase con el form con el
comportamineto que yo quiero-por ejm al hacer clic en nuevo busca todos los
objetos textbox del formulario y los limpia)
2)Genero un proyecto nuevo. Mi proyecto que va a tener varios forms de abm
de datos heredando de que cree en paso 1
3)Incluyo la referencia.
2)Creo una nueva clase. (menu proyecto nueva clase)
En el código como primer linea dentro de la clase pongo inherits
classabmform.abm (que es la clase que cree anteriormente)
y al dar el enter me aparece automaticamente el procedimiento que habia
declarado como MUSTOVERRID, como public overrides MuestraRegistro.
hasta acá todo ok...
ahora viene el problema .. cuando quiero ir al diseño de la clase, es decir,
en la ventana de proyecto hago clic boton dereco sobre mi NUEVACLASE y hago
clic en ver diseño... me da un error así VER ABAJO

Lo que me extraña es que "en algún momento" logré que en el ambiente de
desarrollo al poner VER DISEÑADOR .. me mostró el formulario y cada objeto
tenia como una flechita de entrada "supongo" referenciando que esos objetos
eran heredados.
COMO PUEDO SOLUCIONARLO y tambien importante PORQUE SE PRODUCE?
Nuevamente MUCHAS GRACIAS POR TU TIEMPO


ERROR QUE APARECE AL INTENTAR 'DISEÑAR' LA CLASE

Errores al cargar el diseñador. Los errores se citan a continuación. Algunos
errores se pueden corregir volviendo a generar el proyecto, otros puede que
requieran cambios en el código.
El diseñador debe crear una instancia de tipo 'ClassAbmForm.ABM', pero no se
puede crear porque el tipo se ha declarado como abstracto.
Ocultar
en
System.ComponentModel.Design.Serialization.CodeDomSerializerBase.Error(IDesignerSerializationManager
manager, String exceptionText, String helpLink)
en
System.ComponentModel.Design.Serialization.TypeCodeDomSerializer.Deserialize(IDesignerSerializationManager
manager, CodeTypeDeclaration declaration)
en
System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager
manager)
en
Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager
serializationManager)
en
System.ComponentModel.Design.Serialization.BasicDesignerLoader.BeginLoad(IDesignerLoaderHost
host)

Hugo A. Gsell
Sgo del Estero
Argentina
Respuesta Responder a este mensaje
#10 Hugo Gsell
22/06/2006 - 13:14 | Informe spam
Hola. Soy Hugo A. Gsell de la pcia de Sgo del Estero en la República
Argentina.
Me ayudaste en el foro sobre un tema de creación de una clase.
Donde cree un proyecto tipo bibliteca de clases y una clase (en realidad un
formulario) con botones y varios comportamientos comunes que necesito en
varios proyectos... Basicamente es una pantalla de abm... Con los botones
agregar, eliminar, etc... La idea era crear esta clase... Generar la dll, y
luego en 'mis proyectos' crear una clase que HEREDE de esta y yo le agrego
textbox, etc

ahora:
1)Compilo (genero la dll) (que tiene mi clase con el form con el
comportamineto que yo quiero-por ejm al hacer clic en nuevo busca todos los
objetos textbox del formulario y los limpia)
2)Genero un proyecto nuevo. Mi proyecto que va a tener varios forms de abm
de datos heredando de que cree en paso 1
3)Incluyo la referencia.
2)Creo una nueva clase. (menu proyecto nueva clase)
En el código como primer linea dentro de la clase pongo inherits
classabmform.abm (que es la clase que cree anteriormente)
y al dar el enter me aparece automaticamente el procedimiento que habia
declarado como MUSTOVERRID, como public overrides MuestraRegistro.
hasta acá todo ok...
ahora viene el problema .. cuando quiero ir al diseño de la clase, es decir,
en la ventana de proyecto hago clic boton dereco sobre mi NUEVACLASE y hago
clic en ver diseño... me da un error así VER ABAJO

Lo que me extraña es que "en algún momento" logré que en el ambiente de
desarrollo al poner VER DISEÑADOR .. me mostró el formulario y cada objeto
tenia como una flechita de entrada "supongo" referenciando que esos objetos
eran heredados.
COMO PUEDO SOLUCIONARLO y tambien importante PORQUE SE PRODUCE?
Nuevamente MUCHAS GRACIAS POR TU TIEMPO


ERROR QUE APARECE AL INTENTAR 'DISEÑAR' LA CLASE

Errores al cargar el diseñador. Los errores se citan a continuación. Algunos
errores se pueden corregir volviendo a generar el proyecto, otros puede que
requieran cambios en el código.
El diseñador debe crear una instancia de tipo 'ClassAbmForm.ABM', pero no se
puede crear porque el tipo se ha declarado como abstracto.
Ocultar
en
System.ComponentModel.Design.Serialization.CodeDomSerializerBase.Error(IDesignerSerializationManager
manager, String exceptionText, String helpLink)
en
System.ComponentModel.Design.Serialization.TypeCodeDomSerializer.Deserialize(IDesignerSerializationManager
manager, CodeTypeDeclaration declaration)
en
System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager
manager)
en
Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager
serializationManager)
en
System.ComponentModel.Design.Serialization.BasicDesignerLoader.BeginLoad(IDesignerLoaderHost
host)

Hugo A. Gsell
Sgo del Estero
Argentina
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida