Tengo 1 cuadro de imagen, denominado studPic. Lo que quiero llegar es que, cuando hago clic en «shuffle» botón para obtener la imagen al azar de los recursos.

private void button2_Click(object sender, EventArgs e)
        {
...     
        }

Después de la investigación que he encontrado el siguiente

http://social.msdn.microsoft.com/Forums/en-US/Vsexpressvcs/thread/38d36fa4-1f5f-43e9-80f6-3c9a4edc7705/

Soy novato en C#.. ¿hay manera más fácil de lograr este resultado? Por ejemplo, sin la adición de nombres de imágenes?

ACTUALIZACIÓN

List<string> pictureNames = new List<string>();
pictureNames.Add("1");
pictureNames.Add("2");
pictureNames.Add("3");
int randomPictureIndex = new Random().Next(0, pictureNames.Count);
string randomPictureName = pictureNames[randomPictureIndex];
pictureNames.Remove(randomPictureName);
Image img = Properties.Resources.randomPictureName; //erroor
studPic.Image = img;

llegar el mensaje de error
Error 1 ‘Propiedades.Recursos’ no contiene una definición para ‘randomPictureName’

  • ¿Cuál es su recurso??
  • De la aplicación de los recursos
  • actualizado. por favor, eche un vistazo
  • Que busca un recurso llamado randompicturename, no la que está almacenada en la variable randompicturename. Eche un vistazo a la clase ResourceManager. Con un poco de twidding utilizaría MyResourceManager.GetObject(randompicturename)
InformationsquelleAutor heron | 2012-07-03

3 Comentarios

  1. 3

    Yo no uso los Recursos del Sistema para esto. No es tan fácil de mantener como sistema de archivos para desconectada de software.

    Tener tus imágenes en una carpeta para su aplicación. De esta manera se puede ser actualizado/modificado fácilmente.
    Decir :

    C:\Ninjas - app
    c:\Ninjas\images - images

    Crear una matriz que contiene estas imágenes.

    string[] files = System.IO.Directory.GetFiles("c:\ninjas\images");

    Que necesitas para poner algunos filtros en el GetFiles para garantizar imágenes.

    Ahora toma una posición aleatoria de la matriz (que ya han demostrado que saben hacer números aleatorios).

    Tenemos la matriz, vamos a barajar y, a continuación, usted puede ir a través de ellos de forma secuencial (mucho más rápido que escoger al azar en. La CPU se lo agradecerá)

        private string[] files;
        private int currentIndex = 0;
    
        private void initializeImages()
        {
            //Grab directories in your images directory
            string appRoot = System.IO.Path.GetDirectoryName(Application.ExecutablePath);
            files = System.IO.Directory.GetFiles(appRoot + @"\images");
            Random rnd = new Random();
            files = files.OrderBy(x => rnd.Next()).ToArray();
        }
    
    
        private void setImage()
        {
            pictureBox1.ImageLocation = files[currentIndex];
        }
    
        private void previousImage()
        {
            currentIndex = currentIndex > 0 ? currentIndex - 1 : 0;
            setImage();
        }
    
        private void nextImage()
        {
            currentIndex = currentIndex < files.Length - 1 ? currentIndex + 1 : files.Length - 1;
            setImage();
        }

    Un par de cosas:

    • No duro código de la ruta de acceso del archivo. Tener esto en su aplicación.archivo de configuración, y haga referencia a él.
    • Usted puede poner el archivo de la matriz global, por lo que no necesita estar corriendo cada vez.

    Si quieres tener esta como una presentación de diapositivas que se ejecuta hasta que el usuario cancele me gustaría recomendar el siguiente:

    • El uso de un objeto timer que llama a un método para aumentar el recuento de imagen, que los cambios de la imagen.
    • No utilice un hilo.dormir en el GUI como se va a hacer una pausa en su GUI – no es una buena cosa.

    Si quieres añadir botones Anterior/Siguiente, deberá tener un índice global (es decir currentIndex) que puede ser aumentado/disminuido, a continuación, llamar a código para establecer la imagen

  2. 1

    Algunos de instalación está involucrado en su parte, pero los detractores son en su mayoría de derecha. Esto no es una solución muy válida para una aplicación de producción. Dicho esto, dudo que esto es algo que usted puede distribuir a un montón de gente, así que vamos a llamar a esto un ejercicio académico. Si se va a agregar, simplemente, un recurso para su aplicación y el nombre «ImageResource» (cualquier nombre va a hacer), y añadir sus imágenes, a continuación, puede utilizar el código siguiente (suponiendo que los correspondientes elementos de interfaz de usuario existen).

    Primero, vamos a crear una función para extraer los mapas de bits de su recurso.

    private Bitmap[] GetResourceImages()
    {
        PropertyInfo[] props = typeof(ImageResource).GetProperties(BindingFlags.NonPublic | BindingFlags.Static);
        var images = props.Where(prop => prop.PropertyType == typeof(Bitmap)).Select(prop => prop.GetValue(null, null) as Bitmap).ToArray();
    
        return images;
    }

    Segundo, tenemos que crear una función que se aleatoriza una imagen basada en las imágenes disponibles:

    private void RandomizePicture()
    {
        Bitmap[] images = GetResourceImages();
        if (images == null || images.Length == 0)
        {
            //Nothing to do here...
            return;
        }
    
        int maxValue = images.Length;
        Random r = new Random();
        int idx = r.Next(maxValue);
        this.uxStupidPic.Image = images[idx];
    }

    Finalmente, llame a esa función en un botón, haga clic en:

    private void btnRandmoize_Click(object sender, EventArgs e)
    {
        this.RandomizePicture();
    }

    Y voila, aleatorizado de imágenes de archivos de recursos. Feliz codificación!

    EDIT: Acabo de notar que dijo que el uso de un recurso de la Aplicación en lugar de un azar del archivo de recursos. Basta con sustituir «ImageResource» con «Propiedades.Los recursos», en GetResourceImages, y usted va a estar en el negocio.

  3. 0

    Me gusta Ryan Ternier la respuesta muy simple y elegante, iba a publicar una solución similar a la suya.

    Sólo quiero comentar sobre las razones por las que la línea no/no trabajo:

    Imagen img = Propiedades.Recursos.randomPictureName;

    1. Es debido a las Propiedades de los Recursos está buscando un recurso llamado «randomPictureName» en lugar de la de su propio nombre.
    2. La forma en que las Propiedades.Los recursos objeto de las obras es que se ve de todos sus recursos en la solución de propiedades en tiempo de ejecución, después de la compilación del código. No funcionan de la manera que usted desea, ya que estamos tratando de pasar en una variable estática que puede incluso no existir en recursos, lo que obligó a envolver su método de alrededor de un try/catch declaración en caso de.

    http://msdn.microsoft.com/en-us/library/7k989cfy(v=vs 80).aspx

Dejar respuesta

Please enter your comment!
Please enter your name here