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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Toolbox en C#
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Toolbox en C#  (Leído 6,186 veces)
Nolohagan

Desconectado Desconectado

Mensajes: 47


Ver Perfil
Re: Toolbox en C#
« Respuesta #10 en: 5 Abril 2017, 10:40 am »

Citar
Nadie molesta por hacer preguntas, el foro está para eso, y a mi ME ENCANTA poder ayudar a resolver las dudas de los demás y que vayan aprendiendo como hacer "X" cosa. Si tienes dudas, siéntete libre de preguntar.


Nooooooooo. Como no lei antes tu comentario.... Estaba muchas horas ocupado a investigar mis preguntas. Fue una tortura.

Pero bueno. Me queda sola una pregunta. La minima:

He podido apreciar en tu codigo que tu hiciste que los elementos o nodos del Treeview se cargan recien cuando el programa corre. Y yo los nodos los puse de antemano. Es normal que los programadores hacen como tu o fue solo una decision personal?

Gracias :)


En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.810



Ver Perfil
Re: Toolbox en C#
« Respuesta #11 en: 5 Abril 2017, 17:51 pm »

He podido apreciar en tu codigo que tu hiciste que los elementos o nodos del Treeview se cargan recien cuando el programa corre. Y yo los nodos los puse de antemano.

Los nodos los creé en tiempo de ejecución basicamente por que de otra forma habría sido imposible mostrarte un ejemplo práctico de como hacerlo (de como inicializar cada nodo y con qué tipo de valores). Si yo hubiese añadido los nodos en tiempo de diseño, ¿qué código te habría enseñado en vez del que te mostré?:
Cita de: Elektro
Código
  1. // Los nodos hijos de controles.
  2. static TreeNode[]  childControlNodes = {
  3.    new TreeNode("Label") { Tag = typeof(Label) },
  4.    new TreeNode("ListBox") { Tag = typeof(ListBox) },
  5.    new TreeNode("ListView") { Tag = typeof(ListView) },
  6.    new TreeNode("TextBox") { Tag = typeof(TextBox) }
  7. };
...No habría podido desarrollar y mostrar un código funcional si no hubiese añadido los elementos en tiempo de ejecución para construir el contenido del TreeView.

SI hubiese añadido los nodos en tiempo de diseño a través del editor de nodos del TreeView, entonces tendría que haberte mostrado el código auto-generado por Visual Studio en el archivo Form1.Designer.cs ...lo cual podría haber generado confusión y desde luego no habría sido un ejemplo tan practico para mostrar:

Código
  1. private void InitializeComponent()
  2. {
  3. // ...
  4. //
  5. //TreeView1
  6. //
  7. this.TreeView1.Location = new System.Drawing.Point(130, 104);
  8. this.TreeView1.Name = "TreeView1";
  9. TreeNode1.Name = "NodeListBox";
  10. TreeNode1.Tag = typeof(ListBox);
  11. TreeNode1.Text = "ListBox";
  12. TreeNode2.Name = "NodeTextBox";
  13. TreeNode2.Tag = typeof(TextBox);
  14. TreeNode2.Text = "TextBox";
  15. TreeNode3.Name = "NodeLabel";
  16. TreeNode3.Tag = typeof(Label);
  17. TreeNode3.Text = "Label";
  18. this.TreeView1.Nodes.AddRange(new System.Windows.Forms.TreeNode[] { TreeNode1 });
  19. this.TreeView1.Size = new System.Drawing.Size(121, 97);
  20. this.TreeView1.TabIndex = 0;
  21. //
  22. //Form1
  23. //
  24. // ...
  25. }

Aparte, el editor en tiempo de diseño de nodos del TreeView solo acepta un valor de tipo String en la propiedad Tag  (-> TreeNode1.Tag = "ListBox"; ), por lo que deberías hacer modificaciones manuales en el código auto-generado de Visual Studio como yo he echo aquí arriba (-> TreeNode1.Tag == typeof(ListBox); ) para adaptarlo a tus necesidades... lo cual sería una necesidad un poco "engorrosa".



Es normal que los programadores hacen como tu o fue solo una decision personal?

En general lo común sería añadir los elementos de cualquier colección de items de un control (en este caso los nodos de un TreeView) en tiempo de diseño, de esta forma podemos representar el contenido de dicho control al instante, en tiempo de diseño (valga la redundancia), sin la necesidad de compilar el proyecto.

Pero si la intención es mostrar un ejemplo didáctico de como crear/añadir elementos, entonces logicamente la mejor decisión es añadir los elementos en tiempo de ejecución para mostrar como se deben añadir. Si la intención es crear elementos de forma dinámica, o a través de un DataSource.

Si lo prefieres puedes añadir los nodos en el editor de nodos en tiempo de diseño, de la siguiente manera:



Y luego desarrollar una simple función para resolver el typename en tiempo de ejecución de forma dinámica:

Código
  1. Type t = TypeNameResolver(treeView1.Nodes("NodeListBox").Tag); // Type = System.Windows.Forms.ListBox

Código
  1. private Type TypeNameResolver(string winFormsControlName) {
  2. string fullName = typeof(Form).AssemblyQualifiedName;
  3. fullName = fullName.Substring(fullName.IndexOf(","));
  4. fullName = string.Format("System.Windows.Forms.{0}{1}", winFormsControlName, fullName);
  5.  
  6. return Type.GetType(fullName, throwOnError: true, ignoreCase: true);
  7. }

Así sería como yo lo haria, pero eso son cosas que logicamente seria irrelevante mostrarlas en un ejemplo práctico como el que te mostré en mi otra respuesta.

Saludos!


« Última modificación: 5 Abril 2017, 18:08 pm por Eleкtro » En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines