Я пользуюсь C# только около недели, и я новичок в программировании в целом.
У меня есть две формы. В форме parent у меня есть две кнопки - Add и Edit . Эти кнопки открывают форму child , в которой также есть две кнопки - Save и Cancel .
При отмене нажимается на дочерняя форма, в коде есть переменная индикатора, которая помечена как истинная:
//Indicator on child form; setup in properties.
public bool frmCloseInd { get; set; }
Индикатор настроен на кнопку отмены, чтобы установить значение true при событии щелчка:
//Cancel Event on child form
private void but_DM_Cancel_Click(object sender, EventArgs e)
{
frmCloseInd = true;
Close();
}
Значение frmCloseInd передается обратно родительскому форме. Оператор IF выполняется, чтобы определить, какой код выполняется. Проблема - когда X нажимается, он все равно выполняет тот же код, как если бы он был сохранен. Как я могу передать true в frmCloseInd при нажатии X?
Я пытался создать событие закрытия, но оно срабатывает при закрытии () в кнопках сохранения и отмены.
Вот событие нажатия кнопки добавления на родительском форма:
private void but_DM_Add_Click(object sender, EventArgs e)
{
//instance of child form is called
frmDirectoryManagerAARecord frm = new frmDirectoryManagerAARecord();
//Setting properties specific to add button
frm.Text = "Add Contract";
frm.ShowDialog(this);
if (frm.frmCloseInd == true)
{
//indicates the user canceled out of the userform. No action performed.
}
else
{
if (frm.frmAnalytic_ID == 0 || frm.frmClient_ID == 0 || frm.frmProject_ID == 0)
{
MessageBox.Show("Required values were missing. Analytic ID, Client ID and Project ID are required for entry.");
}
else
{
MessageBox.Show(frm.frmAnalytic_ID + " " + frm.frmClient_ID + " " + frm.frmProject_ID + " " + frm.frmDescrip);
try
{
string database = "DB_NAME";
string query_insert = @"INSERT INTO [dbo].[TestTable]
(Analytic_ID, Master_Client_ID, Project_ID, Description, Active)
VALUES(" + frm.frmAnalytic_ID + ", " + frm.frmClient_ID + ", " + frm.frmProject_ID + ", '" + frm.frmDescrip + "', 1)";
//calling instance of class ContractSearch to use method connectToDatabase
ContractSearch con = new ContractSearch();
con.connectToDatabase(database, query_insert);
//reloads gridview on parent form
Reload_gvDirectoryManager();
}
catch (Exception ex)
{
MessageBox.Show("Error: " + ex.Message);
}
}
}
}
и код кнопки SAVE на форме child :
private void but_DM_Save_Click(object sender, EventArgs e)
{
try
{
frmAnalytic_ID = Convert.ToInt32(tbox_DM_Analytic_ID.Text);
frmClient_ID = Convert.ToInt32(tbox_DM_Client_ID.Text);
frmProject_ID = Convert.ToInt32(tbox_DM_Project_ID.Text);
frmDescrip = tbox_DM_Descrip.Text;
Close();
}
catch(Exception ex)
{
MessageBox.Show("Error: " + ex.Message);
}
}