У меня возникла странная проблема ... У меня две формы (Form1 & Form2). Form1 вызывает старое имя (строка), и пользователь вводит новое имя (textbox1) в Form2, которое возвращается Form1. Все работает нормально, если они вводят значение или отменяют ... однако я хочу поставить проверку ошибок, чтобы они, помимо прочего, ввели значение. Проверка ошибок работает нормально, но после ошибки, когда введено правильное значение, form2 закрывается, но ничего не происходит. Я положил некоторые точки останова, и Form1, похоже, удерживает оператор using (form2 ...), ожидая завершения Form2, но после запуска сообщения об ошибке ничего не происходит. Если я удалю ... Form2 F2 = new Form2 ... Form2 просто закрывается и возвращается в Fomr1. В идеале я бы хотел остаться на Form2 до тех пор, пока значение не будет введено или пользователь не отменяет. Что мне не хватает?C# DialogResult с проверкой ошибок
// Form1
using(Form2 F5 = new Form2(SelNm))
{
if(F5.ShowDialog()== DialogResult.OK)
{
//Do stuff
}
}
// Form2
public string newName { get; set; }
public string oldName { get; set; }
public Form2(string oldNm)
{
InitializeComponent();
oldName = oldNm;
}
private void btnOK_Click(object sender, EventArgs e)
{
if (textbox1.Text.Length > 0)
{
newName = textbox1.Text;
DialogResult = DialogResult.OK;
Close();
}
else
{
MessageBox.Show("ERROR: Must enter a new name.");
DialogResult = DialogResult.Cancel;
Form2 f2 = new Form2(oldName);
f2.Show();
Close();
}
}
Кроме того, я хотел бы иметь чек, который отключает кнопку OK, если текст является недействительным. Эта проверка входит в обработчик TextChanged для текстового поля, а также для обработчика Show для формы. – smead
Это лучший подход, который наиболее часто встречается на веб-страницах. @ ArtR45 обратите внимание на это. –
Спасибо ... У меня обычно есть сообщение ... но когда я впервые установил это, я использовал свойства «DialogResult» вместо его настройки вручную. В любом случае в настоящее время отлично работает. Еще раз спасибо. Быстрый вопрос, мне нравится, что вы отключили идею кнопки OK, можете ли вы предоставить фрагмент кода? Я попытался сделать его «ложным» при загрузке формы, а затем «true» в событии textbox1_TextChanged ... но ничего не происходит. – ArtR45