Error: Un mensaje de error cuando utiliza el método FindString o FindStringExact éste en Visual Basic .NET o Visual C#. NET: "System.ArgumentOutOfRangeException"

Seleccione idioma Seleccione idioma
Id. de artículo: 820634 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Síntomas

En Visual Basic .NET o Visual C#. NET, puede invocar el método de FindString de dos argumentos sobrecargado o el método de FindStringExact de dos argumentos sobrecargado de la clase ComboBox o ListBox clase. Sin embargo, cuando el parámetro startIndex es igual al valor de índice de último elemento de la lista asociada, puede recibir el siguiente mensaje de error:
Excepción no controlada del tipo que se ha producido 'System.ArgumentOutOfRangeException' en system.windows.forms.dll
Obtener información adicional: especificar el argumento está fuera del intervalo de valores válidos.
Si controla esta excepción en un bloque try/catch, puede recibir un mensaje de error similar al siguiente:
Excepción no controlada: System.ArgumentOutOfRangeException: especificar el argumento está fuera del intervalo de valores válidos.
Nombre de parámetro: startIndex
en System.Windows.Forms.ListBox.FindStringExact (String s, startIndex Int32)
en WindowsApplication1.Form1.Button1_Click (Object sender, EventArgs e) en %Form Path% \ Form Name: línea 83
Nota Form Name es un marcador de posición el nombre de archivo del formulario que contiene el objeto ComboBox o el objeto ListBox que invoca el método FindString o FindStringExact éste. Además, el %Form Path% es un marcador de posición para la ruta de acceso del formulario se ha mencionado anteriormente.

Causa

Cuando se invoca el método de FindString dos argumentos o el método FindStringExact de dos argumentos, se utiliza un parámetro startIndex . Este parámetro startIndex puede ser igual que el valor índice del último elemento de la lista de asociados de un objeto ComboBox o un objeto ListBox . En tales casos, se supone que el método invocado inicia la búsqueda desde el principio de la lista para la cadena que se pasa como primer parámetro. Sin embargo, el método invocado incorrectamente comienza la búsqueda después del último elemento de la lista. Por tanto, se cruza el límite de la lista durante la búsqueda y recibirá mensaje de error en la sección "Síntomas" sección.

Solución

Para evitar este error, pase 0 como el parámetro startIndex para el método de dos argumentos FindString o el método FindStringExact de dos argumentos. También puede utilizar el método de FindString un argumento o el método FindStringExact de argumento de una en lugar de los métodos correspondientes de dos argumentos.

Para evitar este problema, siga estos pasos:

Nota Estos pasos son para el ejemplo que está en el "más información" sección.

pasar 0 como el parámetro StartIndex
  1. Ejecución de Visual Basic .NET. Abra Form1.vb y, a continuación, reemplazar
    ReturnedIndex = ListBox1.FindString("One", 3)
    con el siguiente código:
    ReturnedIndex = ListBox1.FindString("One", 0)
    ejecutar Visual C#. NET. Abra Form1.cs y, a continuación, reemplace
    ReturnedIndex = listBox1.FindString("One", 3);
    con el siguiente código:
    ReturnedIndex = listBox1.FindString("One", 0);
  2. En Visual Basic. NET, reemplace
    ReturnedIndex = ListBox1.FindStringExact("One", 3)
    con el siguiente código:
    ReturnedIndex = ListBox1.FindStringExact("One", 0)
    en Visual C#. NET, reemplace
    ReturnedIndex = listBox1.FindStringExact("One", 3);
    con el siguiente código:
    ReturnedIndex = listBox1.FindStringExact("One", 0);
  3. En Visual Basic. NET, reemplace
    ReturnedIndex = ComboBox1.FindString("One", 3)
    con el siguiente código:
    ReturnedIndex = ComboBox1.FindString("One", 0)
    en Visual C#. NET, reemplace
    ReturnedIndex = comboBox1.FindString("One", 3);
    con el siguiente código:
    ReturnedIndex = comboBox1.FindString("One", 0);
  4. En Visual Basic. NET, reemplace
    ReturnedIndex = ComboBox1.FindStringExact("One", 3)
    con el siguiente código:
    ReturnedIndex = ComboBox1.FindStringExact("One", 0)
    en Visual C#. NET, reemplace
    ReturnedIndex = comboBox1.FindStringExact("One", 3);
    con el siguiente código:
    ReturnedIndex = comboBox1.FindStringExact("One", 0);
  5. En el menú Depurar , haga clic en iniciar para ejecutar la aplicación.

    Aparecerá Form1.
  6. En Visual Basic. NET, haga clic en Button1 . En Visual C#. NET, haga clic en button1 .

    Recibirá una serie de cuatro cuadros de mensaje con los valores devueltos de invocar métodos.
  7. Haga clic en Aceptar para cerrar cada cuadro de mensaje. Aparecerá automáticamente el siguiente cuadro de mensaje.
Nota Se basan estos pasos en el ejemplo desde el "más información" sección de este artículo. Por lo tanto, el código y los nombres de archivo en los pasos pueden diferir de su código y los nombres de archivo.

mediante los métodos de un argumento correspondiente
  1. Ejecución de Visual Basic .NET. Abra Form1.vb y, a continuación, reemplace
    ReturnedIndex = ListBox1.FindString("One", 3)
    con el siguiente código:
    ReturnedIndex = ListBox1.FindString("One")
    ejecutar Visual C#. NET. Abra Form1.cs y, a continuación, reemplace
    ReturnedIndex = listBox1.FindString("One", 3);
    con el siguiente código:
    ReturnedIndex = listBox1.FindString("One");
  2. En Visual Basic. NET, reemplace
    ReturnedIndex = ListBox1.FindStringExact("One", 3)
    con el siguiente código:
    ReturnedIndex = ListBox1.FindStringExact("One")
    en Visual C#. NET, reemplace
    ReturnedIndex = listBox1.FindStringExact("One", 3);
    con el siguiente código:
    ReturnedIndex = listBox1.FindStringExact("One");
  3. En Visual Basic. NET, reemplace
    ReturnedIndex = ComboBox1.FindString("One", 3)
    con el siguiente código:
    ReturnedIndex = ComboBox1.FindString("One")
    en Visual C#. NET, reemplace
    ReturnedIndex = comboBox1.FindString("One", 3);
    con el siguiente código:
    ReturnedIndex = comboBox1.FindString("One");
  4. En Visual Basic. NET, reemplace
    ReturnedIndex = ComboBox1.FindStringExact("One", 3)
    con el siguiente código:
    ReturnedIndex = ComboBox1.FindStringExact("One")
    en Visual C#. NET, reemplace
    ReturnedIndex = comboBox1.FindStringExact("One", 3);
    con el siguiente código:
    ReturnedIndex = comboBox1.FindStringExact("One");
  5. En el menú Depurar , haga clic en iniciar para ejecutar la aplicación.

    Aparecerá Form1.
  6. En Visual Basic. NET, haga clic en Button1 . En Visual C#. NET, haga clic en button1 .

    Recibirá una serie de cuatro cuadros de mensaje con los valores devueltos de invocar métodos.
  7. Haga clic en Aceptar para cerrar cada cuadro de mensaje. Aparecerá automáticamente el siguiente cuadro de mensaje.
Nota Se basan estos pasos en el ejemplo desde el "más información" sección de este artículo. Por lo tanto, el código y los nombres de archivo en los pasos pueden diferir de su código y los nombres de archivo.

Estado

Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados al principio de este artículo.

Más información

