none
excepcion en menu Open Visual C++ RRS feed

  • Pregunta

  • Hola a todos.
    Tengo un richTextBox, y quiero cargar en él el contenido de un fichero de texto.
    Uso el componente openFileDialog, para tal efecto.
    El proceso de abrir el fichero y cargar su contenido en mi richTextBox lo hago sin problemas. El error se presenta, cuando pulso el boton de cancelar la operacion, que aparece en el menu openFileDialog, ya que al pulsar me salta la siguiente excepcion:
    An unhandled exception of type 'System.IndexOutOfRangeException' occurred in System.Windows.Forms.dll. Additional information: Índice fuera de los límites de la matriz.

    ¿Por qué puede estar pasando esto?
    Agradeceria mucho vuestras opiniones
    Un saludo

    martes, 19 de enero de 2010 11:32

Todas las respuestas

  • Pues la verdad es que ni idea... y si sólo es el código del diálogo no debería pasar.

    De todos modos, mira a ver si en las cadenas que le asignas a los formatos y otras propiedades tienes algo fuera de rango.

    Otra forma de ver algo más es parar justo en la excepción y ver dónde se va el debugger...
    Visita mi blog sobre desarrollo: http://geeks.ms/blogs/rfog/
    jueves, 21 de enero de 2010 12:04
    Moderador
  • Tengo un boton, que realiza la funcion de abrir un archivo:

    El codigo que coloco dentro de este boton es el siguiente:

     

    //Create _OpenDialog

    OpenFileDialog^ openFileDialog1 =

    gcnew OpenFileDialog();
    openFileDialog1->Title =
    "Load";
    openFileDialog1->InitialDirectory =
    "c:\\";
    openFileDialog1->DefaultExt =
    "txt";
    openFileDialog1->Filter =
    "Text files (*.txt)|*.txt|All files (*.*)|*.*";
    openFileDialog1->FilterIndex = 1;
    openFileDialog1->FileName =
    "Conf";
    openFileDialog1->RestoreDirectory =
    true;

    openFileDialog1->ShowDialog();

    //Creo un streamreader para poder acceder al texto del archivo
    StreamReader ^sr = gcnew StreamReader(openFileDialog1->OpenFile());

    A continuacion hago uso de los metodos de StreamReader para acceder a lo que me interesa del archivo

    Creo que el fallo esta al crear el StreamReader.

    Si no le doy a Cancelar, todo funciona correctamente, pero si pulso Cancelar, salta una interrupción con el siguiente texto:

    An unhandled exception of type 'System.IO.FileNotFoundException' occurred in mscorlib.dll

    Additional information: No se pudo encontrar el archivo 'c:\Documents and Settings\Administrador\Escritorio\prueba\InterfazProma\InterfazProma\Hist'.

    Si comento la linea de arriba openFileDialog1->FileName = "Conf"; y ejecuto, cuando pulso cancelar, salta la interrupcion que te puse en mi primer mensaje:

    An unhandled exception of type 'System.IndexOutOfRangeException' occurred in System.Windows.Forms.dll

    Additional information: Índice fuera de los límites de la matriz.

    Espero que esto pueda ayudar a saber donde está el problema. He buscado por todos sitios, y no encuentro nada que me pueda ayudar.

    Un saludo y muchas gracias!!!

    jueves, 4 de febrero de 2010 14:19
  • Es que si le das a cancelar y luego llamas a openFileDialog1->OpenFile(), en la propiedad FileName (que es usada por OpenFile) no hay una cadena válida, y por eso te salta la excepción.

    Deberías comprobar antes qué te ha devuelto ShowDialog():

    private:
       void button1_Click( Object^ /*sender*/, System::EventArgs^ /*e*/ )
       {
          Stream^ myStream;
          OpenFileDialog^ openFileDialog1 = gcnew OpenFileDialog;
    
          openFileDialog1->InitialDirectory = "c:\\";
          openFileDialog1->Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
          openFileDialog1->FilterIndex = 2;
          openFileDialog1->RestoreDirectory = true;
    
          if ( openFileDialog1->ShowDialog() == ::DialogResult::OK )
          {
             if ( (myStream = openFileDialog1->OpenFile()) != nullptr )
             {
                // Insert code to read the stream here.
                myStream->Close();
             }
          }
       }
    Sacado de la MSDN del ejemplo de OpenFile: http://msdn.microsoft.com/es-es/library/system.windows.forms.openfiledialog.openfile(VS.80).aspx

    Visita mi blog sobre desarrollo: http://geeks.ms/blogs/rfog/
    lunes, 8 de febrero de 2010 17:49
    Moderador