| |
|
7101
|
Programación / .NET (C#, VB.NET, ASP) / Re: Mis malas combinaciones :(
|
en: 9 Agosto 2014, 21:01 pm
|
funciona bien hasta llegar a la función de combinar los numeros pero es un código de basic que quiero implementar pero no soy capaz ( como siempre) ¿Que es exactamente lo que "falla"?, y en caso de dar error, ¿cual es el error?. saludos
|
|
|
|
|
7103
|
Programación / .NET (C#, VB.NET, ASP) / Re: Ayuda con un proyecto de c#
|
en: 9 Agosto 2014, 00:44 am
|
Muchas gracias, cuando dijiste que si podía hacer ping a la página web no dude en buscar en Internet como se hacia en c# ya he conseguido lo que quería muchas gracias No hay de que, no me merezco las gracias (ese código no es nada) pero te lo agradezco yo también. Lo siento si soy muy malo pero como ya dije soy nuevo y no entiendo mucho de C#. Pero seguramente si no es este año sera el próximo le domine espero que me ayudes Gracias Solo quiero comentar para dejar claro que: Considero que no importa si una persona es buena o mala en lo que haga, lo que importa es el empeño que le ponga a lo que hace (y también el interés que demuestra a los demás), eso es lo que intenté decirte, por supuesto eres bien recibido por mi parte y mis (humildes) conocimientos están para que sirva de ayuda a los demás, pero no está bien visto (ni por mi, ni por la mayoría) que por muy experto o novato que sea alguien, éste pida cualquier tipo de ayuda relacionada con la programación sin haberlo intentado por si mismo, porque muchas personas se aprovechan de esto y lo piden todo echo sin querer aprender nada ...eso para mi es hacerle perder el tiempo a los demás, pero ya se que no es el caso contigo, solo lo estaba comentando y te sugiero que la próxima vez intentes mostrar un código, o urls en las que hayas investigado el problema, eso siempre ayuda. Saludos!
|
|
|
|
|
7104
|
Programación / .NET (C#, VB.NET, ASP) / Re: Un par de consultas sobre teoría VB.net? son preguntas rápidas
|
en: 9 Agosto 2014, 00:19 am
|
Que tiene de diferente crear una Aplicación WPF? WPF (WindowsPresentationFoundation) usa un modelo muy distinto y más actual que un WF (WindowsForms), es el sucesor de WinForms (y desde hace mucho tiempo ya), el desarrollo de este tipo de aplicación WPF es completamente distinto, es más dificil, dando entrada a conceptos muy distintos que la mayoria de programadores de WinForms desconocen y/o les podría costar entender (como por ejemplo separar los Datos de la UI) dando entrada al uso de un lenguaje llamado XAML. · Introduction to WPF· Getting Started with WPF
Que es la Biblioteca de Clases? (Doy por echo que entiendes lo que es una Class) Un set/colección de Classes, no es más que eso, la librería de Classes de .NET Framework contiene todo tipo de miembros, Namespaces, Interfaces, Estructuras, Eventos, Excepciones, Enumeraciones, Delegados, etc...), se podría decir que practicamente contiene toda la funcionalidad del lenguaje. Tienes un claro ejemplo en el propio Framework de Microsoft. · Class Library (definición)· .NET Framework Class Library
Que diferencia hay entre: En mi opinión la pregunta debería ser " ¿Que diferencia hay entre la Class "Form1" y el resto de Classes?" Agregar Windows forms Un Form (Formulario) es una representación visual de la interfaz gráfica, la class " Form1" (y el Form2 que agregarías desde el menú) se genera automaticamente por el Designer de VS, y dicha Class automaticamente hereda la Class Form, de otra manera no sería un Form. y no podría compilar <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ Partial Class Form1 Inherits System.Windows.Forms.Form ...
Esa es la simple razón por la cual la Class Form1 te parece distinta al resto de Classes que puedes añadir a un proyecto, y porque puedes acceder a métodos como " Form1.Show()", " Form1.ShowDialog()", etc. Agregar Clase Una Class corriente vacía es una plantilla para la creación de Objetos, es decir, la creación de un conjunto de miembros entre los cuales suele haber métodos, variables, propiedades, etc... Ejemplo:La estructura inicial de una Class agregada es así: Public Class Class1 End Class
Para que una Class pueda ser un Form, deberíamos herederar los miembros de la Class Form: Public Class Class1 : Inherits Form End Class
...Y entonces podrías utilizar la class Class1 como un Form, sería algo parecido a añadir un Form desde el menú contextual, pero sin haber creado la parte del Designer. Agregar Nuevo elemento Un 'nuevo elemento' es... es algo que no se puede globalizar, no soy capaz de hallar una respuesta apropiada que englobe esta pregunta, ya que cada elemento existente es muy distinto del otro.
|
|
|
|
|
7105
|
Programación / .NET (C#, VB.NET, ASP) / Re: Ayuda con un proyecto de c#
|
en: 8 Agosto 2014, 23:28 pm
|
¿Cual es la duda exactamente, y donde está el código que demuestra tu progreso en ello?, debes saber que aquí no le hacemos el trabajo a nadie, ayudamos a hacerlo. Por ese motivo quiero que sepas que no apruebo NADA ayudar y/o proporcionar este tipo de material a alguien que no muestra esfuerzo alguno, pero por otro lado este código ya lo tenía echo y no me cuesta nada compartirlo, eso sí, dado el caso no lo voy a traducir a C#, si tienes dificultades puedes proporcionar los datos necesarios que ya expliqué, o puedes usar convertidores online (ej: Telerik): EDITO: Código eliminado, el código era muy extenso.Podrías hacer un Ping a la dirección Web: Try My.Computer.Network.Ping("www.google.com") TextBox1.Text = "Conexión Satisfactoria" Catch ex As Net.NetworkInformation.PingException TextBox1.Text = "Conexión Fallida" End Tryf
Imagino que con eso sería suficiente, aunque si tu conexión se encontrase demasiado saturada podría dar un falso positivo (porque no podría conectar con el server aunque estuviese online). Saludos
|
|
|
|
|
7106
|
Foros Generales / Foro Libre / Re: Contrato de servicios de Microsoft
|
en: 8 Agosto 2014, 23:22 pm
|
¿Que sentido tiene este mensaje?, digo yo que podrías haber echo una pequeña introducción a la informacion que pretendías mostrar... De todas formas también creo que habia sido suficiente con mostrar el enlace ofial sin copiar su contenido, para tener una referencia oficial la cual como bien se especifica podría estar en constante actualización, y también para no perder los HyperLinks: · Contrato de servicios de MicrosoftSaludos!
|
|
|
|
|
7107
|
Programación / .NET (C#, VB.NET, ASP) / Re: Librería de Snippets !! (Compartan aquí sus snippets)
|
en: 8 Agosto 2014, 21:13 pm
|
como vi que funciono la primera vez pues no le presté mucha atención... Funciona a la primera según se mire, ya que el que escribió ese snippet definió el uso de la codificación UTF-16 (Encoding.Unicode) para todos los casos. Ahora como verás me he pasado poniendo usings, pero bueno  No te has pasado, has echo lo correcto (me refiero a corregir los fallos del código, aparte de tener que escuchar mi típico sermón xD) Saludos
|
|
|
|
|
7108
|
Programación / .NET (C#, VB.NET, ASP) / Re: Librería de Snippets !! (Compartan aquí sus snippets)
|
en: 8 Agosto 2014, 20:59 pm
|
Ejemplo de como implementar la interface ISerializable e IXMLSerializable: #Region " Imports " Imports System.Runtime.Serialization Imports System.Security.Permissions Imports System.Xml.Serialization Imports System.Xml #End Region ''' <summary> ''' SerializableClassTest. ''' This class can be serialized. ''' </summary> <Serializable> <XmlRoot("SerializableClassTest")> Public Class SerializableClassTest : Implements ISerializable : Implements IXmlSerializable #Region "Properties" Public Property StrValue As String Public Property Int32Value As Integer #End Region #Region "Constructors" ''' <summary> ''' Prevents a default instance of the <see cref="SerializableClassTest"/> class from being created. ''' </summary> Private Sub New() End Sub ''' <summary> ''' Initializes a new instance of the <see cref="SerializableClassTest"/> class. ''' </summary> Public Sub New(ByVal StrValue As String, ByVal Int32Value As Integer) Me.StrValue = StrValue Me.Int32Value = Int32Value End Sub #End Region #Region "ISerializable implementation" ' For Binary serialization. ''' <summary> ''' Populates a <see cref="T:SerializationInfo"/> with the data needed to serialize the target object. ''' </summary> ''' <param name="info">The <see cref="T:SerializationInfo"/> to populate with data.</param> ''' <param name="context">The destination (see <see cref="T:StreamingContext"/>) for this serialization.</param> <SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags:=SecurityPermissionFlag.SerializationFormatter)> Protected Overridable Sub GetObjectData(ByVal info As SerializationInfo, ByVal context As StreamingContext) Implements ISerializable.GetObjectData If info Is Nothing Then Throw New ArgumentNullException("info") End If With info .AddValue("PropertyName1", Me.StrValue, Me.StrValue.GetType) .AddValue("PropertyName2", Me.Int32Value, Me.Int32Value.GetType) End With End Sub ''' <summary> ''' Initializes a new instance of the <see cref="SerializableClassTest"/> class. ''' This constructor is used to deserialize values. ''' </summary> ''' <param name="info">The information.</param> ''' <param name="context">The context.</param> Protected Sub New(ByVal info As SerializationInfo, ByVal context As StreamingContext) If info Is Nothing Then Throw New ArgumentNullException("info") End If Me.StrValue = info.GetString("PropertyName1") Me.Int32Value = info.GetInt32("PropertyName2") End Sub #End Region #Region "IXMLSerializable implementation" ' For XML serialization. ''' <summary> ''' This method is reserved and should not be used. ''' When implementing the IXmlSerializable interface, you should return null (Nothing in Visual Basic) from this method, ''' and instead, if specifying a custom schema is required, apply the <see cref="T:XmlSchemaProviderAttribute"/> to the class. ''' </summary> ''' <returns> ''' An <see cref="T:Xml.Schema.XmlSchema"/> that describes the XML representation of the object ''' that is produced by the <see cref="M:IXmlSerializable.WriteXml(Xml.XmlWriter)"/> method ''' and consumed by the <see cref="M:IXmlSerializable.ReadXml(Xml.XmlReader)"/> method. ''' </returns> Public Function GetSchema() As Schema.XmlSchema Implements IXmlSerializable.GetSchema Return Nothing End Function ''' <summary> ''' Converts an object into its XML representation. ''' </summary> ''' <param name="writer">The <see cref="T:Xml.XmlWriter"/> stream to which the object is serialized.</param> Public Sub WriteXml(ByVal writer As XmlWriter) Implements IXmlSerializable.WriteXml writer.WriteElementString("PropertyName1", Me.StrValue) writer.WriteElementString("PropertyName2", CStr(Me.Int32Value)) End Sub ''' <summary> ''' Generates an object from its XML representation. ''' </summary> ''' <param name="reader">The <see cref="T:Xml.XmlReader"/> stream from which the object is deserialized.</param> Public Sub ReadXml(ByVal reader As XmlReader) Implements IXmlSerializable.ReadXml With reader .ReadStartElement(MyBase.GetType.Name) Me.StrValue = .ReadElementContentAsString Me.Int32Value = .ReadElementContentAsInt End With End Sub #End Region End Class
Ejemplo de como usar la Class DeviceWatcher en un WinForms, sirve para detectar los eventos de inserción/extracción de los dispositivos, quizás se pueda utilizar como reemplazamiento del típico código de WMI para monitorizar USB's, pero todavía no le he podido sacar todo el jugo al asunto, poca documentación... #Region " Instructions " ' 1. Create a new WinForms project targeting .NET Framework 4.5. ' 2. Close VisualStudio, open the 'YourProjectName.vbproj' file in a text-editor and add this property: ' ***************************************************************************************************** '<PropertyGroup> ' ... ' <TargetPlatformVersion>8.0</TargetPlatformVersion> ' ... '</PropertyGroup> ' 3. Load the project in VisualStudio, open the 'References' menu and add these references: ' ***************************************************************************************** ' C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\Facades\System.Runtime.dll ' C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\Facades\System.Runtime.InteropServices.WindowsRuntime.dll ' 4. In the 'References' menu, go to 'Windows > Core' tab and add these references: ' ********************************************************************************* ' Windows.Devices ' Windows.Foundation #End Region #Region " Imports " Imports Windows.Devices.Enumeration Imports Windows.Foundation #End Region Public Class DeviceWatcher_Test Friend WithEvents dw As DeviceWatcher = DeviceInformation.CreateWatcher Private Sub Test() Handles MyBase.Load dw.Start() End Sub ''' <summary> ''' Event that is raised when a device is added to the collection enumerated by the DeviceWatcher. ''' MSDN Documentation: http://msdn.microsoft.com/en-us/library/windows/apps/windows.devices.enumeration.devicewatcher.added.aspx ''' </summary> ''' <param name="sender">The source of the event.</param> ''' <param name="e">The <see cref="DeviceInformation"/> instance containing the event data.</param> Private Sub dw_Added(ByVal sender As DeviceWatcher, ByVal e As DeviceInformation) _ Handles dw.Added Dim sb As New System.Text.StringBuilder With sb .AppendLine("dw_added") .AppendLine("********") .AppendLine(String.Format("Interface ID.: {0}", e.Id)) .AppendLine(String.Format("Friendly Name: {0}", e.Name)) .AppendLine(String.Format("Is Enabled?..: {0}", e.IsEnabled)) If e.Properties IsNot Nothing Then For Each item As KeyValuePair(Of String, Object) In e.Properties If item.Value IsNot Nothing Then .AppendLine(String.Format("TKey:{0}, TVal:{1} (TVal Type:{2})", item.Key, item.Value.ToString, item.Value.GetType.Name)) End If Next End If End With Debug. WriteLine(sb. ToString) End Sub ''' <summary> ''' Event that is raised when a device is removed from the collection of enumerated devices. ''' MSDN Documentation: http://msdn.microsoft.com/en-us/library/windows/apps/windows.devices.enumeration.devicewatcher.removed.aspx ''' </summary> ''' <param name="sender">The source of the event.</param> ''' <param name="e">The <see cref="DeviceInformationUpdate"/> instance containing the event data.</param> Private Sub dw_Removed(ByVal sender As DeviceWatcher, ByVal e As DeviceInformationUpdate) _ Handles dw.Removed Dim sb As New System.Text.StringBuilder With sb .AppendLine("dw_Removed") .AppendLine("**********") .AppendLine(String.Format("Interface ID:{0}", e.Id)) For Each item As KeyValuePair(Of String, Object) In e.Properties .AppendLine(String.Format("TKey:{0}, TVal:{1} (TVal Type:{2})", item.Key, item.Value.ToString, item.Value.GetType.Name)) Next End With Debug. WriteLine(sb. ToString) End Sub ''' <summary> ''' Event that is raised when a device is updated in the collection of enumerated devices. ''' MSDN Documentation: http://msdn.microsoft.com/en-us/library/windows/apps/windows.devices.enumeration.devicewatcher.updated.aspx ''' </summary> ''' <param name="sender">The source of the event.</param> ''' <param name="e">The <see cref="DeviceInformationUpdate"/> instance containing the event data.</param> Private Sub dw_Updated(ByVal sender As DeviceWatcher, ByVal e As DeviceInformationUpdate) _ Handles dw.Updated Dim sb As New System.Text.StringBuilder With sb .AppendLine("dw_Updated") .AppendLine("**********") .AppendLine(String.Format("Interface ID: {0}", e.Id)) For Each item As KeyValuePair(Of String, Object) In e.Properties If item.Key.EndsWith("InterfaceEnabled", StringComparison.OrdinalIgnoreCase) Then Dim Result As Boolean = CBool(item.Value) .AppendLine(String.Format("The device is accessible?:{0}", CStr(Result))) Else .AppendLine(String.Format("TKwy:{0}, TVal:{1} (TVal Type:{2})", item.Key, item.Value.ToString, item.Value.GetType.Name)) End If Next End With Debug. WriteLine(sb. ToString) End Sub ''' <summary> ''' Event that is raised when the enumeration operation has been stopped. ''' MSDN Documentation: http://msdn.microsoft.com/en-us/library/windows/apps/windows.devices.enumeration.devicewatcher.stopped.aspx ''' </summary> ''' <param name="sender">The source of the event.</param> ''' <param name="e">The object containing the event data.</param> Private Sub dw_Stopped(ByVal sender As DeviceWatcher, ByVal e As Object) _ Handles dw.Stopped Dim sb As New System.Text.StringBuilder With sb .AppendLine("dw_Stopped") .AppendLine("**********") .AppendLine(String.Format("e:{1} (e Type:{2})", e.ToString, e.GetType.Name)) End With Debug. WriteLine(sb. ToString) End Sub ''' <summary> ''' Event that is raised when the enumeration of devices completes. ''' MSDN Documentation: http://msdn.microsoft.com/en-us/library/windows/apps/windows.devices.enumeration.devicewatcher.enumerationcompleted.aspx ''' </summary> ''' <param name="sender">The source of the event.</param> ''' <param name="e">The object containing the event data.</param> Private Sub dw_EnumerationCompleted(ByVal sender As DeviceWatcher, ByVal e As Object) _ Handles dw.EnumerationCompleted If e IsNot Nothing Then Dim sb As New System.Text.StringBuilder With sb .AppendLine("EnumerationCompleted") .AppendLine("********************") .AppendLine(String.Format("e:{1} (e Type:{2})", e.ToString, e.GetType.Name)) End With Debug. WriteLine(sb. ToString) End If End Sub End Class
|
|
|
|
|
7109
|
Programación / .NET (C#, VB.NET, ASP) / Re: Problema con formatos VB.NET 2010, Access 2007[SOLUCIONADO]
|
en: 8 Agosto 2014, 18:31 pm
|
|
Aun queda la duda de como es posible que los permisos de usuario de "X" App influyan en el código hasta el punto de lanzar una excepción de Casteo? xD, ¿es posible que el objeto "cmd" sea un proceso que ejecutes vía CMD y al no tener permisos suficientes éste en lugar de devoler un valor numérico devolviese un mensaje de error (String) sobre los permisos o algo? ...esa podría ser una causa, bueno sea como sea me alegro de que lo hayas solucionado.
Saludos
|
|
|
|
|
7110
|
Programación / .NET (C#, VB.NET, ASP) / Re: Librería de Snippets !! (Compartan aquí sus snippets)
|
en: 8 Agosto 2014, 18:11 pm
|
Creo que algunas de estas utilidades están ya presentes dentro de lo que es la super colección de Elektro, pero bueno supongo que un indentador XML nunca se ha visto por aquí así que aquí va: precisamente estoy harto de que cierta utilidad de Microsoft me genere los archivos de manifiesto sin ningún tipo de indentación, esto me sirve  . EDITO: en un principio iba a ahorrarme comentarios sobre posibles mejoras de código o etc, pero hay un fallo importante que se debe corregir, no estás liberando el memorystream: Dim w As New MemoryStream()
Ni tampoco el Writer ni el Reader xD Por cierto la Class XMLTextWriter está obsoleta, en su defecto Microsoft recomienda el uso de XMLWriter. EDITO 2: Me he tomado la libertad de editar el código original enfocándolo de otra manera (aunque tampoco es tan distinto): Ejemplo de uso: Dim TextEncoding As System.Text.Encoding = System.Text.Encoding.Default Dim UnformattedXMLDocument As String = IO. File. ReadAllText("C:\Unformatted Document.xml", TextEncoding ) Dim FormattedXMLDocument As String = XMLBeautify(XMLText:=UnformattedXMLDocument, IndentChars:=New String(" "c, 2), IndentOnAttributes:=False, TextEncoding:=TextEncoding) IO. File. WriteAllText("C:\Formatted Document.xml", FormattedXMLDocument, TextEncoding )
Snippet: ''' <summary> ''' Beautifies the contents of an unindented XML document. ''' </summary> ''' <param name="XMLText"> ''' The XML text content. ''' It can be an entire document or a fragment. ''' </param> ''' <param name="IndentChars"> ''' The string that is used to indent the XML. ''' Default value is: <see cref="ControlChars.Tab"/> ''' </param> ''' <param name="IndentOnAttributes"> ''' If set to <c>true</c>, attributes will be separated by newlines. ''' Default value is: <c>false</c> ''' </param> ''' <param name="TextEncoding"> ''' The XML text encoding to use. ''' Default value is: <see cref="System.Text.Encoding.Default"/>. ''' </param> ''' <returns>The beautified XML text.</returns> ''' <exception cref="System.ArgumentNullException"></exception> Public Shared Function XMLBeautify(ByVal XMLText As String, Optional ByVal IndentChars As String = Nothing, Optional ByVal IndentOnAttributes As Boolean = False, Optional ByVal TextEncoding As System.Text.Encoding = Nothing) As String If String.IsNullOrEmpty(XMLText) Then Throw New ArgumentNullException(XMLText) End If Dim sb As New System.Text.StringBuilder Dim doc As New Xml.XmlDocument() Dim settings As New Xml.XmlWriterSettings With settings .Indent = True .CheckCharacters = True .OmitXmlDeclaration = False .ConformanceLevel = Xml.ConformanceLevel.Auto .NamespaceHandling = Xml.NamespaceHandling.Default .NewLineHandling = Xml.NewLineHandling.Replace .NewLineChars = ControlChars.NewLine .NewLineOnAttributes = IndentOnAttributes .IndentChars = If(IndentChars IsNot Nothing, IndentChars, ControlChars.Tab) .Encoding = If(TextEncoding IsNot Nothing, TextEncoding, System.Text.Encoding.Default) End With Using writer As Xml.XmlWriter = Xml.XmlWriter.Create(sb, settings) doc.LoadXml(XMLText) doc.WriteContentTo(writer) writer.Flush() Return sb.ToString End Using End Function ''' <summary> ''' Beautifies the contents of an unindented XML document. ''' </summary> ''' <param name="XMLFile"> ''' An <see cref="T:IO.FileInfo"/> that contains the XML info. ''' It can be an entire document or a fragment. ''' </param> ''' <param name="IndentChars"> ''' The string that is used to indent the XML. ''' Default value is: <see cref="ControlChars.Tab"/> ''' </param> ''' <param name="IndentOnAttributes"> ''' If set to <c>true</c>, attributes will be separated by newlines. ''' Default value is: <c>false</c> ''' </param> ''' <param name="TextEncoding"> ''' The XML text encoding to use. ''' Default value is: <see cref="System.Text.Encoding.Default"/>. ''' </param> ''' <returns>The beautified XML text.</returns> ''' <exception cref="System.ArgumentNullException"></exception> Public Shared Function XMLBeautify(XMLFile As IO.FileInfo, Optional ByVal IndentChars As String = Nothing, Optional ByVal IndentOnAttributes As Boolean = False, Optional ByVal TextEncoding As System.Text.Encoding = Nothing) As String Return XMLBeautify (IO. File. ReadAllText(XMLFile. FullName, TextEncoding ), IndentChars, IndentOnAttributes, TextEncoding ) End Function
Posibles outputs: 1º: <savedata> <SoftwareType>Freeware</SoftwareType> <SoftwareID>Moo0 FileMonitor</SoftwareID> <Version>1.11</Version> <MainWindow> <SoftwareType>Freeware</SoftwareType> <SoftwareID>Moo0 FileMonitor</SoftwareID> <Version>1.11</Version> <View F="0" E="0" D="0" RefreshFrequency="500" LogUpTo="20000" EasyDrag="1" Maximized="0" X="958" Y="453" Width="962" Height="585" KeepOnTop="0"></View> <ChangesColumnOrder length="6" _0="0" _1="1" _2="2" _3="3" _4="4" _5="5"></ChangesColumnOrder> </MainWindow> <Skin>Classic LG</Skin> </savedata>
2º: <savedata> <SoftwareType>Freeware</SoftwareType> <SoftwareID>Moo0 FileMonitor</SoftwareID> <Version>1.11</Version> <MainWindow> <SoftwareType>Freeware</SoftwareType> <SoftwareID>Moo0 FileMonitor</SoftwareID> <Version>1.11</Version> <View F="0" E="0" D="0" RefreshFrequency="500" LogUpTo="20000" EasyDrag="1" Maximized="0" X="958" Y="453" Width="962" Height="585" KeepOnTop="0"></View> <ChangesColumnOrder length="6" _0="0" _1="1" _2="2" _3="3" _4="4" _5="5"></ChangesColumnOrder> </MainWindow> <Skin>Classic LG</Skin> </savedata>
Saludos
|
|
|
|
|
|
| |
|