elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


  Mostrar Mensajes
Páginas: [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... 88
1  Programación / .NET (C#, VB.NET, ASP) / Re: Corregir o quitar elementos del comBoBox en: Ayer a las 01:11
Normal que en el segundo código no funcione si estás intentando comparar el contenido de <datos> a "True" (línea 74) cuando no estás guardando "True". Y tú me dirás que sí, que en la línea 71 llamas a la función y guarda "True" en <datos> pero entonces yo te diré "y qué pasa con el espacio que estás añadiendo al final?? (línea 62)"

Por otra parte decir que ese código tiene demasiado acoplamiento. Utilizas todo el tiempo la misma variable <datos> para guardar cada uno de los resultados. Es mejor que la función devuelva un string con el resultado y ya tú lo asignarás a la variable que quieras en cada momento.

Una mejor opción sería algo como esto:
Código
  1. private static readonly char SEPARADOR = "|"; // Separador de elementos. Por si en algun momento necesitas cambiarlo por otro
  2.  
  3. private string ConsigueComponentes(string hwclass, string syntax) {
  4.    string resultado = string.Empty;
  5.    ManagementObjectSearcher mos = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM " + hwclass);
  6.    foreach (ManagementObject mj in mos.Get()) {
  7.        if (!string.IsNullOrEmpty(mj[syntax].ToString()))
  8.            resultado += mj[syntax].ToString() + SEPARADOR;
  9.    }
  10.    // El ultimo separador nunca lo vas a necesitar para nada -> Lo puedes eliminar directamente y quitarte futuros problemas
  11.    resultado = resultado.Remove(resultado.Length - 1);
  12.    return resultado;
  13. }
  14.  
  15. // Mejor tener un metodo que te diga si hay o no hay disco con true/false y luego ya lo usaras donde lo necesites
  16. private bool HayDisco() {
  17.    string resultado = ConsigueComponentes(...);
  18.    return (resultado == "True");
  19. }
  20.  
  21. private void Form_Load(object sender, EventArgs e) {
  22.    ...
  23.    string[] unidades = ConsigueComponentes(...).Split(SEPARADOR);
  24.    comboBox.Items.AddRange(unidades);
  25.    ...
  26. }
2  Programación / .NET (C#, VB.NET, ASP) / Re: Corregir o quitar elementos del comBoBox en: 8 Abril 2021, 20:24 pm
Exactamente, como dice [D]aniel se soluciona.
Como estás añadiendo un espacio después de cada unidad, te queda una cadena como esta (sustituyo cada espacio por un _):
Código:
datos = "G:_F:_"
Primer Split -> "G:" (parte izquierda) + "F:_" (parte derecha)
Segundo Split -> "G:" + "F:" (parte izquierda) + "" (parte derecha)
Por eso al final queda un último elemento que es una cadena vacía. Porque es lo que queda a la derecha del último espacio.

Otra solución válida es:
Código
  1. datos = ... // datos = "G:_F:_"
  2. datos = datos.Trim(); // Elimina espacios iniciales y finales -> datos = "G:_F:"
  3. string[] unidades = datos.Split(' ');
3  Programación / .NET (C#, VB.NET, ASP) / Re: Corregir o quitar elementos del comBoBox en: 7 Abril 2021, 23:52 pm
Claro, entonces el problema estaba en que no se estaba guardando en <datos> todas las unidades sino que se van sobreescribiendo en cada iteración. Entonces tienes que concatenar todo y preferiblemente como dice Serapis añadiendo un espacio entre cada unidad para separarlos mediante el espacio y mantener los dos puntos...
Código
  1. datos += mj[syntax].ToString() + " ";
  2. ...
  3. string[] unidades = datos.Split(' ');
4  Programación / Programación C/C++ / Re: C o C ++ ?? en: 7 Abril 2021, 21:20 pm
Tanto con C como con C++ puedes hacer una infinidad de programas de prácticamente cualquier tipo pero es cierto que profesionalmente C se utiliza mucho en sistemas operativos, servicios, etc. C se suele denominar un lenguaje de nivel medio (tiene características tanto de alto nivel como de bajo nivel) lo que permite desarrollar con mucho detalle a nivel físico (incluso incluir lenguaje ensamblador en el propio código C) y generar un código muy eficiente comparado con lenguajes de más alto nivel (Java, C#, Python,...)

Al final C se queda muy limitado al utilizar paradigmas de programación orientada a objetos (POO) por lo que aquí entra C++. Brevemente se puede decir que es una extensión de C con clases. C++ admite todo lo que admite C más lo creado para C++. Se puede decir que ya es de alto nivel aunque permite programar a bajo nivel también.

Yo empecé con ellos y no me arrepiento. ¿Fácil? No, no será. Si buscas facilidad y una curva de aprendizaje alta (grandes resultados en poco tiempo), C/C++ no son tus lenguajes. Java o C# serán mejores lenguajes para ese fin. Si buscas o te gusta saber cómo funciona todo en profundidad y que nada se escape a tu control, entonces sí, C/C++ serán unos buenos lenguajes para ti.

Los lenguajes de más alto nivel se podría decir que te dan el trabajo hecho. Para que lo entiendas, un ejemplo. Estás haciendo un programa y necesitas hacer x cosa...
  • ¿Utilizas Java o C#? Seguro que ya tienen una función que hace eso. Investiga, encuentra esa función, lee su documentación, aprende cómo funciona y utilízala. ¿Cómo lo hace? Ni idea. En la mayoría de casos ni lo sabrás ni te pararás a investigarlo pero ya tienes tu tarea hecha.
  • ¿Utilizas C o C++? No busques esa función. Hazla tú. ¿Lleva más tiempo? Seguramente. ¿Cómo lo hace? Como tú quieras hacerlo. Cualquier tarea se puede programar de forma diferente y tú tendrás la tuya según tu forma de pensar. Igual no es la mejor solución pero es tuya, sabes cómo funciona al detalle y la puedes ir modificando/mejorando.
Obviamente en C y en C++ también hay funciones hechas, igual que también puedes hacer las tuyas propias en Java o C# pero digamos que es para que tengas una idea de lo que significa programar con unos lenguajes u otros.

PD: Si quieres hacer programas con interfaz gráfica personalmente te recomendaría C# con WPF. Para otros fines como programas de consola, algoritmia, estudio de eficiencia... te animaría a probar C o C++. Al fin y al cabo empezar a probar un lenguaje no significa que no puedas aprender después otros.  :rolleyes: :-X
5  Programación / .NET (C#, VB.NET, ASP) / Re: Corregir o quitar elementos del comBoBox en: 7 Abril 2021, 19:19 pm
No se que pasa.
En vez de verse:

F:
G:

En el comboBox, aparece esto.


Ver imagen.

En este otro código de abajo, solo se me ve así:
G:
:

¿Dónde está la F:?  ;D

Código
  1.        void UnidadDisco()
  2.        {
  3.            // Nombre de la unidad.
  4.            ConsigueComponentes("Win32_CDROMDrive", "Id");
  5.  
  6.            // Delimitador.
  7.            string[] unidades = datos.Split(':');
  8.  
  9.            foreach (string unidad in unidades)
  10.            {
  11.                comboBox_Unidad.Items.Add(unidad + ":");
  12.            }
  13.  
  14.            // Selecciona la primera unidad.
  15.            comboBox_Unidad.SelectedIndex = 0;
  16.        }

Saludos.
Por un lado, no se puede ver la imagen. Ni en el cuadro de imagen ni mediante el enlace de "Ver imagen".
Y por otro lado, si no se muestra correctamente la F tiene que ser porque en la variable <datos> no está bien guardado.
Si el resultado ha sido:
Código:
G:
:
tiene que ser porque en <datos> estaba almacenado la siguiente cadena: "G::".

Prueba a imprimir el contenido de <datos> para comprobarlo.
6  Programación / .NET (C#, VB.NET, ASP) / Re: Corregir o quitar elementos del comBoBox en: 7 Abril 2021, 07:29 am
Claro, si digamos que en <datos> tienes algo como:
Código:
C:D:F:
Y vas recorriendo y agregando carácter a carácter pues agregarás:
Código:
C
:
D
:
F
:

Otra solución:
Código
  1. string[] unidades = datos.Split(':');
  2. foreach(string unidad in unidades)
  3.  combobox.Items.Add(unidad);
Resultado:
Código:
C
D
F
G
El delimitador (':') no se incluye en las subcadenas. Para incluirlo puedes hacerlo manualmente:
Código
  1. combobox.Items.Add(unidad + ":");
O mediante un for() y el método Substring() o similares para recoger dos caracteres en vez de uno.
7  Programación / .NET (C#, VB.NET, ASP) / Re: Corregir o quitar elementos del comBoBox en: 6 Abril 2021, 23:23 pm
Sin tener más datos sobre cómo lo has implementado, la solución más genérica que se me ocurre es comparar si el valor es igual a ":" antes de agregarlo al combobox y en caso afirmativo, ignorar ese elemento.

Viendo el código de esa parte del programa igual se puede obtener una solución más "limpia" por decirlo de alguna manera.
8  Foros Generales / Sugerencias y dudas sobre el Foro / Re: Duda a cerca de la norma de no resolver tareas a los usuarios del foro. en: 5 Abril 2021, 21:17 pm
Bueno, viendo que nos encontramos aquí todos los habituales del foro para debatir este tema, aprovecharé para dejar también mi opinión al respecto.
Desde que empecé yo en el foro y habiéndome movido en mi mayoría por subforos de programación, hubo una cosa que me llamó especialmente la atención y que ya se ha citado por ahí:
Citar
Se pregunta por conceptos abstractos. Aquí no estamos para hacerle el trabajo a nadie
Creo que de todos los temas que he leído sólo me he encontrado dos casos en los que se podría decir que se preguntó por conceptos abstractos:
1. El código es demasiado grande y se publica un ejemplo simplificado que muestre el problema -> Esto puede dar problemas si el usuario considera irrelevante algo que realmente no lo es.
2. El usuario cree que está desarrollando un programa que nadie ha hecho antes y que valdrá millones cuando lo termine por lo que no se fía de publicar el código fuente tan alegremente.
Quitando esos dos casos que han ocurrido en alguna extraña ocasión, normalmente no se pregunta por conceptos abstractos. Yo entiendo que si tienes un problema y sobre todo si estás empezando no tengas ni idea de cuál pueda ser el motivo del error así que lo mejor para todos es publicar el código tal cual (además a ser posible Ctrl+C - Ctrl+V porque luego vienen los errores al reescribirlo) porque se han dado casos de que por no publicarlo el tema acaba con un puñado de mensajes pidiendo que se publique x parte del código.

Sobre el tema de hacer o no hacer las tareas, yo sé que en ocasiones he pecado de acabar haciendo más código del que pensaba. Eso sí, como dice el-brujo, con un poco de sentido común.
Usuario recién registrado, con muy pocos mensajes y todos pidiendo la misma tarea poniendo únicamente el enunciado -> Tiene todas las papeletas de ser ignorado/eliminado o llevarse una respuesta que no es la que está buscando.
Usuario habitual o que publica su código o que tras varias respuestas se le ve con interés por aprender y que realmente hace caso de lo que se le dice (no digo que no sea crítico con las respuestas pero se ve el que quiere mejorar y el que sólo quiere que eso funcione para aprobar) -> En este caso, dependiendo del tiempo que tenga también, pues sí me explayo un poco más sobre todo para corregir cosas que aunque funcionan no se deben hacer así (a veces con el propio programa y si tiene mucha paja con un ejemplo más compacto)
Todo esto sin contar los que directamente te mandan un mensaje privado con un historia (algunas muy imaginativas) para explicarte por qué no pueden hacerlo ellos (como si fueras tú el profesor) y que si se lo haces tú -> Mi respuesta tampoco les suele gustar demasiado... :-\

Siempre se ha dicho que el que hizo la ley, hizo la trampa y todas las reglas tienen siempre sus excepciones y sus vacíos legales. En un tema como este yo creo que debe primar el sentido común y sobre todo entre habituales del foro que todos estamos aquí voluntariamente (supongo  :silbar:) y por bastante tiempo.
Y yendo al tema concreto que ha dado lugar a toda esta trama y en el que yo también participé (con fragmentos de código), se puede ver un usuario que acaba de empezar y que no utiliza ni estructuras/clases ni colecciones de datos frente a una respuesta de @XSStringManolo utilizando estructuras, contenedores de la STL, parámetros por referencia, etc. En caso de querer hacer pasar ese código como suyo, cualquier profesor que se precie un poco debería tardar menos de 2 segundos en ver que ese código no es suyo.

PD: Por encima de hacer o no hacer la tarea, mi opinión es que esa respuesta en concreto era innecesaria porque no creo que proporcione ayuda a un usuario si se añaden tantas cosas que él no utiliza (ni sabrá utilizar). Ya irá aprendiendo poco a poco hasta poder llegar a soluciones bien escaladas como esa. En cuanto a mostrarle un código bien organizado, estoy de acuerdo.
9  Programación / .NET (C#, VB.NET, ASP) / Re: Lenguaje C# VS 19 problema con Win Forms en: 5 Abril 2021, 12:55 pm
En el código del fichero .cs tienes declarada alguna clase/estructura antes de la clase que hereda de Form?
De ser así modifica el orden para que la primera clase del fichero sea la que hereda de Form.

Si lo anterior no era el causante del problema, ve al Explorador de soluciones, selecciona el fichero .cs de la vista (el designer no, el más externo) y haciendo click derecho selecciona "Excluir del proyecto". Después haz click derecho en el proyecto - Agregar - Elemento existente... y selecciona nuevamente de la carpeta del proyecto el fichero .cs.

PD: Yo recompilaría el proyecto al hacer alguno de estos cambios por si acaso. Compilar - Recompilar solución.
10  Programación / .NET (C#, VB.NET, ASP) / Re: Lenguaje C# VS 19 problema con Win Forms en: 4 Abril 2021, 23:28 pm
Si abres el "Explorador de soluciones" de VS2019 para ver la estructura del proyecto, puedes hacer click derecho en el fichero .cs que quieras modificar y elegir "Ver diseñador".
Otra opción es tener abierto el código del fichero e ir a la barra superior de VS: Ver - Diseñador (Shift + F7).

Prueba ambas opciones y nos comentas los resultados.

Buenas tardes.

No está protegido contra escritura. Puedo modificar el código, pero el Form no aparece, está el archivo "designer" pero no me muestra la ventana, solo me muestra el código. Puedo modificar la acción de los botones, pero no puedo añadir un botón dentro del form porque no aparece la ventana. En cambio si ejecuto el programa, si funciona pero no es editable porque está en ejecución.
El fichero designer muestra únicamente el código. Para ver la ventana tienes que abrir el .cs superior al designer.
Si no te aparece igual es un problema con la vista del Explorador.
Páginas: [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... 88
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines