Iniciar sesión

Ver la versión completa : Programadores C#, C sharp y C almohadilla ... manifestaos



josepzin
02/04/2014, 23:57
El caso es que después de eones sin tocar un lenguaje "de escritorio" he decidido hacer un par de chorradas con C#.

Abandoné la programación aproximadamente en 1996, en 2001 volví a tocar código con el HTML, luego en 2002 con Flash volví a sentir el gusanito de programar, en 2005 empecé con PHP y ya desde entonces no lo volví a dejar, pero hasta ahora siempre ha sido programación web (con la salvedad de Flash que permite generar archivos EXEs).

Ahora quiero hacer una chorrada para que funcione off-line y después de buscar varias opciones tipo PHPaEXE o HTML5aEXE, creo que lo mejor es que le de una oportunidad a un verdadero lenguaje para generar aplicaciones de escritorio.

Sin querer complicarme mucho la vida, vi que C# podía ser una buena opción, instalé el Sharp Develop y todo funcionó a la primera así que decidí intentarlo con este lenguaje.

Invoco en este hilo a los programadores de este lenguaje para poder cansarlos a chorripreguntas :P

GameMaster
03/04/2014, 00:07
aqui estoy, que necesitas ? xD

Ahora mismo mis aplicaciones son todas de escritorio (por fin las malditas aplicaciones en aspx estan aparcadas de momento xDD)

^MiSaTo^
03/04/2014, 00:09
Yo tb le doy al c# pero solo para el tema de moviles (win phone). Aun asi si puedo ayudar... Eso si, ponte visual studio con resharper

josepzin
03/04/2014, 00:14
Gracias a ambos.

Voy con las primeras chorripreguntas:
1 - ¿Hace falta tener instalado el .NET o algo así para que los EXE funcionen? me imagino que sí... :P
2 - ¿Me quedo con C# o quizás sea mejor que me vaya a otra opción?
3 - ¿Ventajas de "visual studio con resharper" sobre Sharp Develop? recuerda que yo quiero algo muy basico y no entiendo ni seguramente usaré más allá del 1%.

Lo que quiero hacer es una chorrada, de hecho seguramente se quede en "intención de hacer" porque ni idea si tendré tiempo para chorriperder!

GameMaster
03/04/2014, 00:24
1- of course, es el runtime, sino te sale un error con un codigo y sólo buscando en internet te daras cuenta que significa que te falta tener instalado el runtime xD
En XP lo necesitas, a partir del win7 ya vienen instalados.

2 - Yo amo el C#, cada uno ama lo suyo

3 - Dejate de mariconadas e instalate el VS2012 que es el ultimo

Por ultimo pasate por code project y tendras tu chorrada en una tarde ya que eres iniciante, sino la tendrias en 5 minutos

^MiSaTo^
03/04/2014, 00:38
Gracias a ambos.

Voy con las primeras chorripreguntas:
1 - ¿Hace falta tener instalado el .NET o algo así para que los EXE funcionen? me imagino que sí... :P
2 - ¿Me quedo con C# o quizás sea mejor que me vaya a otra opción?
3 - ¿Ventajas de "visual studio con resharper" sobre Sharp Develop? recuerda que yo quiero algo muy basico y no entiendo ni seguramente usaré más allá del 1%.

Lo que quiero hacer es una chorrada, de hecho seguramente se quede en "intención de hacer" porque ni idea si tendré tiempo para chorriperder!

1. Si, es el runtime como te ha dicho gamemaster
2. Si solo lo quieres para win, c# va bien. Sino por qué no te miras java?
3. Yo no he usado el sharp develop pero si mono develop y otro que no recuerdo y no hay color. Busca el visual studio que no es mal ide (de lo poco bueno que ha hecho microsoft). El ultimo es el 2013 y es solo para windows 8. Resharper es un plugin para añadir mucha mas funcionalidad, sobre todo a la hora de refactorizar. Sin el a mi vs me parece incompleto.

chipan
03/04/2014, 00:45
Añado contendio extra a las respuestas para la pregunta 1.
Dependiendo de los controles que utilices en el programa que hagas, puede hacer falta tener instalado una u otra versión de .net framework para que funcione. Si usas visual studio puedes mirar y cambiar la versión necesaria de .net framework en las opociones del proyecto.

GameMaster
03/04/2014, 00:53
los runtimes son retrocompatibles, asi que es mejor usar la menor version disponible en el entorno, para mas compatibilidad entre varios windows/users.
a veces necesitas alguna funcion que sólo esta en una version superior, pero hay siempre forma de hacer la misma tortilla sin tener que cambiar de sarten.
por otro lado, tambien es mejor por si despues vas a portar tu aplicacion a linux usando mono, ya que mono no soporta todas las clases y referencias de los distintos frameworks de windows

josepzin
03/04/2014, 01:03
Joñio... ¡¡8.86 GB ocupa el Visual Studio Ultimate 2012!! pero si mi portatil no tiene tanto espacio libre!! :D :D Creo que por ahora sigo con el Sharp Develop.

En principio me conformo con tener un ejecutable que funcione para Win.

Por algunos comentarios, ya estais hilando muy fino para mis conocimientos :)

GameMaster
03/04/2014, 01:06
instalate el 2010 entonces, es la mejor opcion en este caso, tb esta la version express con esa tienes de sobra y ocupa mucho menos, debe haber version iso de cd

chipan
03/04/2014, 01:48
Lo bueno del visual studio es que si no te arreglas con Cealmohadilla (c#) puedes tirar de visual basic o cualquier otro lenguaje.

josepzin
03/04/2014, 01:59
La verdad es que C me da algo de respeto :P

Descargando Visual C# 2010 Express.

josepzin
03/04/2014, 04:02
Instalado el Visual C# 2010 Express, parece que va bien aunque para lo que uso no noto diferencia con Sharp Develop.

aitorpc
03/04/2014, 07:37
Ahora pregunto yo, por que has elegido C# y no VB? Le tengo un poco de mania a este ultimo porque me parece feo y tosco pero es sencillote.

neglox
03/04/2014, 08:38
Yo llevo ya algo mas de un año trabajando con c# por temas laborales y vengo de C++. He de decir que para lo que yo uso, el manejo de listas/arrays de datos me parece una maravilla y más con LINQ. Y tiene un framework bastante completo que te puede ayudar en varias cosas.

De todas formas si se supone que son "un par de chorradas" a lo mejor te compensa otro lenguaje. Dinos un poco que quieres hacer y te intentamos aconsejar.

^MiSaTo^
03/04/2014, 09:09
Yo llevo ya algo mas de un año trabajando con c# por temas laborales y vengo de C++. He de decir que para lo que yo uso, el manejo de listas/arrays de datos me parece una maravilla y más con LINQ. Y tiene un framework bastante completo que te puede ayudar en varias cosas.

De todas formas si se supone que son "un par de chorradas" a lo mejor te compensa otro lenguaje. Dinos un poco que quieres hacer y te intentamos aconsejar.

Yo de C# solo puedo decir 3 cosas: LINQ, expresiones lambda y las genéricas. Esas 3 cosas me parecen muy muy potentes de C#. Ahora bien tampoco es perfecto eh?

GameMaster
03/04/2014, 10:32
a mi sólo me cuesta tener que quitar el using linq cada vez que creas una clase por defecto, microsoft y su mania de imponernos cosas, meter una referencia a linq por defecto cuando no lo quieres usar en tu form...

-----Actualizado-----


Ahora pregunto yo, por que has elegido C# y no VB? Le tengo un poco de mania a este ultimo porque me parece feo y tosco pero es sencillote.

escribes más con c#, los corchos y punto comas, pero es mas elegante, yo el vb .net prefiero evitarlo, aunque tb hay conversores online muy buenos para pasar codigo de uno a otro de forma bastante eficiente

IronArthur
03/04/2014, 11:28
Yo de C# solo puedo decir 3 cosas: LINQ, expresiones lambda y las genéricas. Esas 3 cosas me parecen muy muy potentes de C#. Ahora bien tampoco es perfecto eh?

Es lo unico que hecho de menos de no desarrollar en net pero por mucho.

Salu2

^MiSaTo^
03/04/2014, 11:40
a mi sólo me cuesta tener que quitar el using linq cada vez que creas una clase por defecto, microsoft y su mania de imponernos cosas, meter una referencia a linq por defecto cuando no lo quieres usar en tu form...

Para eso uso yo Resharper tb, para que me quite la mierda que no uso de las cabeceras de las clases :) (entre otras cosas)

Nathrezim
03/04/2014, 12:03
Es lo unico que hecho de menos de no desarrollar en net pero por mucho.

Salu2

Y Remoting, para aplicaciones distribuidas es la leche.

GameMaster
03/04/2014, 12:05
No lo he probado, pero he tenido que instalarme Dev Express porque un proyecto lo utiliza, y tambien modifica el IDE, y lo odio, siempre tengo que darle al unload al principio y a veces el IDE peta.

No se que mas features tiene la tool que dices, lo miraré a ver, de todas formas me gusta tener el IDE lo mas limpio posible de parasitos de third party's xD

^MiSaTo^
03/04/2014, 12:17
No lo he probado, pero he tenido que instalarme Dev Express porque un proyecto lo utiliza, y tambien modifica el IDE, y lo odio, siempre tengo que darle al unload al principio y a veces el IDE peta.

No se que mas features tiene la tool que dices, lo miraré a ver, de todas formas me gusta tener el IDE lo mas limpio posible de parasitos de third party's xD
A mi también me gusta tenerlo limpio pero esque Resharper añade funcionalidad que a mi parecer le falta a VS. Será que yo estoy acostumbrada a otros IDEs, no se.

GameMaster
03/04/2014, 12:23
cuales por ejemplo, o las mas importantes ?

^MiSaTo^
03/04/2014, 12:33
Sobre todo tema de refactoring y autocompletado de muchas cosas que no vienen por defecto (dependencyProperties por ejemplo).
Como digo yo tb sólo lo uso para programar para Windows Phone, no se si para otro tipo de cosas Resharper añade tanta funcionalidad

neglox
03/04/2014, 12:41
Resharper es un MUST como puede ser Visual Assist X para C++ (de hecho este último por costumbre lo uso en c# aunque otros compañeros usan el Resharper y hablan maravillas). Eso si el IDE sufre por cada plugin que se añade, yo evito en la medida de lo posible poner plugins. Los de Dev Express fuera. Al final yo me quedo con el Visual Assist y el Productivity Power Tools.

Para manejo de tablas los DataSets también me gustan bastante pero no sé si en otros lenguajes tienen algo similar.

^MiSaTo^
03/04/2014, 12:46
Resharper es un MUST como puede ser Visual Assist X para C++ (de hecho este último por costumbre lo uso en c# aunque otros compañeros usan el Resharper y hablan maravillas). Eso si el IDE sufre por cada plugin que se añade, yo evito en la medida de lo posible poner plugins. Los de Dev Express fuera. Al final yo me quedo con el Visual Assist y el Productivity Power Tools.

Para manejo de tablas los DataSets también me gustan bastante pero no sé si en otros lenguajes tienen algo similar.

Yo por eso sólo tengo resharper xDD Porque si ya de por si con los 8GB de ram cada vez que compilo aquello tiembla... no quiero pensar si meto algo más xD

josepzin
03/04/2014, 12:53
Ahora pregunto yo, por que has elegido C# y no VB? Le tengo un poco de mania a este ultimo porque me parece feo y tosco pero es sencillote.

En principio porque programo normalmente con PHP y veo que la sintaxis es muy similar, ademas BASIC me suena a lento, si, ya se que esto es un error pero es una percepción que me viene de la época de los 8/16 bits! :D

GameMaster
03/04/2014, 12:59
bueno visual basic poco tiene que ver con basic en la sintax xD

^MiSaTo^
03/04/2014, 12:59
En principio porque programo normalmente con PHP y veo que la sintaxis es muy similar, ademas BASIC me suena a lento, si, ya se que esto es un error pero es una percepción que me viene de la época de los 8/16 bits! :D

No te líes y programa en algo de verdad, como los hombres XDDDD

josepzin
03/04/2014, 13:00
De todas formas si se supone que son "un par de chorradas" a lo mejor te compensa otro lenguaje. Dinos un poco que quieres hacer y te intentamos aconsejar.

Quizás y seguramente sea más facil con otro lenguaje, pero he tirado por el lado de C por ser tan usado. En principio lo intento con este, si veo que se me complica tendré que buscar otras opciones.

Si veo que puedo llegar a algo ya comentaré lo que quiero hacer, no quiero que se me rian y me miren raro ;)

Jurk
03/04/2014, 13:08
es mejor que nos digas que es lo que quieres hacer y asi te enfoquemos a lo que necesites

josepzin
03/04/2014, 13:29
es mejor que nos digas que es lo que quieres hacer y asi te enfoquemos a lo que necesites

Mi número de identificación es #123123123 y pertenezco al ejercito de los Estados Unidos de Norteamérica ;)

Ya lo diré, por ahora voy tomando contacto con el lenguaje :)

-----Actualizado-----


No te líes y programa en algo de verdad, como los hombres XDDDD

Ciertisimo, programar en BASIC es de nenazas :D

^MiSaTo^
03/04/2014, 13:33
Ciertisimo, programar en BASIC es de nenazas :D

En BASIC no lo se, pero en VB en pleno 2014 si xD

Lo bueno del C# es que es muy muy parecido a Java así que vas a matar casi 2 pájaros de un tiro

josepzin
03/04/2014, 15:37
Estoy probando cosas, la verdad es que mola, creo que me lo quedo! :)

-----Actualizado-----

Aunque llevo años usando OOP nunca más allá de lo predefinido por CodeIgniter, asi que aprovecho a preguntar cosas también de eso.

Si en una aplicación quiero tener una serie de valores globales de configuración, me imagino que lo normal sería crear una clase "config" y dentro estarían definidas estas variables ¿es asi o cómo se haría?

GameMaster
03/04/2014, 15:47
Hay varias formas, lo mejor es tener algo tuyo como un ini o xml, pero las apps si es web viene con un fichero web config y si son de escritorio se llama config, y tb los puedes usar para guardar parametros con las clases app config

^MiSaTo^
03/04/2014, 16:05
Estoy probando cosas, la verdad es que mola, creo que me lo quedo! :)

-----Actualizado-----

Aunque llevo años usando OOP nunca más allá de lo predefinido por CodeIgniter, asi que aprovecho a preguntar cosas también de eso.

Si en una aplicación quiero tener una serie de valores globales de configuración, me imagino que lo normal sería crear una clase "config" y dentro estarían definidas estas variables ¿es asi o cómo se haría?

Como digo, no he hecho ninguna aplicación de escritorio pero no hay una clase UserPreferences o algo así? (para win phone la hay).

EDIT: Te he engañado el nombre de la clase es Settings al parecer XDD

http://stackoverflow.com/questions/744746/best-way-to-save-per-user-options-in-c-sharp
http://www.codeproject.com/Articles/15013/Windows-Forms-User-Settings-in-C

Y por lo que veo también puedes usar el ConfigurationManager: http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.aspx

aitorpc
03/04/2014, 18:41
En BASIC no lo se, pero en VB en pleno 2014 si xD

Lo bueno del C# es que es muy muy parecido a Java así que vas a matar casi 2 pájaros de un tiro

Yo pase una pequeña temporada de VB a C# y fue un descanso para la mente, que mania le tengo al VB!!

Ahora ando con Python que es amor, jaja, se me va a olvidar Java y C++.

josepzin
04/04/2014, 17:16
Como digo, no he hecho ninguna aplicación de escritorio pero no hay una clase UserPreferences o algo así? (para win phone la hay).

EDIT: Te he engañado el nombre de la clase es Settings al parecer XDD

http://stackoverflow.com/questions/744746/best-way-to-save-per-user-options-in-c-sharp
http://www.codeproject.com/Articles/15013/Windows-Forms-User-Settings-in-C

Y por lo que veo también puedes usar el ConfigurationManager: http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.aspx

Perfectisimo, es justo lo que necesitaba!!

Otra pregunta:

Quiero cargar imagenes desde disco, veo dos opciones:
- Crear un pictureBox y con .Load cargar la imagen, ¿pero tengo n imágenes asi que tengo que crear mas picturesbox por codigo o que?
- Crear bloques graficos por código, pero no me he enterado cómo funciona

Sigo probando cosas...

-----Actualizado-----

He probado algo tan simple como esto:


Bitmap myBitmap2 = new Bitmap(@"D:/imagen.png");
Graphics g2 = Graphics.FromImage(myBitmap2);
g2.DrawImage(myBitmap, 100, 201);

Pero no funciona, ¿quizás sólo funcione con BMPs? sigo probando.

GameMaster
04/04/2014, 17:22
Aún asi te recomiendo usar un fichero ini en lugar de estas clases de configuración, en codeproject tienes ejemplo de leer y escribir ini's, es muy sencillo.

Donde quieres cargar las imagenes ? los picturebox se usan mas bien para visualizarlas en el form, suele ser una imagen estatica por picturebox, no se si quieres cambiar la imagen en el mismo picturebox dinamicamente o tener un picturebox por imagen.

bloques gráficos ?

En code project lo tienes todo, es muy sencillo, tiene buscador muy eficiente, pone load image c# en el buscador y veras centenas de ejemplos, es más, antes de preguntar por aqui la verdad code project y su buscador te va ayudar mucho más que nosotros xD

-----Actualizado-----

el codigo que pones carga una imagen en memoria, si lo quieres en tu picture box lo tienes que asignar:

má sencillo y directamente asignando la imagen:

Mi_pictureBox.Image = Image.FromFile(txtPath.Text.Trim());

^MiSaTo^
04/04/2014, 17:26
Perfectisimo, es justo lo que necesitaba!!

Otra pregunta:

Quiero cargar imagenes desde disco, veo dos opciones:
- Crear un pictureBox y con .Load cargar la imagen, ¿pero tengo n imágenes asi que tengo que crear mas picturesbox por codigo o que?
- Crear bloques graficos por código, pero no me he enterado cómo funciona

Sigo probando cosas...

-----Actualizado-----

He probado algo tan simple como esto:


Bitmap myBitmap2 = new Bitmap(@"D:/imagen.png");
Graphics g2 = Graphics.FromImage(myBitmap2);
g2.DrawImage(myBitmap, 100, 201);

Pero no funciona, ¿quizás sólo funcione con BMPs? sigo probando.

Eso no te puedo ayudar porque no se qué clases hay para escritorio. En Windows Phone se usa ImageBox, mírate si te vale, pero como digo ahí ni idea.

GameMaster
04/04/2014, 17:27
abre cualquier formato, si despues quieres salvar la imagen de tu picture box al disco puedes hacer algo asi en el evento click de un botón (en este caso pinchando en la imagen del form):

private void Mi_pictureBox_Click(object sender, EventArgs e)
{
if (Mi_pictureBox.Image != null)
{
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Title = "Export Background Image as ...";
saveFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolde r.Personal);
saveFileDialog.Filter = "BMP Image (*.bmp)|*.bmp|JPEG Image (*.jpg)|*.jpg|PNG Image (*.png)|*.png";

if (saveFileDialog.ShowDialog(this) == DialogResult.OK)
{
if (saveFileDialog.FilterIndex == 1)
Mi_pictureBox.Image.Save(saveFileDialog.FileName, System.Drawing.Imaging.ImageFormat.Bmp);
else if (saveFileDialog.FilterIndex == 2)
Mi_pictureBox.Image.Save(saveFileDialog.FileName, System.Drawing.Imaging.ImageFormat.Jpeg);
else
Mi_pictureBox.Image.Save(saveFileDialog.FileName, System.Drawing.Imaging.ImageFormat.Png);

MessageBox.Show("Success");
}
}
}

^MiSaTo^
04/04/2014, 17:27
Aún asi te recomiendo usar un fichero ini en lugar de estas clases de configuración, en codeproject tienes ejemplo de leer y escribir ini's, es muy sencillo.


Y por qué usar un ini en vez de el ConfigurationManager o las clases de Settings?

GameMaster
04/04/2014, 17:35
esperaba la pregunta.

Todo lo que pueda ser mas independiente de las clases y dependencias de windows mejor, son cosas a tener en cuenta sobretodo al portar aplicaciones a otros SO, usando mono en linux por ejemplo, o futuros dispositivos.

ficheros de texto, con formato INI son ahora mismo más multiplataforma, que los ficheros de configuración de windows, aunque sean xml's, y mas sencillos la verdad....

Por otra parte y esto es mas importante el configuration manager suele ir incrustado en las dll's, si por ejemplo te falta el fichero junto al exe, este le los valores del ensamblado, caso contrario lo le del fichero, y en aplicaciones web multicapa, donde tienes varias dll's, (datos , negocio, presentación), sigue una orden al leer estos ficheros, vamos que te lias mas, asi que lo simple es siempre lo más sencillo

^MiSaTo^
04/04/2014, 17:46
esperaba la pregunta.

Todo lo que pueda ser mas independiente de las clases y dependencias de windows mejor, son cosas a tener en cuenta sobretodo al portar aplicaciones a otros SO, usando mono en linux por ejemplo, o futuros dispositivos.

Si lo vas a hacer multiplataforma entonces para qué haces algo con C#? Casi mejor hacerlo con un lenguaje multiplataforma como Java. Y mono no es comparable, porque ni siquiera está portado todo el framework al completo :)




ficheros de texto, con formato INI son ahora mismo más multiplataforma, que los ficheros de configuración de windows, aunque sean xml's, y mas sencillos la verdad....

Usar un ini cuando puedes serializar objetos por ejemplo o usar XML/JSON me parece una chapuza. Además que el formato "nativo" de configuraciones de C# es xml por lo que parsear un xml es trivial. Por no hablar de las ventajas a la hora de estructurar la información, que no las tienes con un "ini" que es totalmente secuencial.
Sobre lo que dices que un ini es más multiplataforma.. pues depende. Ya tienes que llevar cuidado de no guardar el fichero con los EOF de windows por ejemplo y vamos desde cuándo un XML no lo reconoce linux o mac? Porque es con lo que se trabaja normalmente XD




Por otra parte y esto es mas importante el configuration manager suele ir incrustado en las dll's, si por ejemplo te falta el fichero junto al exe, este le los valores del ensamblado, caso contrario lo le del fichero, y en aplicaciones web multicapa, donde tienes varias dll's, (datos , negocio, presentación), sigue una orden al leer estos ficheros, vamos que te lias mas, asi que lo simple es siempre lo más sencillo

Esto no termino de entenderlo bien. Lo que entiendo es que te parece más complicado y por eso prefieres tirar por los ini y ya está. Por supuesto que es mejor no complicar más las cosas pero tb es bueno hacer las cosas bien hechas. Podrías elaborar un poco más este punto? Como digo no he programado nada para escritorio de windows y no termino de entender qué tiene de malo usar unas clases que parece están para precisamente guardar/cargar settings.

GameMaster
04/04/2014, 17:54
me he explicado mal, pero es algo asi, cada dll puede tener su config y en proyectos grandes te puedes liar con tantos ficheros config, porque sigue una hierarquia de lectura y segun falten ficheros config va leyendo el siguiente en el arvol, es mas lioso aunque no signifique que sea malo usar estas clases.

Tambien puede usar un xml en lugar del ini, yo de hecho en algunas apps uso los 2 (el ini lo uso para parametros visuales mas rapiditos y el xml mas para la configuración inicial de base de datos), cada uno para un proposito distinto.
pero hay tantas formas que es lo bueno de c#, hay clases para todo para hacer lo mismo de mil formas.

^MiSaTo^
04/04/2014, 18:01
Vale ya te he entendido. Yo lo que quiero decir también es que aunque haya mil formas de hacerlo, es mejor hacerlo bien y usar lo más adecuado desde el principio :) Es bueno tener distintas capas y cada una con su configuración porque posiblemente las otras capas no deberían saber nada acerca de ello.

josepzin
04/04/2014, 20:41
Gracias a ambos :)

He mirado en Code Project (que milagrosamente tenía cuanta creada allí, saber cuando fue porque no me acuerdo de nada!) y efectivamente veo que allí hay muchos ejemplos de cómo mostrar imagenes y más.