Pasos para reproducir el problema

  1. Ejecutar Microsoft Visual Studio .NET. Crear un Windows proyecto de aplicación que se denomina FindStringDemo .

    Puede utilizar Visual Basic .NET o C# .NET.

    De forma predeterminada, se crea Form1 .
  2. En el cuadro de herramientas, haga doble clic en ListBox .

    En Visual Basic. NET, se agrega ListBox1 a Form1. En Visual C# .NET, listBox1 se agrega a Form1.
  3. En Visual Basic. NET, seleccione ListBox1 . En Visual C# .NET, seleccione listBox1 . En la ventana Propiedades , seleccione los puntos suspensivos (... ) para la propiedad de elementos ver el cuadro de diálogo Editor de la colección de cadenas .
  4. Agregar el texto siguiente en el cuadro de texto Escriba las cadenas de la colección (una por línea) y, a continuación, haga clic en Aceptar :
    One
    Two
    Three
    Four
  5. En el cuadro de herramientas, haga doble clic en ComboBox .

    En Visual Basic. NET, se agrega ComboBox1 a Form1. En Visual C#. NET, se agrega comboBox1 a Form1.
  6. En Visual Basic. NET, seleccione ComboBox1 . En Visual C# .NET, seleccione comboBox1 . En la ventana Propiedades , seleccione los puntos suspensivos (... ) para la propiedad de elementos ver el cuadro de diálogo Editor de la colección de cadenas .
  7. Agregar el texto siguiente en el cuadro de texto Escriba las cadenas de la colección (una por línea) y, a continuación, haga clic en Aceptar :
    One
    Two
    Three
    Four
  8. En el cuadro de herramientas, haga doble clic en botón .

    En Visual Basic. NET, se agregará Button1 a Form1. En Visual C#. NET, se agregará button1 a Form1.
  9. In Visual Basic .NET, add the following code to the Button1_Click event handler:
    Dim ReturnedIndex As Integer
    Try
       ReturnedIndex = ListBox1.FindString("One", 3)
       MessageBox.Show(ReturnedIndex)
    Catch MyException As Exception
       MessageBox.Show(MyException.ToString())
    End Try
    Try
       ReturnedIndex = ListBox1.FindStringExact("One", 3)
       MessageBox.Show(ReturnedIndex)
    Catch MyException As Exception
       MessageBox.Show(MyException.ToString())
    End Try
    Try
       ReturnedIndex = ComboBox1.FindString("One", 3)
       MessageBox.Show(ReturnedIndex)
    Catch MyException As Exception
       MessageBox.Show(MyException.ToString())
    End Try
    Try
       ReturnedIndex = ComboBox1.FindStringExact("One", 3)
       MessageBox.Show(ReturnedIndex)
    Catch MyException As Exception
       MessageBox.Show(MyException.ToString())
    End Try
    In Visual C# .NET, add the following code to the button1_Click event handler.
    int ReturnedIndex;
    try
    {
       ReturnedIndex = listBox1.FindString("One", 3);
       MessageBox.Show(ReturnedIndex.ToString());
    }
    catch(Exception MyException)
    {
       MessageBox.Show(MyException.ToString());
    }
    try
    {
       ReturnedIndex = listBox1.FindStringExact("One", 3);
       MessageBox.Show(ReturnedIndex.ToString());
    }
    catch(Exception MyException)
    {
       MessageBox.Show(MyException.ToString());
    }
    try
    {
       ReturnedIndex = comboBox1.FindString("One", 3);
       MessageBox.Show(ReturnedIndex.ToString());
    }
    catch(Exception MyException)
    {
       MessageBox.Show(MyException.ToString());
    }
    try
    {
       ReturnedIndex = comboBox1.FindStringExact("One", 3);
       MessageBox.Show(ReturnedIndex.ToString());
    }
       catch(Exception MyException)
    {
       MessageBox.Show(MyException.ToString());
    }
    Note You may replace One with any of the other strings in the ListBox or in the ComboBox without affecting this step.
  10. En el menú Depurar , haga clic en iniciar para ejecutar la aplicación.

    Aparecerá Form1.
  11. En Visual Basic. NET, haga clic en Button1 . En Visual C#. NET, haga clic en button1 . Recibirá una serie de cuatro cuadros de mensaje con información similar a la información mencionada en la sección "Síntomas" de este artículo.
  12. Haga clic en Aceptar para cerrar cada cuadro de mensaje. Aparecerá automáticamente el siguiente cuadro de mensaje.

Referencias

Para obtener más información, visite los siguientes sitios Web de Microsoft (pueden estar en inglés):

http://msdn2.microsoft.com/en-us/library/system.argumentoutofrangeexception(vs.71).aspx

http://msdn2.microsoft.com/en-us/library/system.windows.forms.combobox.findstring(vs.71).aspx

http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemWindowsFormsListBoxClassFindStringTopic.asp

http://msdn2.microsoft.com/en-us/library/system.windows.forms.combobox.findstringexact(vs.71).aspx

http://msdn2.microsoft.com/en-us/library/system.windows.forms.listbox.findstringexact(vs.71).aspx

http://msdn2.microsoft.com/en-us/library/xtd0s8kd(vs.71).aspx

Propiedades

Id. de artículo: 820634 - Última revisión: sábado, 12 de mayo de 2007 - Versión: 2.4
La información de este artículo se refiere a:
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
Palabras clave: 
kbmt kbvs2005swept kbvs2005doesnotapply kbvs2002sp1sweep kbstringeditor kbstring kbexcepthandling kblistbox kbctrl kbcontrol kbcombobox kberrmsg kbwindowsforms kbforms kbprogramming kbbug KB820634 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 820634

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com