Recortar una declaración de cambio

He estado tratando de hacer que el proyecto en el que estoy trabajando sea un poco más legible ya que la clase de interfaz de usuario parece un desastre. El nuevo problema al que me enfrento es con los controles StatusStrip, MenuStrip y ToolStrip.

Dado que cada botón debe hacer una cosa diferente, esto se controla con una declaración de cambio en este momento, aquí hay un ejemplo:

switch (e.ClickedItem.Text.ToLower())
{
    case "find":
        {
            Find find = new Find(customTextBox1);
            find.Show();
            break;
        }
    case "undo":
        {
            customTextBox1.Undo();
            break;
        }
    case "redo":
        {
            customTextBox1.Redo();
            break;
        }
    case "cut":
        {
            customTextBox1.Cut();
            break;
        }
    case "copy":
        {
            customTextBox1.Copy();
            break;
        }
    case "paste":
        {
            customTextBox1.Paste();
            break;
        }
    case "delete":
        {
            customTextBox1.SelectedText = "";
            break;
        }
    case "refresh":
        {
            RefreshData();
            break;
        }
    case "select all":
        {
            customTextBox1.SelectAll();
            break;
        }
}

El código anterior es solo para un elemento, así que imagine tener 20 de ellos con 5-10 subelementos cada uno.

Ya aclaré los métodos de casos, como puede ver, y ahora la mayoría de ellos son de una sola línea, pero aún con esa cantidad de subelementos, parece que debería ser una mejor manera de hacer esto. Entonces, idealmente, estoy buscando una forma nueva/mejor de manejar este problema.

Gracias de antemano.

preguntado el 28 de julio de 12 a las 07:07

Las llaves no son necesarias en declaraciones de cambio de caso, tras caso. -

De hecho, siempre me preguntaba por qué se veían extraños (en términos de posicionamiento). Pero eso no lo reduce demasiado por desgracia, aún mejor de lo que era antes, gracias. -

En mi opinión, sería mejor no confiar en los nombres de control. Debe manejar el evento apropiado (fe BtnDelete.Click or BtnCopy.Click) y llame al método correcto desde allí. El código sería más fácil de entender y mantener y sería menos propenso a errores. Eso es más importante que el número de líneas. -

En teoría sí, supongo que puedo poner los eventos en una clase parcial y trabajar con eso. Pero lo primero es lo primero, lamentablemente. La clase de interfaz de usuario está tan agrupada en este momento que hace que encontrar cosas sea un poco molesto. Entonces, lo ideal para este caso es recortar todo lo que pueda (mientras, por supuesto, mantengo la legibilidad) y luego de eso puedo pasar a crear nuevas clases. Gracias por compartir tu idea sin embargo. -

1 Respuestas

Puede usar el siguiente código, sin embargo, debe asegurarse de que la cadena sea exactamente igual que el nombre de la función

switch (e.ClickedItem.Text.ToLower())
{
    case "find":
        Find find = new Find(customTextBox1);
        find.Show();
        break;
    case "undo": case "redo": case "cut": case "copy": case "paste": case "select all":
        Type thisType = customTextBox1.GetType();
        MethodInfo theMethod = thisType.GetMethod(e.ClickedItem.Text.ToLower());
        theMethod.Invoke(customTextBox1, userParameters);
        break;
    case "delete":
        customTextBox1.SelectedText = "";
        break;
    case "refresh":
        RefreshData();
        break;
}

Respondido 28 Jul 12, 07:07

Afortunadamente, los nombres ya tienen los nombres de las funciones, en el peor de los casos, supongo que puedo usar etiquetas. Gracias por el ejemplo, debería ayudar mucho ya que la mayoría de los botones tienen que ver con los 6 que agrupamos arriba. - negado66

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.