De todos modos seguiré preguntando cosas por aquí :P

josepzin
05/04/2014, 06:06
Hay que ver lo flojo que estoy en OOP...

Creo que haré preguntas sobre eso :-P

^MiSaTo^
05/04/2014, 10:23
De eso creo que te puedo ayudar más que de C# :)

josepzin
06/04/2014, 04:41
Esto no sé si es algo especifico de Visual Express o generico...

Me he descargado unas librerias para poder leer un mando de XBOX (o creo que cualquiera), la libreria es SharpDX (http://code.google.com/p/sharpdx/), que son chorrocientos archivos... el caso es ¿cómo hago para usarlas?? tiene que haber alguna manera bastante simple pero no la encuentro.

-----Actualizado-----


De eso creo que te puedo ayudar más que de C# :)

Si alguien que conoce de OOP ve mi código creo que muere por autoimplosión :D :D

-----Actualizado-----

Me autorespondo :P

Me había descargado los fuentes, lo que tenía que descargar es un ejecutable con archivos DLL y cosas de esas.

^MiSaTo^
06/04/2014, 09:55
Esto no sé si es algo especifico de Visual Express o generico...

Me he descargado unas librerias para poder leer un mando de XBOX (o creo que cualquiera), la libreria es SharpDX (http://code.google.com/p/sharpdx/), que son chorrocientos archivos... el caso es ¿cómo hago para usarlas?? tiene que haber alguna manera bastante simple pero no la encuentro.

-----Actualizado-----



Si alguien que conoce de OOP ve mi código creo que muere por autoimplosión :D :D

-----Actualizado-----

Me autorespondo :P

Me había descargado los fuentes, lo que tenía que descargar es un ejecutable con archivos DLL y cosas de esas.

Y no podías usar XNA que es parte del framework? Lo digo porque ahí viene ya para leer mandos y más los de Xbox XDDDDDD
Mira, XNA tiene la clase GamePad (http://www.google.nl/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&ved=0CD4QFjAC&url=http%3A%2F%2Fmsdn.microsoft.com%2Fen-us%2Flibrary%2Fmicrosoft.xna.framework.input.gamep ad.aspx&ei=oghBU_fLGaXLywO9s4D4AQ&usg=AFQjCNEb68zU5BSRLgdRFE6Z4iMPjPjOHg&sig2=f1bGCxJ7L0W7m1cZy2nn2A&bvm=bv.64125504,d.bGQ) y no es sólo para mandos de xbox sino para cualquiera si no recuerdo mal :)

josepzin
06/04/2014, 17:27
Sobre XNA, ni idea :D
He caido en C# como podría haber sido casi cualquier otro, se supone que leer el mando es simple de hacer, ya seguiré probando cosas.

Una preguntontabasica:
Tengo una clase principal, donde he definido variables "globales", ¿cómo puedo acceder a esas variables desde otra clase?
He intentado referenciando con namespace, con el nombre de la clase, pero nada. Supongo que será alguna historia de herencias de objetos o algo...
Me imagino que la sola idea de "variables globales" atenta contra la OOP :P

^MiSaTo^
06/04/2014, 18:37
Sobre XNA, ni idea :D
He caido en C# como podría haber sido casi cualquier otro, se supone que leer el mando es simple de hacer, ya seguiré probando cosas.

Una preguntontabasica:
Tengo una clase principal, donde he definido variables "globales", ¿cómo puedo acceder a esas variables desde otra clase?
He intentado referenciando con namespace, con el nombre de la clase, pero nada. Supongo que será alguna historia de herencias de objetos o algo...
Me imagino que la sola idea de "variables globales" atenta contra la OOP :P

Sobre XNA, es parte del framework y es C# igual.

Sobre las variables globales... sí atenta contra la OOP un poco. Para eso tienes las properties y los getter/setter. Es decir, tú tienes tu variable privada y te puedes crear un get / set para poder acceder a su valor desde fuera. Un ejemplo a lo rápido:



private int _miVariable; // parte privada, sólo puedes accdeder a ello desde la propia clase

public int MiVariable { get; set; } // parte pública, puedes acceder a ello desde fuera con miObjeto.MiVariable.



Si no quieres poner la parte privada porque no quieras hacer algo con ella (depende del caso) puedes simplemente crear sólo lo público y C# implementará internamente el atributo (así se llaman las variables privadas en OOP).
También puedes poner que sólo haya un get si sólo quieres leer el valor desde fuera pero no dejar que se cambie. O implementar algo más en el método get o set de la propiedad (imagina que cuando se actualice el valor de la propiedad quieras también refrescar la información en pantalla, pues se haría ahí).

EDIT: se me ha ido la olla y he puesto mal el código (pensando en Obj-C que es con lo que estaba ahora). Si queires que estén las 2 variables linkadas debería ser así:




private int _miVariable; // parte privada, sólo puedes accdeder a ello desde la propia clase

public int MiVariable
{
get { return _miVariable; }
set {
if (value != _miVariable)
_miVariable = value;
}
} // parte pública, puedes acceder a ello desde fuera con miObjeto.MiVariable.

IronArthur
07/04/2014, 11:41
Si vas a meter XNA antes mirate http://www.monogame.net/ q a la larga saldra rentable. (es XNA multiplataforma y con mejoras)

Salu2

josepzin
07/04/2014, 13:54
Sobre las variables globales... sí atenta contra la OOP un poco. Para eso tienes las properties y los getter/setter. Es decir, tú tienes tu variable privada y te puedes crear un get / set para poder acceder a su valor desde fuera.

Muchas gracias, había visto esos get/set pero no sabía para qué servian! ya lo probaré.

^MiSaTo^
07/04/2014, 13:58
Muchas gracias, había visto esos get/set pero no sabía para qué servian! ya lo probaré.

Creo que deberías primero leer algo más sobre OOP antes de meterte más en faena :) Sobre todo si vienes de PHP que es más estructurado (vale que desde php5 tb hay clases y demás pero no se usa tantísimo el paradigma).
Lo digo porque get/set es algo muy básico de la OOP y deberías entender bien por qué se usan y demás.
Vamos, que no te siente mal, sólo como un consejo

josepzin
07/04/2014, 14:03
Si vas a meter XNA antes mirate http://www.monogame.net/ q a la larga saldra rentable. (es XNA multiplataforma y con mejoras)

Al final tendré que darle un vistazo al XNA ese :D

josepzin
07/04/2014, 15:11
Vamos, que no te siente mal, sólo como un consejo

No te preocupes que no me cae mal para nada, sé las limitaciones que tengo con OOP :) asi que por eso no me averguenza preguntar. Lo que pasa es que es un tema tan amplio y que prefiero ir haciendo cosas, zafando y preguntar cuando me bloqueo, sabiendo que estoy haciendo una chapuza seguramente, pero total es una tonterída mia, no es para un cliente ni nada :)

-----Actualizado-----

Igual, si veo que el tema me entusiasma y puedo continuarlo, me pondre a leer mas seriamente.

^MiSaTo^
07/04/2014, 15:13
Pues entonces pregunta lo que quieras que pa eso estamos :D

_-Caleb-_
07/04/2014, 16:21
Pues entonces pregunta lo que quieras que pa eso estamos :D

38322

xD Si no lo pongo reviento sorry xD

josepzin
07/04/2014, 16:56
xD Si no lo pongo reviento sorry xD

Cosas de frikis nerds ;) :P

josepzin
08/04/2014, 01:25
Pregunta sobre esto de acceder a los datos o funciones de otra clase.

Tengo una clase "Index" desde donde arranca la aplicacion.

Tengo otra clase "Otraclase" donde hago lecturas a disco y muestro esa información.

Entonces, si quiero usar los procedimientos de Otraclase desde Index, tengo que hacer esto:


Otraclase otra = new Otraclase();

Y si lo hago fuera de las declaraciones de procedimientos, la tengo accesible desde cualquier parte de Index, asi puedo hacer otra.mepica() desde cualquier lugar sin tener que volver a declararla.

¿Es correcto?

Ahora, si desde Otraclase quiero tener acceso a los procedimientos de Index me imagino que debería Otraclase debería heredar desde Index:


class Otraclase : Index

¿Sigue siendo correcto?

Entonces, me imagino que la herencia funciona de padre (Index) a hijos (Otraclase), pero si desde padre (Index) quiero usar algo del hijo (Otraclase) tengo que hacer la movida de otra = new Otraclasetc.

-----Actualizado-----

La parte de herencia parece está bien, pero lo otro me da un error de StackOverflow... algo estoy haciendo mal :P

Jurk
08/04/2014, 01:44
estamos hablando de c++?

una clase padre no puede acceder directamente a los procedimientos del hijo...

Pero puede tener un procedimiento con el mismo nombre en el hijo y en el padre. Que haga una cosa en el hijo y otra distinta en el padre. Se llaman funciones virtuales. Incluse podrias crear una clase abstracta, donde la clase padre existe pero no se pueden instanciar objetos de tipo padre porque tienen al menos una funcion que no esta definida. Pero podrias crear un punteroa una clase padre (con el que podrias apuntar a un padre o a un hijo).

Lo que a mi me mosquea es que cuando defines las funciones de la clase padre, no puedes usar la clase hijo porque todavia no esta definida...

josepzin
08/04/2014, 02:21
Madremia... con lo linda y simple que es la programación estructurada :D :D ;)

^MiSaTo^
08/04/2014, 09:13
Pregunta sobre esto de acceder a los datos o funciones de otra clase.

Tengo una clase "Index" desde donde arranca la aplicacion.

Tengo otra clase "Otraclase" donde hago lecturas a disco y muestro esa información.

Entonces, si quiero usar los procedimientos de Otraclase desde Index, tengo que hacer esto:


Otraclase otra = new Otraclase();

Y si lo hago fuera de las declaraciones de procedimientos, la tengo accesible desde cualquier parte de Index, asi puedo hacer otra.mepica() desde cualquier lugar sin tener que volver a declararla.

¿Es correcto?

Ahora, si desde Otraclase quiero tener acceso a los procedimientos de Index me imagino que debería Otraclase debería heredar desde Index:


class Otraclase : Index

¿Sigue siendo correcto?

Entonces, me imagino que la herencia funciona de padre (Index) a hijos (Otraclase), pero si desde padre (Index) quiero usar algo del hijo (Otraclase) tengo que hacer la movida de otra = new Otraclasetc.

-----Actualizado-----

La parte de herencia parece está bien, pero lo otro me da un error de StackOverflow... algo estoy haciendo mal :P

Desde el hijo se pueden acceder a las funciones del padre (por eso se llama herencia) pero no al revés. Pega código y te decimos donde peta



estamos hablando de c++?
Lee el título del hilo, estamos hablando de c# XDDD

Jurk
08/04/2014, 10:20
Pero lo que he dicho al final es cierto, una clase padre es definida antes que la clase hijo y por lo tanto no puede acceder a sus funciones miembro directamente. Si fuese c++, le habria dicho que crease una funcion virtual en el padre, que no hiciera nada, y que en el hijo tambien existiese una funcion igual. Asi, con un puntero de tipo "padre", se podria apuntar a un objeto de tipo hijo, pasarlo al padre (que lo que recibiria es un puntero al a un objeto padre) y llamar a la funcion del hijo sin problemas porque ya existe una funcion en el padre con el mismo nombre....

Pero creo que en C# no hay punteros, verdad? Se podria hacer con un paso por referencia?

^MiSaTo^
08/04/2014, 10:53
Pero lo que he dicho al final es cierto, una clase padre es definida antes que la clase hijo y por lo tanto no puede acceder a sus funciones miembro directamente. Si fuese c++, le habria dicho que crease una funcion virtual en el padre, que no hiciera nada, y que en el hijo tambien existiese una funcion igual. Asi, con un puntero de tipo "padre", se podria apuntar a un objeto de tipo hijo, pasarlo al padre (que lo que recibiria es un puntero al a un objeto padre) y llamar a la funcion del hijo sin problemas porque ya existe una funcion en el padre con el mismo nombre....

Pero creo que en C# no hay punteros, verdad? Se podria hacer con un paso por referencia?

Hay punteros pero tb hay garbage collector. Si lo que quieres es una función "común" también puedes hacer una interfaz y que la implementen. Depende de lo que quiera hacer claro

Jurk
08/04/2014, 11:26
¿hay punteros en C#?

pensaba que era como java, que no tiene punteros... solo referencias...

yo es que soy muy fans de los punteros.

como ves estoy un poco pez en c#...

^MiSaTo^
08/04/2014, 11:34
¿hay punteros en C#?

pensaba que era como java, que no tiene punteros... solo referencias...

yo es que soy muy fans de los punteros.

como ves estoy un poco pez en c#...

Sí, me he explicado mal. Hay como en java :) De la memoria se encarga el recolector de basura. Si C# salió de java, así que es muy muy parecido a él

josepzin
08/04/2014, 19:17
Hay punteros pero tb hay garbage collector. Si lo que quieres es una función "común" también puedes hacer una interfaz y que la implementen. Depende de lo que quiera hacer claro

Seguramente para lo que quería hacer no hacía falta crear otra clase, es lo que tiene no llevar muy bien esto de la OOP.

Una pequeña cuestion, que igual lo podría comprobar por mi mismo pero lo comento: ¿puede ser que al pasar usar una variable como parametro de una funcion, y luego en esa función altere el valor de esa variable, este cambio afecte también la variable original?? como si en la funcion no creara una variable sino que fuera un puntero a la variable original.

Nathrezim
08/04/2014, 19:30
Seguramente para lo que quería hacer no hacía falta crear otra clase, es lo que tiene no llevar muy bien esto de la OOP.

Una pequeña cuestion, que igual lo podría comprobar por mi mismo pero lo comento: ¿puede ser que al pasar usar una variable como parametro de una funcion, y luego en esa función altere el valor de esa variable, este cambio afecte también la variable original?? como si en la funcion no creara una variable sino que fuera un puntero a la variable original.

Si, se altera, pero el objeto original, con lo que si creas otro objeto y se lo asignas a la referencia dentro de la función y cambias este nuevo objeto, no verás los cambios una vez salgas de la función (ya que la referencia fuera de la funcion apunta al objeto original)

Jurk
08/04/2014, 21:56
Seguramente para lo que quería hacer no hacía falta crear otra clase, es lo que tiene no llevar muy bien esto de la OOP.

Una pequeña cuestion, que igual lo podría comprobar por mi mismo pero lo comento: ¿puede ser que al pasar usar una variable como parametro de una funcion, y luego en esa función altere el valor de esa variable, este cambio afecte también la variable original?? como si en la funcion no creara una variable sino que fuera un puntero a la variable original.

depende de si la pasas por valor o por referencia. por valor el original se mantiene, por referencia no

-----Actualizado-----


depende de si la pasas por valor o por referencia. por valor el original se mantiene, por referencia no

en c# no hay punteros como tal...

si eso hay referencias, que no son punteros per se, prro meh, cubren una buena parte de su funcionalidad.

GameMaster
08/04/2014, 22:12
Podeis usar funciones de dll's de C++, que internamente los usen xD

Jurk
08/04/2014, 22:32
y algunas instrucciones del los procesadores x86/x64 tambien juegan con punteros y no metemos la zarpa para liarla, gamehamster... aqui el colega josepzin esta programando en c#, y si quiere usar alguna dll, pues bien, pero no es el caso

GameMaster
08/04/2014, 22:35
jajaja, estan hablando de las posibilidades del lenguaje, logicamente una cosa es la sintaxe otras son sus features, si microsoft quiere le pone punteros acesibles al usuario o lo que les de la gana

^MiSaTo^
08/04/2014, 22:58
depende de si la pasas por valor o por referencia. por valor el original se mantiene, por referencia no

-----Actualizado-----



en c# no hay punteros como tal...

si eso hay referencias, que no son punteros per se, prro meh, cubren una buena parte de su funcionalidad.

