Ответ 1
Я хочу добавить код, когда часть дизайна будет выполнена. Я определяю имена элементов управления, такие как intTextboxAge. Фрагмент должен добавить автоматическую проверку для всех текстовых полей, используя функцию, определенную ниже.
Было бы лучше иметь CustomControls со своей собственной проверкой, так что вам не нужно добавлять код после выполнения части дизайна:
//Integer input CustomControl with validation label (pictured above)
public partial class intTextBox : UserControl
{
public bool IsValid {get;set;}
public intTextBox()
{
InitializeComponent();
this.textBox1.TextChanged += this.intTextBox_TextChanged;
}
private void intTextBox_TextChanged(object sender, EventArgs e)
{
int n;
IsValid = int.TryParse(this.textBox1.Text, out n);
label1.Visible = !IsValid;
}
}
Должны быть разные элементы управления, основанные на префиксе имени управления (int, str, dou, dec)
Хотя вы можете использовать префикс имени управления, я рекомендую создать собственный UserControls, выведя базовые элементы управления и просто проверив тип управления:
//Decimal input UserControl
public class decTextBox : TextBox
{
public string Text
{
get {
return this.Text;
}
}
public bool IsValid()
{
decimal n;
bool isDecimal = decimal.TryParse(this.Text, out n);
return isDecimal;
}
}
....
public Control AutoCode(Control forEgTheForm)
{
//Tip: You may need to recursively call this function to check children controls are valid
foreach(var ctrl in forEgTheForm.Controls) {
if(ctrl is TextBoxBase) {
if(ctrl is decTextBox) {
decTextBox txt = ((decTextBox)ctrl);
//If its not a valid value then set a[i]=true/false or in this example return the control...
if (!txt.IsValid()) return ctrl;
}
}
}
}
Я хочу динамически создавать фрагмент кода в соответствии с именами элементов управления и некоторым условием.
Если вы собираетесь создавать фрагменты кода, делайте это в соответствии с типами управления, а не с помощью префикса имени имени, поэтому вам не нужно, чтобы они были динамическими.
...
Было бы еще более элегантно не писать никаких фрагментов или кода проверки. Это идеальное решение. Я рекомендую сделать это, используя правильный тип элементов управления.
Текстовые поля хороши для строки, однако для int, dec и dbl вам лучше использовать элемент управления NumericUpDown. Таким образом, пользователи будут интуитивно знать, что им нужно вводить числа (и не смогут вводить буквенно-цифровые символы). После установки пары свойств управления NumericUpDown (во время разработки или времени выполнения) вам не нужно вводить код в валидацию:
Я не уверен в причине ухудшения производительности, с которой вы сталкиваетесь? Хотя я предлагаю вам связать элементы управления с классом в библиотеке классов со всей бизнес-логикой, чтобы вы могли Unit Test. Для проверки подлинности на лицевой стороне, хотя правильная проверка входных данных правильна, как показано выше, это путь.