Как сказал Лешек Репи в своем комментарии, вы не должны проходить контроль.Никогда не смешивайте уровень представления (отображение / элементы управления) с бизнес-уровнем (вычисления).Поэтому, когда пользователь нажимает кнопку «ОК», в вашем обработчике OkButtonClick вы извлекаете текст из текстового поля.Затем этот текст передается в качестве параметра для ваших бизнес-функций.Это также имеет то преимущество, что упрощает ваши модульные тесты - вы просто жестко кодируете строку теста.
Рассмотрите возможность использования функций этой формы:
bool CoordinateValidation(String coordinates, ref String errorMessage )
bool ValidRange( String coordinates )
Когда вы получите эту работу, обратите свое внимание на CoordinateValidation ().Он выполняет некоторую собственную проверку (проверяет координаты), затем вызывает ValidateRange ().Я предлагаю извлечь проверку координат и поместить этот код в новую функцию.Затем ваша функция CoordinateValidation просто вызывает вашу новую функцию и ValidateRange ().
Надеюсь, что это поможет.
Правка - Вот небольшой пример:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click( object sender, EventArgs e )
{
List<DataTransferObject> dtos = new List<DataTransferObject>();
dtos.Add( new DataTransferObject() { Field = FieldId.FieldA, Text = textBox1.Text } );
dtos.Add( new DataTransferObject() { Field = FieldId.FieldB, Text = textBox2.Text } );
BusinessThing businessThing = new BusinessThing();
businessThing.Validate( dtos );
foreach( var dto in dtos )
{
if( dto.Error != null )
{
if( dto.Field == FieldId.FieldA )
{
label1.Text = dto.Error;
}
// etc
}
}
}
}
public enum FieldId
{
FieldA,
FieldB
}
public class DataTransferObject
{
public FieldId Field { get; set; }
public String Text { get; set; }
public String Error { get; set; } = null;
}
public class BusinessThing
{
private Regex regex = new Regex(@"^((\d+\.?\d*),{1}(\d+\.?\d*))$");
public void Validate( List<DataTransferObject> dtos )
{
foreach( var dto in dtos )
{
Validate( dto );
}
}
public void Validate( DataTransferObject dto )
{
if( ValidateCoordonate( dto ) )
{
ValidateRange( dto );
}
}
public Boolean ValidateCoordonate( DataTransferObject dto )
{
Match match = regex.Match(dto.Text);
if( match.Success )
{
return true;
}
else
{
dto.Error = "Invalid coordinates!";
return false;
}
}
public Boolean ValidateRange( DataTransferObject dto )
{
float x = float.Parse(dto.Text.Split(',')[0]);
float y = float.Parse(dto.Text.Split(',')[1]);
if( (x < 10 || x > 1000) || (y < 10 || y > 730) )
{
dto.Error = "Invalid range!";
return false;
}
return true;
}
}
}