Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > .NET
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-10-2024
REHome REHome is offline
Miembro
 
Registrado: jul 2003
Ubicación: España
Posts: 475
Poder: 22
REHome Va por buen camino
Mejor forma de pasar conjunto de funciones

Hola:

Antes usaba el uso de void sin devolver valor. Un amigo me dijo en esta semana que mejor que te devuelva un valor, un número al acabar una función con argumento tipo int, que te devuelva un número en Return. Es para salir de la función con un valor en vez de usar void (vacío).

Con este valor sales de la función y va hacia un Swtich Case, para elegir menús.

Por ejemplo en este vídeo. Hay partes del menú con submenú donde dice > ATRÁS INICIO.

Ver vídeo.

Si pulsa > ATRÁS, sale de la función. Si pulso > INICIO, voy a otra función sin salir de esta, en el cual crea una pila de memoria y esto no interesa, porque se gasta, y también tiene comportamientos no deseados cuando usa variables estáticas ya que vuelve a la función por donde iba al salir.

Es decir, a la hora de crear menús y menús, lo hacía como si estuviera haciendo una página Web html, poniendo enlaces en una ventana a otra o archivos.html en el cual no hay ningún problema de pilas de memoria o StackOverflow.

Da igual en que menú o submenú estés, también funciona el puerto serie como entrada de datos y esto debe almacenarse en variables internas, luego voy a mirar por el menú y veo sus datos.

¿Algún consejo sobre diseño con C# modo consola?

Saludos.
__________________
http://electronica-pic.blogspot.com....n-arduino.html Manuales de electrónica general, PIC y Arduino.
Responder Con Cita
  #2  
Antiguo 13-10-2024
navbuoy navbuoy is offline
Miembro
 
Registrado: mar 2024
Posts: 280
Poder: 2
navbuoy Va por buen camino
puedes hacer las funciones de menus de esta forma

void Menu_Principal(void)
{
//muestras con printf() o lo que sea las opciones en la consola

//coges con getch() o con Scanf() la opcion que elige el usuario

//finalmente llamas a la funcion que corresponda a esa opcion de menu con un switch o con varios IF (Altas, Bajas, Modificaciones o lo que sea)
}
Responder Con Cita
  #3  
Antiguo 14-10-2024
navbuoy navbuoy is offline
Miembro
 
Registrado: mar 2024
Posts: 280
Poder: 2
navbuoy Va por buen camino
te pongo un ejemplo en C++ Builder

(las funciones textattr(), gotoxy(), cprintf() y clrscr() podrian ser especificas de C++ Builder recuerda eso




Código:
#include <iostream>
#include <tchar.h>
#include <stdio.h>
#include <conio.h>

int Menu_Principal(void);


int _tmain(int argc, _TCHAR* argv[])
{
  int valor = 0;

  valor = Menu_Principal();

  printf("\r\n\r\nSe selecciono la opcion %d del Menu Principal", valor);

  printf("\r\nEl programa ha terminado");
  getch();  //Esperamos pulsacion de tecla para terminar y cerrar ventana de consola
  exit(0);
}

int Menu_Principal(void)
{
  char opcion = ' ';

  INICIO_MENU:

  textattr(2);
  clrscr();


  gotoxy(10,8); cprintf(" oOo[ MENU PRINCIPAL ]oOo ");
  gotoxy(10,10); cprintf("[1].- ALTAS");
  gotoxy(10,11); cprintf("[2].- BAJAS");
  gotoxy(10,12); cprintf("[3].- MODIFICACIONES");
  gotoxy(10,13); cprintf("");
  gotoxy(10,14); cprintf("[0].- SALIR");
  gotoxy(10,16); cprintf("INTRODUCE OPCION: ");

  opcion = getch();   //ten en cuenta que si tomamos con getch solo podemos coger 1 caracter
					  // o sea numeros de 0 al 9 y algun caracter del Abecedario

  if(opcion == '1')  {
						//Llamamos a funcion que corresponda
						return(1);
						 }

  else if(opcion == '2')  {
						//Llamamos a funcion que corresponda
						return(2);
						 }

  else if(opcion == '3')  {
						//Llamamos a funcion que corresponda
						return(3);
						 }

  else if(opcion == '0')  {
						return(0);

						 }

  else {
		 gotoxy(10,16); cprintf("OPCION NO VALIDA - Pulse una tecla para continuar...");
         getch();
		 goto INICIO_MENU;
		   }

}
Responder Con Cita
  #4  
Antiguo 15-10-2024
REHome REHome is offline
Miembro
 
Registrado: jul 2003
Ubicación: España
Posts: 475
Poder: 22
REHome Va por buen camino
Lo pasé un poco a C++.



Siempre me dice programa terminado.

Código modificado un poco.

Código:
#include <iostream>
#include <windows.h> // Para mostrar texto en el título de la ventana.
#include <stdio.h>   // Cambio color de fondo y letras.
#include <tchar.h>
#include <stdio.h>
#include <conio.h>

using namespace std;
//using std::cout;
//using std::cin;

// Función posición del cursor.
void gotoxy(int ancho_x, int alto_y)
{
	HANDLE hcon;
	hcon = GetStdHandle(STD_OUTPUT_HANDLE);
	COORD dwPos{};
	dwPos.X = ancho_x;
	dwPos.Y = alto_y;
	SetConsoleCursorPosition(hcon, dwPos);
}

int Menu_Principal(void);


int _tmain(int argc, _TCHAR* argv[])
{
	int valor = 0;

	valor = Menu_Principal();

	cout << "\r\n\r\nSe selecciono la opcion %d del Menu Principal", valor;

	cout << "\r\nEl programa ha terminado";
	//getch();  //Esperamos pulsacion de tecla para terminar y cerrar ventana de consola
	exit(0);
}

int Menu_Principal(void)
{
	#pragma region "Configuración ventana."
	// Mostrar caracteres correctamente en pantalla y título de la ventana.
	SetConsoleOutputCP(65001);
	wchar_t titulo[128];
	MultiByteToWideChar(CP_UTF8, 0, "Título de la ventana", -1, titulo, 128);
	SetConsoleTitleW(titulo);

	// Tamaño de la pantalla. Se cambia en los dos últimos dígitos.
	SMALL_RECT r = { 0, 0, 80, 20 }; // X = 80, Y = 20.
	SetConsoleWindowInfo(GetStdHandle(STD_OUTPUT_HANDLE), TRUE, &r);

	// Cambio color de 6 (amarillo / naranja), color letras 0 (negro).
	system("color 60");

	// Ocultar cursor.
	CONSOLE_CURSOR_INFO cci;
	GetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cci);
	cci.bVisible = 0; // 0 oculta. 1 muestra cursor.
	SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cci);
#pragma endregion
	char opcion = ' ';

INICIO_MENU:

	//textattr(2);
	//clrscr();


	gotoxy(10, 8);  cout << " oOo[ MENU PRINCIPAL ]oOo ";
	gotoxy(10, 10); cout << "[1].- ALTAS";
	gotoxy(10, 11); cout << "[2].- BAJAS";
	gotoxy(10, 12); cout << "[3].- MODIFICACIONES";
	gotoxy(10, 13); cout << "";
	gotoxy(10, 14); cout << "[0].- SALIR";
	gotoxy(10, 16); cout << "INTRODUCE OPCION: ";

	//opcion = getch();   //ten en cuenta que si tomamos con getch solo podemos coger 1 caracter
	// o sea numeros de 0 al 9 y algun caracter del Abecedario

	cin >> opcion;

	if (opcion == '1') {
		//Llamamos a funcion que corresponda
		return(1);
	}

	else if (opcion == '2') {
		//Llamamos a funcion que corresponda
		return(2);
	}

	else if (opcion == '3') {
		//Llamamos a funcion que corresponda
		return(3);
	}

	else if (opcion == '0') {
		return(0);

	}

	else {
		gotoxy(10, 16); cout << "OPCION NO VALIDA - Pulse una tecla para continuar...";
		//getch();
		goto INICIO_MENU;
	}

}
En cuantoal goto, cuanto menos se uses mejor. Prohibido usar Goto me decía mi profesor a toda la clase que éramos unos casi 30 alumnos.
__________________
http://electronica-pic.blogspot.com....n-arduino.html Manuales de electrónica general, PIC y Arduino.
Responder Con Cita
  #5  
Antiguo 16-10-2024
navbuoy navbuoy is offline
Miembro
 
Registrado: mar 2024
Posts: 280
Poder: 2
navbuoy Va por buen camino
bueno eso suelen decirlo porque puede "liar" mucho el codigo pero si queda claro para que lo usas y no induce a confusiones puedes usarlo que para algo esta en el lenguaje, si no, no estaria pero a mi la verdad que muchas veces me viene bien

claro que siempre puedes encerrar el menu en un bucle for( ;; ) y inducir la salida condicional con la opcion correspondiente con un break;
Responder Con Cita
  #6  
Antiguo 27-10-2024
REHome REHome is offline
Miembro
 
Registrado: jul 2003
Ubicación: España
Posts: 475
Poder: 22
REHome Va por buen camino
¿Será algo así por poner un ejemplo?

Código:
enum PAGINAS

{

    terminar = 0,

    irMenuPrincipal = 1,

    irVolumen = 2,
    irBrillo = 3,
    irAltavoces = 4

}

void main ()
{* * 
int dondeIr =i rMenuPrincipal;
* * while(dondeIr != terminar)
   {* * * * 
        switch(dondeIr)
       {* * * * * * 
           case irMenuPrincipal:
* * * * * *    dondeIr = pantallaMenuPrincipal();
* * * * * *    break;

* * * * * *case irVolumen:
* * * * * * * *dondeIr = pantallaVolumen();
* * * * * * * *break;
*
 * * * * * case irBrillo:
* * * * * * * *dondeIr = pantallaBrillo();
* * * * * * * *break;

 * * * * * case irAltavoces:
* * * * * * * *dondeIr = pantallaAltavoces();
* * * * * * * *break;
* * * * }
* * }
}
__________________
http://electronica-pic.blogspot.com....n-arduino.html Manuales de electrónica general, PIC y Arduino.
Responder Con Cita
  #7  
Antiguo 27-10-2024
navbuoy navbuoy is offline
Miembro
 
Registrado: mar 2024
Posts: 280
Poder: 2
navbuoy Va por buen camino
se me antoja un poco raro estructurarlo asi

yo soy mas de poner algo como:

Código:
switch(opcion)
{

   case 1:    // Menu principal
                 Funcion_Menu_Principal();
                 break;

   case 2:    // Menu Altas
                 Funcion_Menu_Altas();
                 break;

    etc.. etc...
}
Responder Con Cita
  #8  
Antiguo 16-11-2024
REHome REHome is offline
Miembro
 
Registrado: jul 2003
Ubicación: España
Posts: 475
Poder: 22
REHome Va por buen camino
Este está mejor, el que dices.
__________________
http://electronica-pic.blogspot.com....n-arduino.html Manuales de electrónica general, PIC y Arduino.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Pasar Variables de Forma a Forma con delphi.net ASP ASAPLTDA .NET 5 05-07-2007 20:51:31
Como Pasar Variables de Forma a Forma con delphi.net ASP ASAPLTDA Internet 2 02-07-2007 16:26:41
como pasar a un stored procedure un conjunto de datos en FB 1.5 pvizcay Firebird e Interbase 8 04-12-2006 04:44:09
Cual es la mejor forma de pasar datos de MSaccess a MySQL ctronx Conexión con bases de datos 7 04-08-2004 01:04:53
Que forma es mejor ??? chele Conexión con bases de datos 1 19-03-2004 15:36:13


La franja horaria es GMT +2. Ahora son las 18:49:21.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi