Для моего приложения, которое имеет дело с графикой, я сделал немного DialogBox установить:DialogBox ценностными поверок
- Max;
- мин;
- Главный шаг (шкалы);
- Незначительный шаг.
Вот захват экрана:
Я хочу проверить несколько вещей, прежде чем разрешить пользователю нажать Ok:
- Max> = Min
- MaxScale> = MinScale.
Но это не работает, как я бы: Если я устанавливаю Min> Max, текстовое поле красного цвета, но кнопка Ok все еще включена ...
Как я могу исправить это?
Вот мой код:
public partial class AxisPropertiesDial : Form
{
public AxisPropertiesDial(string title, double max, double min, double majorStep, double minorStep)
{
Max = max;
Min = min;
MajorStep = majorStep;
MinorStep = minorStep;
InitializeComponent();
tbMax.Text = max.ToString();
tbMin.Text = min.ToString();
tbMajStep.Text = majorStep.ToString();
tbMinStep.Text = minorStep.ToString();
Load += OnLoad;
Text = "Axis: " + title;
}
private void OnLoad(object sender, EventArgs e)
{
SetDesktopLocation(Cursor.Position.X - Size.Width/2, Cursor.Position.Y - Size.Height/2);
}
public double Max;
public double Min;
public double MajorStep;
public double MinorStep;
private void btnOk_Click(object sender, EventArgs e)
{
Max = Convert.ToDouble(tbMax.Text);
Min = Convert.ToDouble(tbMin.Text);
MajorStep = Convert.ToDouble(tbMajStep.Text);
MinorStep = Convert.ToDouble(tbMinStep.Text);
}
private void ValidateTextBox(TextBox tb, double save, out double valueToAssign, double compareTo, bool greaterThan)
{
btnOk.Enabled = false;
tb.BackColor = Color.Tomato;
if (!Double.TryParse(tb.Text, out valueToAssign))
{
valueToAssign = save;
return;
}
if (greaterThan && (valueToAssign >= compareTo) || !greaterThan && (valueToAssign <= compareTo))
{
btnOk.Enabled = true;
tb.BackColor = Color.White;
}
else
{
//Rollback
valueToAssign = save;
}
}
private void ValidateAll()
{
ValidateTextBox(tbMax, Max, out Max, Min, true);
ValidateTextBox(tbMin, Min, out Min, Max, false);
ValidateTextBox(tbMajStep, MajorStep, out MajorStep, MinorStep, true);
ValidateTextBox(tbMinStep, MinorStep, out MinorStep, MajorStep, false);
}
private void tb_TextChanged(object sender, EventArgs e)
{
ValidateAll();
}
}
Это хорошо, * но *, когда я ставлю две ошибки, вторая не включается красный ... Когда я отлаживаю, выполняются только первые два 'ValidateTextBox' ... –
@Thomas Обновлено, чтобы использовать побитовое' & ', а не логическое' && '- это должно все еще функционировать правильно, но обходит оценку короткого замыкания присущий '&&' –