En C# sí hay punteros como tal (http://msdn.microsoft.com/en-us/library/y31yhkeb%28VS.80%29.aspx), pero no es aconsejable usarlos directamente aparte que es tontería teniendo en cuenta que una de las ventajas de usar C# (o Java por ejemplo) es la gestión de memoria.
C++ y C# no son iguales tampoco.
Os dejo más información sobre el tema:
- ¿Hay punteros en C# y en ese caso, es seguro usarlos? (http://stackoverflow.com/questions/2333574/is-there-pointer-in-c-sharp-like-c-is-it-safe)
- ¿Cuál es la diferencia entre una referencia en C# y un puntero en C++? (http://stackoverflow.com/questions/57483/what-are-the-differences-between-pointer-variable-and-reference-variable-in-c?rq=1)
- ¿C# ref es como un puntero en C/C++ o como una referencia en C++? (http://stackoverflow.com/questions/16207455/c-sharp-ref-is-it-like-a-pointer-in-c-c-or-a-reference-in-c) <- Este tiene una explicación muy buena sobre los punteros en C#

Si os interesa más sobre el tema buscad más en Stackoverflow, ycombinator y demases

-----Actualizado-----


Podeis usar funciones de dll's de C++, que internamente los usen xD

Qué tontería ni que C# no usara internamente punteros. La diferencia principal es que la gestión de memoria en principio no es manual, sino que para eso tienes el garbage collector. Aun así también puedes invocarlo tú si lo necesitas por lo que sería como un malloc/free (más o menos)

Jurk
09/04/2014, 00:03
En C# sí hay punteros como tal (http://msdn.microsoft.com/en-us/library/y31yhkeb%28VS.80%29.aspx), pero no es aconsejable usarlos directamente aparte que es tontería teniendo en cuenta que una de las ventajas de usar C# (o Java por ejemplo) es la gestión de memoria.
C++ y C# no son iguales tampoco.
Os dejo más información sobre el tema:
- ¿Hay punteros en C# y en ese caso, es seguro usarlos? (http://stackoverflow.com/questions/2333574/is-there-pointer-in-c-sharp-like-c-is-it-safe)
- ¿Cuál es la diferencia entre una referencia en C# y un puntero en C++? (http://stackoverflow.com/questions/57483/what-are-the-differences-between-pointer-variable-and-reference-variable-in-c?rq=1)
- ¿C# ref es como un puntero en C/C++ o como una referencia en C++? (http://stackoverflow.com/questions/16207455/c-sharp-ref-is-it-like-a-pointer-in-c-c-or-a-reference-in-c) <- Este tiene una explicación muy buena sobre los punteros en C#

Si os interesa más sobre el tema buscad más en Stackoverflow, ycombinator y demases

-----Actualizado-----



Qué tontería ni que C# no usara internamente punteros. La diferencia principal es que la gestión de memoria en principio no es manual, sino que para eso tienes el garbage collector. Aun así también puedes invocarlo tú si lo necesitas por lo que sería como un malloc/free (más o menos)

Gracias por la info, misato, de veras... estaba confundido porque daba de hecho que los ref en c# funcionaban como & en c++ ... Y en los objetos no es asi...
Ha sido realmente Mind-Blowing ver como lo que leia como un paso por valor era en realidad una referencia de c++, y lo que leia como un paso por referencia era un doble puntero. Ahora bien, ¿entonces no se puede pasar por objetos por valor en C#?

josepzin
09/04/2014, 08:04
A ver, otra tontería que en PHP es coser y cantar y aquí me estoy volviendo tonto...

Tengo un array: int[] lista;

Donde puedo poner un valor en [3] pero nada en [1] y [2]

Así que necesito saber si 3 tiene algo antes de leerlo, el caso es que no encuentro una manera de conocer si 3 tiene algo o no, cuando leo 3 y está vacío me salta por error.

Lo que se me ocurre es iniciar el array con -1 en todas las casillas, así cuando lo leo por primera vez sabré que está vacío, pero me jode tener que haber eso!

GameMaster
09/04/2014, 09:16
if(lista[3] != null)
{
}

^MiSaTo^
09/04/2014, 09:29
Gracias por la info, misato, de veras... estaba confundido porque daba de hecho que los ref en c# funcionaban como & en c++ ... Y en los objetos no es asi...
Ha sido realmente Mind-Blowing ver como lo que leia como un paso por valor era en realidad una referencia de c++, y lo que leia como un paso por referencia era un doble puntero. Ahora bien, ¿entonces no se puede pasar por objetos por valor en C#?

Se "puede" y lo pongo entre comillas porque es otro "concepto". Hay clases mutables e inmutables, por ejemplo string es una clase inmutable, eso quiere decir que aunque la pases como parámetro el valor no va a cambiar. Si lo que quieres es que cambie, tienes StringBuilder que es mutable.
Básicamente las primitivas, structs y enums son inmutables, la mayoría de clases son mutables excepto algunas como string.


A ver, otra tontería que en PHP es coser y cantar y aquí me estoy volviendo tonto...

Tengo un array: int[] lista;

Donde puedo poner un valor en [3] pero nada en [1] y [2]

Así que necesito saber si 3 tiene algo antes de leerlo, el caso es que no encuentro una manera de conocer si 3 tiene algo o no, cuando leo 3 y está vacío me salta por error.

Lo que se me ocurre es iniciar el array con -1 en todas las casillas, así cuando lo leo por primera vez sabré que está vacío, pero me jode tener que haber eso!

Cómo lo estás inicializando y asignando valores? Porque si lo declaras como int[] lista, es un array con 0 elementos porque no está inicializado. Por tanto no puedes hacer lista[3] = 5;.
Si no sabes el tamaño que va a tener el array, lo mejor que puedes hacer es usar la clase List.

GameMaster
09/04/2014, 09:41
abandono el hilo xD

-----Actualizado-----

int TamLista;

if (lista != null)
TamLista = lista.Lenght;

esto te dice el tamaño, no tienes que usar ninguna clase List en lugar de esto, depende de lo que quieras hacer, pero logicamente no vas a cambiar por cambiar, o porque tengas una pequeña duda u otra

^MiSaTo^
09/04/2014, 09:50
abandono el hilo xD

-----Actualizado-----

int TamLista;

if (lista != null)
TamLista = lista.Lenght;

esto te dice el tamaño, no tienes que usar ninguna clase List en lugar de esto, depende de lo que quieras hacer, pero logicamente no vas a cambiar por cambiar, o porque tengas una pequeña duda u otra
Si lo que quiere es saber el tamaño de la lista, con hacer un lista.Length != 0 ya ve si está vacía o no ;)
Aún así, si la lista no está inicializada e intenta acceder al valor de un elemento obviamente va a tirar una excepción

GameMaster
09/04/2014, 09:53
logicamente, para eso existe la buena practica de programación de comprobar nulos antes de comprobar cualquier condición, eso es universal en cualquier lenguaje

^MiSaTo^
09/04/2014, 10:02
logicamente, para eso existe la buena practica de programación de comprobar nulos antes de comprobar cualquier condición, eso es universal en cualquier lenguaje

Pues claro, a lo que me refería es que no tienes por qué crear una variable extra y que aunque compruebes nulos y demás su problema posiblemente sea que no está inicializada la lista y por eso le tira una excepción

josepzin
09/04/2014, 14:16
Muchias grasias hamigos, ya lo pude solucionar.

El problema efectivamente es que no estaba inicializado el array, es lo que tiene estar acostumbrado a un lenguaje que casi ni hace falta declarar las variables!!! :D

Basicamente lo inicio asi: int[] mivar = new int[0];
Luego cuando puedo saber qué tamaño tendrá hago esto: Array.Resize(ref mivar, cantidadelementos);

Y así funciona ferpectamente :)

-----Actualizado-----


logicamente, para eso existe la buena practica de programación de comprobar nulos antes de comprobar cualquier condición, eso es universal en cualquier lenguaje

Es lo primero que probé: if (mivar[1] == null) pero me tira este mensaje: "El resultado de la expresión siempre es false, dado que un valor de tipo int nunca es igual a null de tipo int".

GameMaster
09/04/2014, 14:28
Upps, si perdón, el caso que puse es para array de strings, y claro ya estaba inicializado, que sino salta el error que dices.

string[] valores = new string[5];
if (valores[4] == null)
MessageBox.Show("Nulo");

josepzin
09/04/2014, 14:54
Es que eso de decirle al array el tamaño que va a tener hacía eones que no lo hacía, uno se acostumbra fácil a "la buena vida" ;)

Nathrezim
09/04/2014, 14:58
Es que eso de decirle al array el tamaño que va a tener hacía eones que no lo hacía, uno se acostumbra fácil a "la buena vida" ;)

Usa listas men, los arrays son arcaicos y siguen peor el paradigma orientado a objetos.

GameMaster
09/04/2014, 15:00
Si usas arraylist no necesitas hacer eso, ya que con add vas insertando valores

josepzin
09/04/2014, 15:10
He visto que hay Array, Arraylist y List, tiré por el array ya que parecía lo más simple pero miraré esas otras.

^MiSaTo^
09/04/2014, 16:16
Efectivamente si no va a tener un tamaño definido lo mejor que puedes hacer es usar la clase List (como he dicho antes, porque me olía que era parte de tu problema xD).
List<int> lista = new List<int>(); y a correr

josepzin
09/04/2014, 21:09
Averr... he probado con una List y tengo el mismo problema, al intentar saber si un valor existe (milista[n] != null) me da error. Me imagino que hay que usar alguna de las formas Find o Exists pero piden unos parametros que no me entero muy bien de que van... creo que por ahora me quedo con el simplito y obsoleto array ! :P

^MiSaTo^
09/04/2014, 21:17
Por qué no nos dices exactamente qué quieres hacer? ;)

GameMaster
09/04/2014, 21:40
pero si con length ya sabras hasta donde existe, son secuenciales, creo que estas haciendo la lógica a la inversa, deberias tener un for donde sólo mires en la dimensión del array.

Como dice Misato, si pones codigo aserá mas fácil entender lo que pretendes

josepzin
14/04/2014, 10:54
Al final me he empapado de las List y dejé de lado los Arrays.
Tuve que rehacer algunas cosas, pero al final mola poder hacer Find y cosas así.

Un poco más y ya tendré funcional la Chorrada beta versión 0.1 y os muestro que tal quedó.

Como siempre que hago estas cosas para mi, quizás le puedan servir a alguien más con ideas tan retorcidas como yo :-P

Jurk
14/04/2014, 11:47
Yo para empaparme del GUI de Matlab me hice una pokedex... la putad es que si no teneis matlab no lo podeis ver en marcha

josepzin
15/04/2014, 15:22
Yo para empaparme del GUI de Matlab me hice una pokedex... la putad es que si no teneis matlab no lo podeis ver en marcha

Te leo pero no te entiendo nada :P ;)

Es que no tengo idea que es Matlab ni pokedex!

josepzin
16/04/2014, 20:13
Tengo una cuadrícula de imágenes que al picar con el ratón hacen algo, en principio y como estaba verde las hice pintando directamente, ahora veo que quizás podrían ser buttons o picturebox, aunque tienen que generarse de forma dinámica ya que la cantidad no es siempre la misma. Y también me pregunto si usar esos elementos de formulario no hacen que todo vaya muy lento, ¿que pensáis?

GameMaster
16/04/2014, 20:43
Picture box te sirve, depende si son solo imagenes o botones con bordes imagen y texto, no tiene porque ir lento, si necesitas n imagenes en pantalla, las tendras que pintar si o si xD. Mira mi hilo de game center, donde tengo un carrusell de imagenes a lo mejor estas haciendo algo similar

^MiSaTo^
16/04/2014, 21:17
Tengo una cuadrícula de imágenes que al picar con el ratón hacen algo, en principio y como estaba verde las hice pintando directamente, ahora veo que quizás podrían ser buttons o picturebox, aunque tienen que generarse de forma dinámica ya que la cantidad no es siempre la misma. Y también me pregunto si usar esos elementos de formulario no hacen que todo vaya muy lento, ¿que pensáis?

Es una pena porque si fuera windows phone si te podría decir la mejor manera de gestionar esa memoria (por ejemplo con un LongListSelector) pero no conozco los controles de Windows y veo que ese en concreto sólo es de WP

josepzin
20/04/2014, 17:13
Bueno, creo que ya es hora de que diga lo que estoy haciendo :D

Lo mio es un Menú bonito, vamos, un programa que desde el primer momento sufre... ¡¡¡La Maldición del Menú Bonito (http://tcyr.wordpress.com/2007/05/14/la-maldicion-del-menu-bonito/)!!!!! (lo de bonito igual es percepción mia... habrá que ver :P)




Picture box te sirve, depende si son solo imagenes o botones con bordes imagen y texto, no tiene porque ir lento, si necesitas n imagenes en pantalla, las tendras que pintar si o si xD. Mira mi hilo de game center, donde tengo un carrusell de imagenes a lo mejor estas haciendo algo similar

El caso es que me acordaba que alguien del foro estaba haciendo un frontend pero no que eras tú, asi que pude encontrar el hilo y volver a mirar lo que llevas hecho y eso del carrusel.

El tema es el siguiente, hace bastante que quiero poner algun tipo de frontend de estos, lo he mirado por encima (Hiperspin, Gamex, Gamebase) y creo que ninguno es lo que busco, la mayoría estan centrados en tener chorrocientos juegos, con monton de información sobre cada juego, las versiones, empresas, publisher, años, distintas capturas, videos, etc. No sólo que todo eso ocupa una barbaridad de disco sino que además las veces que he intentado poner en marcha alguno de esos siempre me he liado y al final es mas simple navegar por las carpetas y lanzar el emulador directamente.

Y hay algunas cosas importantes más:
- No me interesa tener miles de juegos de cada sistema, prefiero tener una carpeta con unos pocos que son los que me gustan y eventualmente ir agregando alguno que conozca o quiera probar.
- Quiero un "menú bonito", en su momento vi el Chameleon de Raspberri Pi y me pareció bastante simpatico, luego está el Steam en modo pantalla completo que también está bastante bien, ¡yo quiero eso!.
- Quiero seguir usando los emuladores que uso normalmente.
- Que sea portable, no quiero tener que andar con instaladores

Así que me puse a ver qué podía conseguir, basicamente un acceso bonito/minimalista a los sistemas.
Luego, de ser posible, una cuadricula con los juegos y que al picarlo se dispare el emulador correspondiente.
Que sea algo ligero, simple de usar y sin historias de instalaciones.


https://www.youtube.com/watch?v=V3owTKu2lJo

http://jasonkelk.me.uk/wp-content/gallery/random/chameleon_pi_vga.jpg

http://2.bp.blogspot.com/-3Ypu-6hXDPk/Um78_394dRI/AAAAAAAABf0/Hu45GoaIKt4/s1600/Raspberry+Pi+Chameleon.jpg

http://www.stefanopaganini.com/wp-content/uploads/atari-800-chameleon.png


https://www.youtube.com/watch?v=uVYbwin_2FQ
Bueno, esto ya sería pedir demasiado pero quien sabe... :P

Y al final creo que he conseguido más de lo que pensaba, aunque de forma muy chapucera y muy mejorable!!
Me queda por solucionar tantos problemas y detalles, pero voy de a poco, que esto no es para ningun cliente :P.

A todo esto, creo que lo que hice es lo que hacen todos los demás frontends ¡y seguramente lo hacen muchisimo mejor!!! pero al final estaría en las mismas... ¡yo quiero un menú bonito! :D

Van algunas capturas, la ver si hago un video para que se vea en marcha.

Lo bauticé como "Subepzin", que es un ingeniosisimo juego de palabras entre Hiperspin y Josepzin :-P ;)

GameMaster
20/04/2014, 17:25
O sea me has estado plagiando encima con nuestra ayuda xD el mio va tener todo eso que buscas, la idea es que rule en maquinas flojas, y von parametros poner o no imagenes, videos, sonidos, etc. Lo de poner solo tus juegos pues es visualizar solo los disponibles, despues de hacer un scan, no tiene mas.

josepzin
20/04/2014, 19:59
O sea me has estado plagiando encima con nuestra ayuda xD
Jjajajaja!! traicionado vilmente con tu propio código!! :D



el mio va tener todo eso que buscas, la idea es que rule en maquinas flojas, y von parametros poner o no imagenes, videos, sonidos, etc. Lo de poner solo tus juegos pues es visualizar solo los disponibles, despues de hacer un scan, no tiene mas.
Cierto, y seguramente hace mucho más que este lanzador que estoy haciendo!

¿Cómo has hecho con las capturas de pantallas/portadas de los juegos?
Al principio me lie bastante por el tema de los nombres, porque hay juegos que he descargado que tienen informacion extra en el nombre del fichero, por ejemplo: (1985), (atari), [!], [b], Disco 1, Side A, etc, etc. lo cual es un coñazo ya que el nombre del juego tiene que ser igual al de la captura. Al final usé unas expresiones regulares que quitan todo eso y dejan el nombre "basico" y me facilito mucho la vida.

GameMaster
20/04/2014, 21:16
Muy facil uso las base de datos de hyperspin y game ex, las fotos ya vienen con el nombre correcto en las distros de internet, solo cambia la wxtension, despues busco distintas extensiones por orden y si existen laa pinto en pantalla

josepzin
25/04/2014, 18:46
No sé si se puede hacer esto en C#...

¿Es posible crear un archivo con funciones genericas que luego puedan ser usadas desde cualquier clase?

En CodeIgniter están los "helpers" que sirven para eso.

Jurk
25/04/2014, 19:23
mmm... es que es c#, en c seguro que si

josepzin
25/04/2014, 19:26
¿Cómo es en C? Quizás pueda mirar sabiendo cómo se llama o se hace.

Jurk
25/04/2014, 19:34
funciones
haz un fichero con funciones
pones los encabezados(el nombre de la funcion, declaracion) en el .h y el cuerpo (lo que hace) en un cpp...
incluyes el h donde quieras y punto

^MiSaTo^
25/04/2014, 20:06
A ver C# es orientado a objetos, no hay .h y .c o .cpp, vamos no hay cabeceras por un lado y el archivo del "código" por otro.

Con respecto a la duda, no se qué son los "helpers" de codeigniter porque no lo he tocado nunca, pero depende de lo que quieras hacer tienes varias posibilidades en OOP:
- Puedes hacerte una clase con funciones estáticas
- Puedes hacer una interfaz e implementarla en las clases que vaya a usar esas funciones de la manera que quieras (y esto te da más flexibilidad pero no se si es lo que quieres).
- Puedes hacerte una clase normal y corriente e implementarla como un singleton (esto es, sólo habrá un objeto de esa clase para todo el programa, da igual las clases que accedan a él).

Eso es lo que se me ocurre sin saber exactamente qué quieres hacer con lo de "funciones genéricas".

josepzin
25/04/2014, 21:06
Por ejemplo unas funciones que imprimen un grafico o un texto, son genericas y seran usadas en distintas clases.

-----Actualizado-----

Creo que lo de funciones estáticas me sirve, voy a probar a ver.

-----Actualizado-----

Ferpecto! las funciones estáticas es lo que necesitaba :)

Esto de largarse a hacer cosas sin saber lo básico... :P

^MiSaTo^
26/04/2014, 10:24
Leyendo reddit he encontrado un artículo que quizá te ayude a entender cómo funciona C# josepzin
Lo he leído y está muy bien explicado, es largo pero te recomiendo que te lo leas entero: http://www.toptal.com/c-sharp/top-10-mistakes-that-c-sharp-programmers-make

josepzin
26/04/2014, 11:05
Muchas gracias! Lo he mirado rápidamente, algunos los he entendido y otros se me escapan.

Me guardo el enlace.

Algo que me pasó con los List, ¿puede ser que cuando tienen muchos registros hagan tonterías? Por ejemplo al hacer un Find, si hay pocos elementos funciona bien pero si hay muchos no.

^MiSaTo^
26/04/2014, 11:34
Pues no deberían hacer tonterías, así que creo que ahí tienes algo más raruno :)

josepzin
26/04/2014, 11:43
Entonces voy a separar esa parte para hacer pruebas en un proyecto nuevo.

La primera vez era con una lista de 30 mil elementos, al hacer Find se ponía inestable o rara la aplicación.
Ahora veo que en una lista de 1000 o 2000 me devuelve vacío, cuando en listas de 100 o 500 va perfectamente.
Ya lo miraré mejor.

^MiSaTo^
26/04/2014, 12:51
Entonces voy a separar esa parte para hacer pruebas en un proyecto nuevo.

La primera vez era con una lista de 30 mil elementos, al hacer Find se ponía inestable o rara la aplicación.
Ahora veo que en una lista de 1000 o 2000 me devuelve vacío, cuando en listas de 100 o 500 va perfectamente.
Ya lo miraré mejor.

Una de las aplicaciones que he hecho es la de un banco. Imagínate la lista de movimientos de un cliente la de elementos que tiene ;) y nunca hemos tenido problemas al buscar algo en ella

josepzin
26/04/2014, 15:43
Lo de los 30mil registros no sé porque al final lo hice de otra manera, ya haré alguna otra prueba, pero lo otro ya encontré el problema y era que alguna historia de las mayusculas, al Find le agregué StringComparison.OrdinalIgnoreCase y ya funciona :)

^MiSaTo^
26/04/2014, 15:52
Lo de los 30mil registros no sé porque al final lo hice de otra manera, ya haré alguna otra prueba, pero lo otro ya encontré el problema y era que alguna historia de las mayusculas, al Find le agregué StringComparison.OrdinalIgnoreCase y ya funciona :)

Ves ? XD

josepzin
03/05/2014, 21:09
Ya he instalado XNA, a ver que tal.

josepzin
03/05/2014, 22:15
Sí que es fácil leer el mando desde XNA!!

A ver si hay algo parecido a los componentes de formulario de Visual C#.

josepzin
04/05/2014, 02:05
Está interesante el XNA este, a ver que sale!

josepzin
04/05/2014, 14:35
Ser o no ser... en XNA no parece ser simple lo de poner botones y formularios. Sigo trasteando.

^MiSaTo^
04/05/2014, 14:55
Ser o no ser... en XNA no parece ser simple lo de poner botones y formularios. Sigo trasteando.

Es que XNA es un framework para juegos :) Pero que yo sepa puedes usar librerías de XNA junto con las "normales" de C#.

josepzin
04/05/2014, 15:00
Si, entiendo ferpectamente que está orientado a otra cosa, de hecho me gusta lo poco que vi.

He intentando poner al principio "using System.Windows.Form" y algunas otras pero me dice que no las encuentra/reconoce...

^MiSaTo^
04/05/2014, 15:02
Si, entiendo ferpectamente que está orientado a otra cosa, de hecho me gusta lo poco que vi.

He intentando poner al principio "using System.Windows.Form" y algunas otras pero me dice que no las encuentra/reconoce...

Pero tendrás que añadir tb el framework al proyecto, para luego poder usarlo :)

Edit: de hecho lo suyo es que crees el proyecto normal de Visual C#, y después añadas las DLL de XNA en "References" (si estás usando Visual Studio, sino mira en tu IDE como añadir librerías). Creo que eso es menos jaleo que crear un proyecto de XNA y añadir lo otro, dado que entiendo que de XNA sólo vas a usar la parte de input y poco más (vamos, que no vas a hacer un juego completo, sino usar una pequeña parte de XNA).

josepzin
04/05/2014, 15:05
Tampoco puedo usar el using System.Data;

^MiSaTo^
04/05/2014, 15:07
Tampoco puedo usar el using System.Data;

Leete mi EDIT, eso es porque no tienes referenciadas todas las librerías. Seguramente estés usando sólo XNA ;)

josepzin
04/05/2014, 15:30
Si, es como dices, he comenzado un proyecto como XNA. Probaré como dices!

-----Actualizado-----

Coñio... ya puedo leer el mando!! :O

Fue mucho mas simple de lo que me imaginaba!! tuve que usar alias en los using de Xna porque se creaban ambiguedades, pero funciona!! :) :)

Graciass

GameMaster
04/05/2014, 23:11
tienes directx tanbien para eso (yo lo estoy usando en el mio)

josepzin
05/05/2014, 16:21
Creo que mis primeros intentos fueron con Directx pero por alguna razón no funcionaba, seguramente me faltaba referenciar algo o a alguien :D

GameMaster
05/05/2014, 16:32
seguramente no tenias la version correcta instalada, lo mismo me paso a mi, lo meti en el curro y en casa no reconocia las funciones xD