• Jueves 28 de Marzo de 2024, 14:24

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - E.Baley

Páginas: [1] 2
1
C# / Re: Descargar Visual C#.NET Framework 3.5
« en: Domingo 8 de Marzo de 2009, 22:51 »
El orden de instalación da igual.
Si instalas primero el framework, pues bien.
Si instalas primero el Visual Studio, da igual porque el instalador ya te instala el framework si no lo tienes.

La máquina virtual no se ejecuta, simplemente está instalada en el ordenador, disponible y a la espera de que alguien utilice sus caracteríasticas, servicios, APIs...
Cuando una aplicación .NET se ejecuta, ya está todo preparado para que "interactúe" con la máquina virtual, consumiendo esos servicios, utilizando esas APIs etc.
La máquina virtual tampoco necesita reconocer al Visual Studio. El VStudio simplemente genera tus aplicaciones, que luego corren usando la máquina virtual.

Sé que esos conceptos al principio despistan un poco, pero con un par aplicaciones que hagas, en seguida le pillas el rollete. A mi me pasaba igual, no entendía de qué iba todo esto, y me volvía loco para comprender qué estaba pasando cuando escribía una aplicación, la compilaba y la ejecutaba. Pero con un poco de práctica todo se vé mucho más facil.

saludos.

2
C# / Re: Descargar Visual C#.NET Framework 3.5
« en: Domingo 8 de Marzo de 2009, 17:29 »
Unas pequeñas aclaraciones:
- El ".NET framework" es la "máquina virtual" que permite ejecutar tus aplicaciones.
Las aplicaciones que escribes para el .NET framework usan los recursos, APIs etc que expone dicho framework.
Es lo que viene a ser el Java (máquina virtual) y las aplicaciones de Java. Y así es en muchos casos (Python, etc...) porque así se independiza el entorno/máquina (el framework) de las aplicaciones.
- Por tanto: el framework no es "visual"
- Lo que sí es "visual" es el "Visual Studio", que es el programa que te permite escribir tus propias aplicaciones (en realidad es un editor de texto muy avanzado). Es visual porque te permite programar ventanas y otras aplicaciones de una forma visual (sin tener que escribir el código).
Me imagino que en tus clases usais este editor, por eso dices lo de "visual", pero ten en cuenta que existen otros editores que te permiten escribir aplicaciones para el framework, algunas gratuitas y muy profesionales. En última instancia puedes escribir tus aplicaciones con el bloc de notas (nada aconsejable), ya que tus aplicaciones son texto puro.
- El framework es gratuito, por tanto no hay que dirigirse a ninguna otra página web para descargárselo, más que a la original de microsoft.
- El framework lo necesitarás también en tu casa, instalado en tu ordenador, porque como dije antes las aplicaciones que escribas se ejecutan usando los recursos del framework (la máquina virtual). Es decir, la filosofía es que podrás escribir una aplicación y ejecutarla en cualquier ordenador que tenga instalado el framework.
bueno, saludos

3
C# / Re: Descargar Visual C#.NET Framework 3.5
« en: Domingo 8 de Marzo de 2009, 13:05 »

4
C# / Propiedades dinámicas
« en: Miércoles 25 de Febrero de 2009, 15:31 »
Una preguntilla cuya respuesta no encuentro, seguramente porque no sé cómo se llama en realidad  a lo que pregunto.
Pretendo definir propiedades de un objeto de forma dinámica, es decir, una vez que ha sido instanciado en run-time. La filosofía es la misma que los "extension methods", pero para propiedades.
¿Alguien sabe si se puede hacer / cómo se hace / dónde buscar ?
Muchas gracias por cualquier orientación o ayuda.

5
C# / Re: Componente grafico de lineas
« en: Sábado 14 de Febrero de 2009, 11:32 »
Busca ZedGraph, es muy bueno y gratuito

6
C# / Re: consultar propiedades
« en: Lunes 2 de Febrero de 2009, 11:49 »
Gracias profesor
Por si le sirve a alguien, al final lo que estoy haciendo es crearme un nuefo Form que tiene un ListBox y un PropertyGrid.
En el ListBox pongo los objetos que quiero explorar y al seleccionar uno, lo asigno a la propiedad "SelectedObject" del PropertyGrid, de forma que ya puedo ver el valor de sus propiedades en tiempo de ejecución.
Un poco trabajoso pero espero que me sirva en adelante para muchos más proyectos.
saludos

7
C# / consultar propiedades
« en: Miércoles 28 de Enero de 2009, 13:40 »
Usando el Visual Studio ¿ Hay alguna forma de consultar el valor de variables o propiedades de objetos cuando está corriendo una aplicación ?
Cuando pones un punto de interrupción y corres en modo Debug, sí se puede. Simplemente añades la referencia del objeto en la ventana "Inspección" y exploras sus propiedades etc.
Pero si no pones un punto de interrupción, no veo cómo consultar el valor de algunas cosas, aparte de andar con mensajitos (System.Diagnostics.Debug.WriteLine etc...)
Este proceso es muy incómodo.
Por ejemplo, tengo un botón que actualiza parámetros en un objeto. Si quiero consultarlos, tengo que poner un punto de interrupción y parar la aplicación momentáneamente, y explorar desde el inspector.
Entonces, hay otra forma de hacerlo ? podría consultar un objeto sin necesidad de poner puntos de interrupción ?

gracias

8
C# / Re: Problema con archivo binario
« en: Viernes 23 de Enero de 2009, 19:55 »
Lo encontré
En la última línea de GetDouble debí poner return System.BitConverter.Int64BitsToDouble(j);
perdón por la molestia

9
C# / Problema con archivo binario
« en: Viernes 23 de Enero de 2009, 18:45 »
Hola, a ver si alguien me puede echar una manita por favor:
Tengo un archivo binario que quiero leer. El archivo contiene bloques de 40 bytes que se repiten hasta el final.
Por cada bloque tengo 5 datos de 8 bytes cada uno.

Es decir, tengo:
[dato1, dato2, dato3, dato4, dato5] --> 40 bytes, 8bytes cada uno, y vuelta a empezar con otros 40, etc ...
El primero es un Long que representa una fecha.
Los otros 4 son Doubles.

Bueno, pues necesito leerlos y no puedo.
El problema viene (creo) porque fueron creados en una aplicación Java. En Java, un byte es un sbyte de C#, por tanto lo que tengo es un Stream de sbytes. Lo único que se me ocurre hacer es crear un BinaryReader, y leer todos los sbytes en un Array. A partir de ahí no me sale bien.

Una muestra:

Código: Text
  1.  
  2.     BinaryReader br = new BinaryReader(new FileStream(pathArchivo, FileMode.Open, FileAccess.Read));
  3.  
  4.     // Leo los primeros 40 sBytes
  5.     sbyte[] prueba = new sbyte[40];
  6.     for (int i = 0; i < 40; i++) {
  7.         sbyte sb = br.ReadSByte();
  8.         prueba[i] = sb;
  9.     }
  10.     // Intento recuperar los datos
  11.     Recupera(prueba, 0);
  12.    
  13.     // -----------------------------------------------
  14.     public void Recupera(sbyte[] arr, int offset) {
  15.  
  16.         _time = getLong(arr, offset);
  17.         _d1= getDouble(arr, offset+ 1 * 8);
  18.         _d2= getDouble(arr, offset+ 2 * 8);
  19.         _d3= getDouble(arr, offset+ 3 * 8);
  20.         _d4= getDouble(arr, offset+ 4 * 8);
  21.     }
  22.     // -----------------------------------------------
  23.     private long getLong(sbyte[] arr, int offset) {
  24.  
  25.         return ((arr[offset+ 7] & 0xFFL) << 0) +
  26.                   ((arr[offset+ 6] & 0xFFL) << 8) +
  27.                   ((arr[offset+ 5] & 0xFFL) << 16) +
  28.                   ((arr[offset+ 4] & 0xFFL) << 24) +
  29.                   ((arr[offset+ 3] & 0xFFL) << 32) +
  30.                   ((arr[offset+ 2] & 0xFFL) << 40) +
  31.                   ((arr[offset+ 1] & 0xFFL) << 48) +
  32.                   (((long)b[offset+ 0]) << 56);
  33.     }
  34.     // -----------------------------------------------
  35.     private double getDouble(sbyte[] arr, int offset) {
  36.  
  37.         long j = ((arr[offset+ 7] & 0xFFL) << 0) +
  38.                     ((arr[offset+ 6] & 0xFFL) << 8) +
  39.                     ((arr[offset+ 5] & 0xFFL) << 16) +
  40.                     ((arr[offset+ 4] & 0xFFL) << 24) +
  41.                     ((arr[offset+ 3] & 0xFFL) << 32) +
  42.                     ((arr[offset+ 2] & 0xFFL) << 40) +
  43.                     ((arr[offset+ 1] & 0xFFL) << 48) +
  44.                     (((long)b[offset+ 0]) << 56);
  45.  
  46.         return (double)(j);
  47.     }
  48.     // -----------------------------------------------
  49.  
  50.  
  51.  

El caso es que la fecha me la recupera bien (obtengo un long que traslado a una fecha) pero con los doubles no hay manera.
¿ alguna ayuda o sugerencia ?
gracias

10
C# / Re: eventos entre forms
« en: Viernes 16 de Enero de 2009, 09:41 »
Acabo de releer la pregunta y veo que la he respondido al revés. Lo que te he respondido sirve para invocar un método del form principal desde el hijo.
de todas formas, para hacerlo al revés verás que es muy fácil, y el sistema es el mismo.
Ahora lo que debes hacer es guardar una referencia del form hijo en el principal, e invocar sus métodos de la misma forma.
por ejemplo, te creas una variable :
Form _formHijo;

y asignas su contenido en el momento de crear el hijo:
_formHijo = new Form2(this);
_formHijo.ShowDialog();

Ahora ya la tienes guardada y puedes hacer, desde otro botón:
_formHijo.RellenaListBox(miTextBox.Text);

y el hijo debe recoger ese dato en el método RellenaListBox(string elTexto) y añadirlo al ListBox correspondiente.

saludos

11
C# / Re: eventos entre forms
« en: Viernes 16 de Enero de 2009, 09:30 »
Veamos
--> El Form1 es el form principal

Código: Text
  1.  
  2. namespace Ejemplo {
  3.     public partial class Form1 : Form {
  4.  
  5.         public Form1() {
  6.             InitializeComponent();
  7.         }
  8.  
  9.         // Este es el método que crea el form hijo
  10.         private void btnCargar_Click(object sender, EventArgs e) {
  11.             Form2 form2 = new Form2(this);    // --> Así le pasas una referencia al hijo de este form (el principal), para que pueda invocar sus métodos
  12.             form2.ShowDialog();
  13.         }
  14.  
  15.         // Este es el método que se invocará desde el form hijo
  16.         public void HOLA(){
  17.             System.Diagnostics.Debug.WriteLine("Hola desde el form hijo");
  18.         }
  19.  
  20.     }
  21. }
  22.  

--> El Form2 es el hijo

Código: Text
  1.  
  2. namespace Ejemplo {
  3.     public partial class Form2 : Form {
  4.  
  5.     Form _formPrincipal;    // --> Aquí se guardará la referencia del Form principal que viene en el constructor al instanciar una clase de este objeto
  6.  
  7.     public Form2(Form fp){
  8.         _formPrincipal = fp;    // --> Aquí guardamos efectivamente esa referencia
  9.         InitializeComponent();
  10.     }
  11.  
  12.     private void button1_Click(object sender, EventArgs e){
  13.         // Ahora ya podemos usar los métodos del Form principal
  14.         _formprincipal.HOLA();
  15.     }
  16.  
  17. }
  18. }
  19.  

12
C# / Re: eventos entre forms
« en: Martes 13 de Enero de 2009, 12:11 »
al crear el Form2 pásale una referencia del Form principal
Sería:

Código: Text
  1.  
  2. private void btnCargar_Click(object sender, EventArgs e) {
  3.     Form2 form2 = new Form2(this);
  4.     form2.ShowDialog();
  5. }
  6.  
  7.  

El Form2, en el constructor, haz que guarde esa referencia en una variable para poder dirigirse a ella en lo sucesivo.

sl2

13
C# / Re: Tres Capas
« en: Martes 13 de Enero de 2009, 12:07 »
:lol:

14
C# / Re: Resetear un formulario
« en: Jueves 20 de Noviembre de 2008, 09:13 »
claro, es una forma más elegante pero implica que el valor inicial de cada control es siempre el mismo (" " para los textos, false para checked, etc...)
saludos

15
C# / Re: Resetear un formulario
« en: Martes 18 de Noviembre de 2008, 19:45 »
Por "resete mi formulario a sus valores iniciales" supongo que te refieres a los controles que contiene (textBoxes, Campos para insertar números, etc...). Si es así, tendrias que guardar los valores iniciales en algunas variables, y luego al pulsar el botón, establecer cada control con su valor inicial. Por ejemplo, para un Label, un TextBox y un NumericUpDown podrias hacer:
String valorIni_01 = "Cadena 1";
String valorIni_02 = "Cadena 2";
int valorIni_03 = 25;
etc...

Luego al pulsar el botón:
Lab01.Text = valorIni_01;
TextBox01.Text = valorIni_02;
NumericUpDown01.Value = valorIni_03;

etc...

16
C# / Re: comparar fechas, horas.... en C#
« en: Lunes 17 de Noviembre de 2008, 20:42 »
Con esos datos poco se puede hacer
habría que mirar en la documentación de ese programa cómo se obtiene cada objeto barra (bar), para luego obtener el DateTime de esa barra, una vez obtenida.
Lo usual sería tener un objeto que contiene todas las barras, y obtener la barra en cuestión mediante un método al uso.

Por ejemplo, supongamos que es una colección de barras (que llamaremos Serie), lo usual sería hacer algo así como:
bar laBarra = Serie[indice]; // donde indice es eso, la posición de esa barra.
TimeSpan horaDeLaBarra = laBarra.DateTime.TimeOfDay;

Otro ejemplo estándar sería esta posibilidad:
bar laBarra = Serie.Ago(10) // El método Ago(i) se aplica sobre la colección de barras, (no sobre una barra en concreto) y devuelve la barra de n periodos anterior.
etc ...

Pero ya te digo, sin saber a qué programa te refieres y sin saber su API, poco podemos aportar desde aquí
Saludos

17
C# / Re: comparar fechas, horas.... en C#
« en: Viernes 14 de Noviembre de 2008, 18:53 »
Estás comparando dos cosas diferentes:
- un objeto TimeSpan, en el primer término de la comparación, que es < DateTime.Now.TimeOfDay >
- un objeto nosequé, en el segundo término, que viene dado por < 15:30 > , cosa que no entiende el método "Compare"

Vayamos por partes. Parece que quieres comparar dos horas diferentes.
Puedes hacer dos cosas:

1- Usando el método "Compare" de DateTime.
Como debes comparar dos DateTimes, debes construir el segundo a partir de la Hora. Los dos DateTimes deben ser del mismo día, pues no tiene sentido comparar una hora de un día y otra de otro día. Ej:
Código: Text
  1. DateTime DT_ahora = DateTime.Now;
  2. DateTime DT_TresyMedia = new DateTime(DT_ahora.Year, DT_Ahora.Month, DT_Ahora.Day, 15, 30, 0);
  3. Console.WriteLine(DateTime.Compare(DT_ahora, DT_TresyMedia));
  4.  
Verás que para construir el segundo (con año, mes, dia, hora, min, seg) he usado la fecha de hoy.

2- Usando el método "Compare" de TimeSpan, que acepta como entrada dos TimeSpan diferentes, sin fecha.
Código: Text
  1. TimeSpan TS1 = DateTime.Now.TimeOfDay;   // Esto devuelve un TimeSpan
  2. TimeSpan TS2 = new TimeSpan(15, 30, 0);
  3. Console.WriteLine(TimeSpan.Compare(TS1, TS2));
  4.  

saludos

18
C# / Re: Problema con FileStream
« en: Miércoles 1 de Octubre de 2008, 09:50 »
Consulta las clases StreamReader y StreamWriter, alguna vez las usé y creo que son más faciles para lo que quieres.
saludos.

19
C# / Re: Operador "?" en C#
« en: Jueves 18 de Septiembre de 2008, 15:45 »
Es una forma abreviada de "if - then - else"
En realidad sería:
(lo que buscas es definir la variable dx)

Código: Text
  1. if (radioButton1.Location.X >= this.ClientSize.Width - radioButton1.Width) {
  2.     dx = -1;
  3. } else {
  4.     // nada, dx se queda igual
  5. }
  6.  

20
C# / Re: Seleccionar dos Radiobutton o un solo checkbox
« en: Lunes 8 de Septiembre de 2008, 20:28 »
Creo que debes poner cada grupo de RadioButtons dentro de un contenedor diferente, si no, por defecto se interpretan como relacionados entre sí.
Prueba poner cada uno dentro de un marco diferente (un GroupBox para cada pregunta bastará).
saludos.

21
C# / Encriptar un String
« en: Lunes 8 de Septiembre de 2008, 16:36 »
Hola a tod@s

Tengo que guardar algunos datos de una aplicación (preferencias y otros) en un archivo.
Se me ha ocurrido usar Xml para guardarlos, por su facilidad para volver a leerlos y tenerlos disponibles, al abrir de nuevo la aplicación.
Ahora el problema que se me plantea es encriptar dicho Xml para que no pueda ser leido y modificado por un simple editor de texto.
He repasado un poco el espacio "System.Security.Cryptography" pero la verdad no me entero de mucho. Me basta con una simple API con una clave para cifrar y descifrar un string (el texto del Xml), no me hace falta pares de claves pública/privada (que no sé usar) ni cosas tan complejas.

¿alguien sabe cómo hacerlo?
muchas gracias.

22
C# / Re: Listas de Listas en C#
« en: Domingo 31 de Agosto de 2008, 11:57 »
Si me permites, cambio los nombres de las declaraciones para no confundirme yo mismo

List<List<string>> almacen = new List<List<string>>();

// Ahora vas rellenando los datos en las sucesivas listas
List<string> datos1 = new List<string>();
datos1.Add("D1 - nombre");
datos1.Add("D1 - direccion");
etc... para la lista datos1

// Se inserta la lista datos1 en la lista de listas almacen
almacen.Add(datos1);

// Ahora para recuperar algun dato:
List<string> datos1 = almacen[0]; // esta es la primera <lista> de la <lista de listas>
string nombre= datos1[0]; // Este es el primer valor de la lista anterior
MessageBox.Show("El primer dato de la primera lista es: " + nombre);

Cuando entiendes el proceso ya lo puedes hacer de una vez, por ejemplo adoptando tu nomenclatura:
MessageBox.Show("El primer dato de la primera lista es: " + Listas_de_Nombres[0][0]);
siendo: Listas_de_Nombres[0] la primera <lista> de la <lista de listas>
siendo Listas_de_Nombres[0][0] el primer nombre de la primera <lista> de la <lista de listas>

saludos

23
C# / Re: Precisión
« en: Viernes 29 de Agosto de 2008, 20:07 »
Gracias profe  :D
Definitivamente, parece que usar el tipo Decimal es a la vez la solución y el problema.

Respondiendo a tu pregunta "¿ Necesito alta precision, porque requiero guardar valores con varios decimales ?"
La respuesta es "no" , no necesito alta precisión (todos los valores deben llevar como máximo 5 decimales). Por tanto, usaré el tipo Float.

Sin embargo, al usar el Float, cualquier cálculo sobre ellos (por sencillo que sea) da un resultado erróneo.
Otra solución que encontré es usar Math.Round(unFloat, 5) para redondear al 5º decimal, después de cada operación.
Ahora debo elegir entre tiempo de proceso y uso de memoria.

gracias en cualquier caso.

24
C# / Precisión
« en: Viernes 29 de Agosto de 2008, 10:37 »
Hola amigos, a ver si me podeis ayudar en una duda que me trae de cabeza.

En algún lugar de un programa uso listas de valores en coma flotante. Puesto que cada valor sólo usa como máximo cinco posiciones decimales, me dispongo a usar el tipo que menos recursos necesite, a elegir entre Decimal (16 bytes), Double (8 bytes) y Float (4 bytes). Evidentemente el Float es el más económico en recursos, sobre todo si usamos listas con miles de Floats dentro.

Sin embargo, cuando realizo operaciones en los valores, la precisión se va degradando de forma que siempre obtengo decimales en posiciones que no deberían estar. Para hacerme entender, 0.0075d + 0.0025d debería ser 0.01 sin embargo me sale un número con muchos más decimales que se aproxima mucho al resultado correcto.

El mismo error me ocurre con los Float, únicamente trabajando con Decimal me realiza las operaciones correctamente, pero entonces uso 16 bytes en vez de 4 (4 veces más de espacio en memoria !!).

A modo de ejemplo:

Código: Text
  1. static void Main(string[] args) {
  2.             List<float> listaF = new List<float>();
  3.             float f1 = 0.0075F;
  4.             float incrementoF = 0.0025F;
  5.            
  6.             for (int i = 0; i < 100; i++) {
  7.  
  8.                 // Esto se degrada con el paso de las iteraciones, y adquiere cada vez más decimales
  9.                 f1 = f1 + incrementoF;
  10.                 // Tengo que hacer esto para que pierda los decimales que no interesan
  11.                 //f1 = Single.Parse(f1.ToString("F4"));
  12.                 listaF.Add(f1);
  13.  
  14.                 Console.WriteLine("Posición {0}: {1}", i, f1);
  15.             }
  16.  
  17.             //Poner un punto de interrupción aquí, y mirar la lista en la ventana de "Variables locales" del debugger
  18.             Console.ReadLine();
  19. }
  20.  

Bueno, veréis que la única solución que se me ocurre es truncar los decimales sobrantes convirtiendo a string y volviendo a parsear esa cadena, una solución bastante chapucera que además es poco eficiente. ¿ Cómo debo hacer para que me sume correctamente, sin decimales fantasma ?

gracias.

25
C# / Re: Cambiar Nombre De Elemento Y Usar Propiedades
« en: Domingo 15 de Junio de 2008, 16:02 »
La verdad es que cuesta bastante de entender, y sobre todo porque proporcionas poca información, pero bueno voy a intentarlo ...

A ver, supongo que tienes varios PictureBox, cada uno con una propiedad "Name" asignada y diferente, del tipo "verde1", "verde2", etc...

Lo primero es que alguien deberá guardar la lista de todos los PictureBox. Por ejemplo, supongamos que guardas una referencia de cada PictureBox en una lista del formulario principal. Llamaremos a esa lista "listaPB", y será del tipo genérico List<PictureBox>.

Ahora, desde el método que usarás para activar la visibilidad, tendrás que construir el nombre del PictureBox adecuado (el nombre será un string), buscarlo en la lista, y activar la visibilidad.

Por ejemplo, imaginemos que todo pasa cuando pulsas un botón. Dentro del método del botón tendrás que poner algo así como:

// Teniendo en cuenta que el número ya lo sabes, no explicas cómo
Código: Text
  1. string nombrePB = &#34;Verde&#34; + numero.ToString();
  2.  
// Ahora buscamos en toda la lista el PictureBox que cumpla la coincidencia:
Código: Text
  1. foreach (PictureBox PB in listaPB){
  2.     if (PB.Name == nombrePB){
  3.         PB.Visible = true;
  4.     }
  5. }
  6.  

Creo que es esto lo que preguntas, saludos.

Páginas: [1] 2