Привет, ребята, это должно быть простой логикой для большинства программистов, но я не могу понять это.TextChanged хочет, чтобы он проверял после того, как пользователь ввел дату, но он проверяет, как пользователь вводит дату.
У меня есть 2 DateTimePicker на моей форме окна DateTimePicker 1 = FromDate DateTimePicker 2 = ФОРУМЕ
От даты и до настоящего времени я получаю от ниже SQL
SELECT MIN(TransDate) AS mindate, MAX(TransDate) AS maxdate
FROM dbo.EtimePunchDetail WHERE (EmpID = @empid)
FromDate = MinDate и Todate = maxdate
fromdate.mindate = mindate todate.maxdate = maxdate («Таким образом, пользователь работает только с выбранным диапазоном дат»)
Я добавил два текстовых поля с функцией поиска, которые пользователь может ввести fromdate и todate, и он проверяет против mindate и maxdate, и если пользователь вводит дату из диапазона, я установил окно с сообщением об ошибке
у меня есть текстовое поле изменилось даже, что имеет следующий запрос:
private void Min_TextChanged(object sender, EventArgs e)
{
DateTime date = DateTime.Parse(Min.Text);
if (date < DateTime.Parse(AvailableMin.Text))
{
MessageBox.Show("The Date you entered is either out of range or an invalid format");
}
else
{
FromDate.MinDate = date;
FromDate.Value = date;
}
}
private void Max_TextChanged(object sender, EventArgs e)
{
DateTime date = DateTime.Parse(Max.Text);
if (date > DateTime.Parse(AvailableMax.Text))
{
MessageBox.Show("The Date you entered is either out of range or an invalid format");
}
else
{
ToDate.MaxDate = date;
ToDate.Value = date;
}
}
Но, как я изменить текст TextChanged событие увольняют с сообщением и не давая мне изменить дату или он говорит, что это Недействительная дата. я хочу, чтобы иметь возможность ввести дату, а затем textchanged должен проверить, не указана ли введенная дата, как я могу это сделать?
здесь является визуальное представление того, что я прошу:
Больше кодекса о том, как я получаю минимальное и максимальное дату и другие вещи, которые я делаю с теми ценностями, я должен включили это в мой вопрос, прежде чем я прошу прощения я вещь проверка DateTimePicker конфликтует с текстовым полем проверки
Min и Max Value
private void mindateset() // fill the listbox of values of mindate and maxdate
{
if (Employee.SelectedValue != null)
{
if (Employee.SelectedValue.ToString().Trim().Length > 0)
{
try
{
using (MSSQL.SqlConnection connection = new MSSQL.SqlConnection(constr))
{
timepunchnew = new EtimeHistoryDataSet();
connection.Open();
using (MSSQL.SqlCommand command = new MSSQL.SqlCommand("SELECT MIN(TransDate) AS mindate, MAX(TransDate) AS maxdate FROM dbo.EtimePunchDetail WHERE (EmpID = @empid)", connection))
{
MSSQL.SqlParameter myminparam = new MSSQL.SqlParameter();
myminparam.Direction = ParameterDirection.Input;
myminparam.ParameterName = "@empid";
myminparam.Value = Employee.SelectedValue;
command.Parameters.Add(myminparam);
MSSQL.SqlDataAdapter myadapter = new System.Data.SqlClient.SqlDataAdapter();
myadapter.SelectCommand = command;
myadapter.Fill(timepunchnew, "Mindate");
AvailableMin.DataSource = timepunchnew.Mindate;
AvailableMin.DisplayMember = "mindate";
AvailableMax.DataSource = timepunchnew.Mindate;
AvailableMax.DisplayMember = "maxdate";
FromDate.MinDate = DateTime.Parse(AvailableMin.Text);
FromDate.Value = FromDate.MinDate;
ToDate.MaxDate = DateTime.Parse(AvailableMax.Text);
ToDate.Value = ToDate.MaxDate;
Min.Text = FromDate.MinDate.ToString("d");
Max.Text = ToDate.MaxDate.ToString("d");
}
}
}
catch (Exception) { /*Handle error*/ }
}
}
}
Проверка на DateTimePicker значения
private void FromDate_ValueChanged_1(object sender, EventArgs e)
{
if (empchanging == false)
{
if (FromDate.Value > ToDate.Value)
{
// MessageBox.Show("From Date Cannot Be Greater Than To Date");
if (DialogResult.OK == MessageBox.Show("From Date Cannot Be Greater Than To Date"))
{
FromDate.MinDate = DateTime.Parse(AvailableMin.Text);
FromDate.Value = FromDate.MinDate;
}
}
}
}
private void ToDate_ValueChanged_1(object sender, EventArgs e)
{
if (empchanging == false)
{
if (ToDate.Value < FromDate.Value)
{
//MessageBox.Show("To Date Cannot Be Less Than From Date");
if (DialogResult.OK == MessageBox.Show("To Date Cannot Be Less Than From Date"))
{
ToDate.MaxDate = DateTime.Parse(AvailableMax.Text);
ToDate.Value = ToDate.MaxDate;
}
}
}
}
Пользователи Доступные диапазон дат для пустой строки
private void AvailableMin_SelectedIndexChanged(object sender, EventArgs e)
{
if (AvailableMin.Text == string.Empty)
{
textBox2.Visible = true;
textBox2.Text = "There is no From Date available for this particular user";
}
else
{
textBox2.Visible = false;
}
}
private void AvailableMax_SelectedIndexChanged(object sender, EventArgs e)
{
if (AvailableMax.Text == string.Empty)
{
textBox1.Visible = true;
textBox1.Text = "There is no To Date available for this particular user";
}
else
{
textBox1.Visible = false;
}
}
Я попытался решения ниже
private void Min_TextChanged(object sender, EventArgs e)
{
DateTime date;
if (!DateTime.TryParse(Min.Text, out date))
{
formerrorprovider.SetError(this.Min,"The Date you entered is in invalid format");
}
else if (date < DateTime.Parse(AvailableMin.Text))
{
formerrorprovider.SetError(this.Min, "The Date you entered is either out of range");
}
else
{
formerrorprovider.SetError(this.Min, string.Empty);
FromDate.MinDate = date;
FromDate.Value = date;
}
принимает дату ввода, но вмешивается в проверку валидатора datetimepicker.
PLZ HELP
Вы хотите проверить ввод только тогда, когда пользователь пытается переместить фокус на другой элемент управления, то есть когда они закончили вводить значение? – HABO
@HABO, когда они закончили вводить значение, поэтому даже когда я удаляю 5 в 2015 году, окно сообщения появляется с сообщением, и если я пытаюсь очистить текстовое поле каждый раз, когда текст изменится, я получу ошибку строка не была распознана. – HackMaster
FWIW, я обычно обнаружил, что более дружелюбно проверять все входные данные, когда пользователь говорит, что они сделаны, например. они нажимают «Запустить отчет». Таким образом, у вас нет этих игр, чтобы попытаться выяснить порядок, в котором они должны изменять поля, например. 'From Date' должен быть не позже, чем' To Date', но если вы хотите изменить оба, то вы можете _have_ сменить сначала. Они могут вырезать пасту, приспосабливаться и поглаживать свое сердце. Конечно, вы можете не допускать символы, отличные от цифр в штрих-коде Employee во время ввода данных, но это не проверка. – HABO