Las entradas de datos del usuario siguen este esquema básico...
Funcion ActuarConUusuario // en realidad, es el bucle solo el pedazo de código que interesa, se envuelve en una función para que no parezca ...código perdido ...
Hacer
x = Pedirdato
y = VerificarEntradaUser(x) //, A, Z, Mensaje)
Repetir Mientras (y=FALSE) ' o Hasta que (y=TRUE)
Fin Funcion
Y la verificación, sigue un esquema más o menos similar (hay que adaptarla siempre a las necesidades, aquí adaptada a la tuya), a esto:
Buleano = Funcion VerificarEntradaUser(dato, Min, Max, MensajeError)
Si (Dato >= Min) y (Dato <= Max) luego
Devolver TRUE
Sino
MostrarMensaje (MensajeError)
Devolver FALSE
Fin si
Fin funcion
Finalmente en tu rutina de verificar si está limitado al rango 1-4, la llamada sería más o menos:
y = VerificarEntradaUser(x, 1, 4,"no puedes marcar el valor " + )
El mensaje de error tu sabrás cual es más razonable conforme a lo que el usuario esté haciendo.
Podrías tener contantes y un array con mensajes de error, con cada petición según donde estés marcas el índice del mensaje de error que se debería mostrar para ese caso concreto....
Enumeracion ConstantesMensajesErrorEntradaUser
ERROR_ENTRADA_USER_SOLO_UNA_CASILLA = 0 // Debe activar solo una casilla a la vez
ERROR_ENTRADA_USER_VALOR_FUERA_RANGO = 1 // El valor entrado está fuera dle rango permitido.
...
...
ERROR_ENTRADA_USER_CARACTER_ILEGAL = 8 // La entrada contiene varacteres no permitidos (se esperaban números , o solo x letras, etc...).
Fin enumeracion
String ArrayErroresEntradaUser(0 a 8) // por ejemplo, tu sabrás cuantos mensajes de error serían precisos...
Entero ErrorActualEntradaUser // tipo ConstantesMensajesErrorEntradaUser
Funcion Inicializar
ArrayErroresEntradaUser(ERROR_ENTRADA_USER_SOLO_UNA_CASILLA) = "Debe activar solo una casilla a la vez."
ArrayErroresEntradaUser(ERROR_ENTRADA_USER_VALOR_FUERA_RANGO) = "El valor entrado está fuera dle rango permitido."
...
...
ArrayErroresEntradaUser(ERROR_ENTRADA_USER_CARACTER_ILEGAL) = "La entrada contiene varacteres no permitidos (se esperaba solo números)."
//Otras cosas que requieran ser inicializadas al comienzo del programa...
Fin funcion
Funcion BotonX_Click(parametros....)
ErrorActualEntradaUser = ERROR_ENTRADA_USER_VALOR_FUERA_RANGO //en esta pieza de código se espera que el error que vaya a cometer el usuario sea (fuera de rango, si fueran posibles más errores, sería la función 'VerificarEntradaUser' quien deberiera chequear que error se comete y en base a ello, obtener el mensaje de error oportuno al caso.
LlamarA ActuarConUsuario
Fin funcion
El resto son cambios, y se produce en la llamada al mensaje de error (que ahora se usa un índice en un array para obtener el mensaje...
Buleano = Funcion VerificarEntradaUser(dato, Min, Max) //se elimina el parametro mensajeError.
Si (Dato >= Min) y (Dato <= Max) luego
Devolver TRUE
Sino
MostrarMensaje (ArrayErroresEntradaUser(ErrorActualEntradaUser))
Devolver FALSE
Fin si
Fin funcion
Si los mensajes son muy variopintos y difíciles de 'predecir' según la situación, entonces es mejor que desde donde se llame se ingrese ya, el mensaje específico, que toque en caso de error...
Si lo repasas varias vece,s acabarás por encontrarle la lógica.