मैं केवल एक सप्ताह के लिए सी # का उपयोग कर रहा हूं, और मैं सामान्य रूप से प्रोग्रामिंग के लिए नया हूं।

मेरे दो रूप हैं। पैरेंट फॉर्म पर, मेरे पास दो बटन हैं - जोड़ें और संपादित करें। ये बटन एक चाइल्ड फ़ॉर्म खोलते हैं जिसमें दो बटन भी होते हैं - सहेजें और रद्द करें

जब रद्द किया जाता है तो बच्चे फॉर्म पर क्लिक किया जाता है, मेरे पास कोड में एक संकेतक चर सेटअप होता है, जो सत्य के रूप में फ़्लैग करता है:

//Indicator on child form; setup in properties.
public bool frmCloseInd { get; set; }

क्लिक इवेंट पर सही पर सेट करने के लिए रद्द करें बटन पर संकेतक सेट किया गया है:

//Cancel Event on child form
private void but_DM_Cancel_Click(object sender, EventArgs e)
{
      frmCloseInd = true;
      Close();
}

FrmCloseInd मान पैरेंट फ़ॉर्म में वापस भेज दिया जाता है। कौन सा कोड चलाया जाता है यह निर्धारित करने के लिए एक IF स्टेटमेंट चलाया जाता है। समस्या - जब एक्स क्लिक किया जाता है, तब भी यह वही कोड चलाता है जैसे इसे सहेजा जा रहा था। जब X पर क्लिक किया जाता है, तो मैं frmCloseInd को सत्य कैसे पास कर सकता हूं?

मैंने एक करीबी घटना करने की कोशिश की, लेकिन यह सहेजें और रद्द बटन में बंद() पर उठाता है।

यहां पैरेंट फ़ॉर्म पर जोड़ें बटन क्लिक ईवेंट दिया गया है:

        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);
                    }
                }
            }
        }

और बच्चे फॉर्म पर सेव बटन के लिए कोड:

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);
            }
        }
1
Lozik 17 अप्रैल 2020, 18:32

1 उत्तर

सबसे बढ़िया उत्तर

अपनी समस्या को ठीक करने का सबसे आसान तरीका frmCloseInd प्रॉपर्टी का प्रारंभिक मान true पर सेट करना है:

// Default value TRUE for this property indicates that by default we mean
// that the form will be closed using Cancel or X button. If user clicks
// Save button then we set this property to FALSE.
public bool frmCloseInd { get; set; } = true;

साथ ही हमें Save और Close ईवेंट हैंडलर में इस प्रॉपर्टी के लिए उचित मान सेट करना चाहिए (यदि आपके पास FormClose इवेंट हैंडलर है तो आपको इसमें प्रॉपर्टी frmCloseInd का मूल्य नहीं बदलना चाहिए। ):

private void but_DM_Cancel_Click(object sender, EventArgs e)
{
    frmCloseInd = true;
    Close();
}

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;

        frmCloseInd = false;
        Close();
    }
    catch(Exception ex)
    {
        MessageBox.Show("Error: " + ex.Message);
    }
}

एक साइड नोट के रूप में मैं यह बताना चाहूंगा कि WinForms में ऐसी कार्यक्षमता को लागू करने के लिए Form.DialogResult

1
Iliar Turdushev 20 अप्रैल 2020, 05:22