|
641
|
Programación / .NET (C#, VB.NET, ASP) / Re: Cuál es la lógica del operador XOR
|
en: 29 Junio 2015, 19:07 pm
|
engel lex No te ignoro, de hecho el comentario anterior era dirigido a ti, lo que pasa es que hice un copia y pega el alias y no me di cuenta que no era tuyo. En fin gracias los dos Vale ahora entiendo, gracias a esta explicación más mundana: "es es hombre o es mujer, pero no puede ser ambos al mismo tiempo y siempre tinene que ser uno"
Sinceramente, ahora que lo veo, no sabría, en programación como usar esto. He visto códigos que lo usaban y sabía lo que hacían, es decir, el objetivo de su uso, pero no como opera este operador. Por ejemplo: Para pasar el valor A a B y el valor B a A. A= 5 B= 6 A = A Xor B B = B Xor A A = A Xor B Ahora A= 6 y B= 5
No entiendo qué mente matemática retorcida puede ultramar tal propósito solo para pasar lo de A a B y viceversa, ni aún entendiendo el funcionamiento de dicho operador. En fin, será cosa de genios. Nunca he estudiado lógica proposicional, de hecho aunque he estudiado matemáticas, no tenía ni idea de esta rama, sí de la lógica en sí (aunque no la he tocado), pero no de Lógica proposicional.
Álgebra de Boole, lo explica genial gracias. A veces uno no sabe por donde tirar si no pregunta https://es.wikipedia.org/wiki/%C3%81lgebra_de_Boole
|
|
|
642
|
Programación / .NET (C#, VB.NET, ASP) / Re: Cuál es la lógica del operador XOR
|
en: 29 Junio 2015, 18:35 pm
|
Gracias Gh057 Y [/b]engel lex[/b], me lo has dejado más claro, voy entendiendo la lógica. He comprendido lo de bit a bit con el 101 y 011, se compara dígito por dígito. Pero porqué... 1 xor 0 = 1 0 xor 1 = 1 1 xor 1 = 0
es decir ¿porqué 1 xor 0 es 1?, lo entendería se fuera 1+0 =1 ¿Porqué 0 xor 1 es 1? como antes si fuera 0+1= 1 Pero llega el 1 xor 1, ¿Porqué diantres es 0? Si resto rompe la regla anterior Sl2
y 1 + 1 = es 10 en binario
|
|
|
643
|
Programación / .NET (C#, VB.NET, ASP) / Cuál es la lógica del operador XOR
|
en: 29 Junio 2015, 18:21 pm
|
Hola Bueno, pues eso. ¿cuál es la lógica? Vamos a ver de: 5 xor 3 devuelve 6 Según la ayuda de MSDN es porque como 5 = 101 (en binario ) y 3 = 11 pues devuelve 110 que es el equivalente binario de 6. En fin, menuda explicación chorra. Yo creo que el/la que lo puso no tenía ni idea. Y si la tenía, se ha explicado como por el culo. Por que ha dicho lo mismo pero con binarios. Y luego está esto: "Realiza una exclusión lógica entre dos expresiones de tipo Boolean o bien una exclusión bit a bit entre dos expresiones numéricas." Más de lo mismo, es peor que el lenguaje administrativo. Una ayudita porfa
|
|
|
644
|
Programación / .NET (C#, VB.NET, ASP) / Re: Se puede prescindir de todas las funciones API en VB.NET
|
en: 24 Junio 2015, 21:38 pm
|
Ok, gracias Elektro Oye, en confianza, que lo de la "bronca" no me refería a tí , eh Bueno la otra forma sería así: <DllImport("user32.dll", BestFitMapping:=False, CallingConvention:=CallingConvention.Winapi, CharSet:=CharSet.Unicode, EntryPoint:="user32")> _ Public Shared Function GetCursorPos(ByRef lpPoint As POINTAPI) As Boolean End Function
Y establecer el siguiente Imports: Imports System.Runtime.InteropServices
Evidentemente es lo que dices, aquí puedo establecer los parámentros de la llamada. Pero quería decir que si funciona o realmente no hace falta establecer nada pues ya vale aunque sea al estilo de VB6, digo yo.
Bueno, sabiéndolo personalmente siempre buscaré la forma de no tener que usar funciones API.
|
|
|
645
|
Programación / .NET (C#, VB.NET, ASP) / Se puede prescindir de todas las funciones API en VB.NET
|
en: 24 Junio 2015, 20:41 pm
|
Hola Soy emigrante de VB6 a .NET, de hecho ya me han echado la "bronca" en varias ocasiones por usar la metodología de VB6 en .NET cuando no era necesario. He visto que se puede prescindir de algunas funciones API de Windows en .NET. El caso es que no se cuales funciones ya están incluidas en .NET o no. Una que ahora mismo estoy buscando es el GetCursorPos, para determinar la posición X, Y del puntero en el escritorio. Llamando así funciona: Structure POINTAPI Public X As Integer Public Y As Integer End Structure Private Declare Function GetCursorPos Lib "user32.dll" ( _ ByRef lpPoint As POINTAPI) As Integer
Pero parace ser que es más de '.NET' ponerlo así: Public Structure POINTAPI Public X As Integer Public Y As Integer End Structure <Runtime.InteropServices.DllImport("user32.dll")> _ Public Shared Function GetCursorPos(ByRef lpPoint As POINTAPI) As Integer End Function
No se, me extrañaría que los de Microsoft, al construir .NET no hubieran establacido funciones internas de .NET para todas funciones incluidas en DLLs de Windows como USER32.DLL. y no tener que hacer estas llamadas. Saludos y gracias
Pues nada que en dicho caso parece que es lo que digo: 'Posición X del cursor en el escritorio Me.Text = Cursor.Position.X
Fuente: https://msdn.microsoft.com/es-es/library/system.windows.forms.cursor.position%28v=vs.110%29.aspxNo entiendo porqué, si como parece estoy en lo cierto, tanta gente postea y fomenta el uso de estas llamadas cuando no son necesarias
|
|
|
646
|
Programación / .NET (C#, VB.NET, ASP) / Eliminar elementos repetidos en un Array
|
en: 22 Junio 2015, 18:23 pm
|
buenas.. ¿Hay alguna forma de eliminar elementos repetidos en un Array? Me he hecho una función, que me ha costado, el ingeniarlo quiero decir, que es la siguiente: Public Function DeleteArrayRepetitions(ByVal strArray1() As String, ByVal Sorted As Boolean) As Array Dim strArray2(0) As String Dim TempElement As String Dim Count1 As Integer Dim Count2 As Integer For Each TempElement In strArray1 Count1 += 1 If Count1 = 1 Then strArray2(0) = TempElement If Array.IndexOf(strArray1, TempElement, Count1) = -1 Then ReDim Preserve strArray2(Count2) strArray2(Count2) = TempElement Count2 += 1 End If Next If Sorted = True Then Array.Sort(strArray2) Return strArray2 End Function
Lo que hace es comprobar uno por uno los elementos del strArray1 y si no está repetido lo pasa al strArray2, hasta completar una lista sin repeticiones. Una vez el strArray2 está completo lo pasa a la función DeleteArrayRepetitions que también es un Array. Es decir, la función devuelve una lista sin repeticiones. En un intento de reducirlo más, resulta que obtengo un código más o menos igual solo que esta vez usando Array.LastIndexOf en lugar de Array.IndexOf Public Function DeleteArrayRepetitions(ByVal strArray1() As String, ByVal Sorted As Boolean) As Array Dim strArray2(0) As String Dim Count As Integer = 0 Dim Count2 As Integer = 0 For Each Element In strArray1 Dim Last As Integer = Array.LastIndexOf(strArray1, Element) If Count = Last Then ReDim Preserve strArray2(Count2) strArray2(Count2) = Element Count2 += 1 End If Count += 1 Next If Sorted = True Then Array.Sort(strArray2) Return strArray2 End Function
Para usarlo se hace los siguiente: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim Numbers() As String = {"1", "5", "5", "5", "4", "1", "12", "4", "55"} 'Quita los elementos repetidos Numbers = DeleteArrayRepetitions(Numbers, True) 'Lista los elementos del Array en un ListBox For Each Element In Numbers ListBox1.Items.Add(Element) Next End Sub
El ListBox mostrará: 1 12 4 5 55 A pesar que las funciones funcionan bien, debe haber alguna forma más sencilla, alguna función en VBNET que permita hacerlo. He probado con Array y ArrayList, pero no he visto nada. Sl2
|
|
|
647
|
Programación / .NET (C#, VB.NET, ASP) / Re: Subir imagen con WebBrowser
|
en: 20 Junio 2015, 22:14 pm
|
Que tal esto: Public Class Form1 Dim WB As New WebBrowser Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Button1.Text = "Cargar página" Button2.Text = "Upload Image" Button2.Enabled = False End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click WB.ScriptErrorsSuppressed = True Try WB.Navigate("http://www2.yapo.cl/ai/form/7?ca=15_s") Me.Cursor = Cursors.WaitCursor 'Cambia el cursor a espera 'Espera a que cargue la página Do While (WB.ReadyState <> WebBrowserReadyState.Complete) My.Application.DoEvents() Loop If WB.ReadyState = WebBrowserReadyState.Complete Then Me.Cursor = Cursors.Default 'Retorna el cursor normal Button2.Enabled = True End If Catch ex As Exception MsgBox("No se ha podido gargar la página") End Try End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim clElement As HtmlElementCollection = WB.Document.GetElementsByTagName("Input") For Each Element As HtmlElement In clElement Dim controlName As String = Element.GetAttribute("input").ToString If Element.GetAttribute("name").Equals("file") Then Element.InvokeMember("click") End If Next End Sub End Class
No me acaba de gustar porque si metes mal la URL el segundo botón se activa igualmente, pero por ahí va la cosa. Crear un sistema de espera a que se cargue la página. Por cierto, para este código NO necesistas introducir físicamente un WebBrowser en el formulario, gracias a : Dim WB As New WebBrowserDe modo que puedes introducir datos y hacer clics a botones sin que se vea la página.
|
|
|
648
|
Programación / .NET (C#, VB.NET, ASP) / Re: Navegar con WebBrowser sin alojar archivos en caché
|
en: 20 Junio 2015, 00:42 am
|
Si no necesitas navegar en la página entonces no necesitas usar IE (WebBrowser) ni el host de MSHTML ni nada parecido, puedes usar la Class HttpWebRequest/HttpWebResponse (entre otras) para realizar peticiones a una url y obtener la respuesta (el código fuente de la página).
➢ HttpWebRequest Class (System.Net) - MSDN ➢ HttpWebResponse Class (System.Net) - MSDN
....
Es justo lo que necesitaba gracias
|
|
|
649
|
Programación / .NET (C#, VB.NET, ASP) / Re: Navegar con WebBrowser sin alojar archivos en caché
|
en: 20 Junio 2015, 00:09 am
|
Hola Antes de nada, felicitarte Elektro por tu ayuda aquí, que es incalculable. Ya que te esfuerzas mucho y es de apreciar pues mucha gente contesta con monosílabos. Parece que sabes mucho de esto. Perdona mi ignorancia y a ver si puedes decirme si este otro método podría servir, quizás algo chapucero: Descargo la web con la función API, URLDownloadToFile y establecer BINDF_PRAGMA_NO_CACHE que según encontré en el MSN es : Value that indicates that the resource will not be stored in the Internet cache. Alojo el archivo único en una carpeta temporal. Y luego lo abro con Webbrowser. Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _ (ByVal pCaller As Integer, _ ByVal szURL As String, _ ByVal szFileName As String, _ ByVal dwReserved As Integer, _ ByVal lpfnCB As Integer) As Integer Const BINDF_PRAGMA_NO_CACHE = &H2000 Const ERROR_SUCCESS = 0 Public Function GetCodeWEB(ByVal sURL As String) As String Dim sLocalTempFile As String = My.Computer.FileSystem.SpecialDirectories.Temp & "\file_web.html" If URLDownloadToFile(&H0, sURL, sLocalTempFile, ERROR_SUCCESS Or BINDF_PRAGMA_NO_CACHE, &H0) = ERROR_SUCCESS Then Dim strBuffer As New System.IO.StreamReader(sLocalTempFile) Return strBuffer.ReadToEnd strBuffer.Close() Else GetCodeWEB = "Página no encontrada" End If End Function
En cuanto a lo del control WebBrowser es una ventana host que como dices va con IE y lógicamente para mostrar el contenido web primer se alojan los archivos en el caché, para después cargarlo. Sin embargo puedo usar... Dim WB as new WebBrowser
...sin haber integrado ningún WebBrowser en el formulario. Dim WB As New WebBrowser WB.Navigate("http://...") Dim CodeWeb As String = WB.DocumentText
Aun así supongo que se guardan datos de caché, que era la duda que yo tenía.
|
|
|
650
|
Programación / .NET (C#, VB.NET, ASP) / Re: Obtener subida y bajada de Internet en Megabytes
|
en: 19 Junio 2015, 23:33 pm
|
hola No había caído, gracias. Aprecio tu aporte. Como prueba he conectado el móvil para usarlo como modem y utilizar la conexión del mismo. El código sigue funcionado. He sustitiudo (0) por Firts. ipv4Stats = System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces.First.GetIPv4Statistics
Pero supongo que es lo mismo. En cuanto al código que me das, me da error en la lína 14. Dim ipv4Stats As IPv4InterfaceStatistics = GetEthernetAdapters.First.GetIPv4Statistics
Señala a GetIpv4Statistics y dice "La secuencia no contiene elementos" Intentaré averiguar el índice de la red activa. Sl2
|
|
|
|
|
|
|