В следующем мини-приложении мне интересно, почему никогда не вызывается обработчик событий BtnOk_Validating.Я ожидал, что нажатие кнопки Ok вызовет обработчик событий.
В реальном диалоге есть еще много элементов управления, каждый из которых имеет проверяющий обработчик события.Мой план состоял в том, чтобы использовать обработчик событий, проверяющий кнопку «ОК», для вызова всех других обработчиков событий, прежде чем разрешить закрытие диалога.
Если это не очевидно, я довольно новичок в разработке форм.
using System.ComponentModel;
using System.Windows.Forms;
namespace ConsoleApp
{
class Program
{
static void Main( string[] args )
{
Dialog dialog = new Dialog();
dialog.ShowDialog();
}
}
public class Dialog : Form
{
Button m_BtnOk;
Button m_BtnCancel;
public Dialog()
{
m_BtnOk = new System.Windows.Forms.Button();
m_BtnCancel = new System.Windows.Forms.Button();
m_BtnOk.CausesValidation = true;
m_BtnOk.DialogResult = DialogResult.OK;
m_BtnOk.Text = "Ok";
m_BtnOk.Location = new System.Drawing.Point( 0, 0 );
m_BtnOk.Size = new System.Drawing.Size( 70, 23 );
m_BtnOk.Validating += new CancelEventHandler( BtnOk_Validating );
m_BtnCancel.CausesValidation = false;
m_BtnCancel.DialogResult = DialogResult.Cancel;
m_BtnCancel.Text = "Cancel";
m_BtnCancel.Location = new System.Drawing.Point( 0, 30 );
m_BtnCancel.Size = new System.Drawing.Size( 70, 23 );
Controls.Add( this.m_BtnOk );
Controls.Add( this.m_BtnCancel );
}
private void BtnOk_Validating( object sender, CancelEventArgs e )
{
System.Diagnostics.Debug.Assert( false ); // we never get here
}
}
}
Редактировать: Пожалуйста, смотрите мой ответ Вопрос для более полного примера, который работает (в основном хорошо).