1

みんな。私はそのような問題に遭遇しました。私のアプリでは、ShowDialog メソッドを使用して、メイン フォームから 2 番目のフォームを表示します。このフォームには、DB に接続するためのテキスト ボックスと [接続] ボタンがあります。ユーザーが X をクリックすると、アプリは終了します。しかし、ユーザーが「接続」をクリックすると、DB に接続し、2 番目のフォームも閉じます。終了イベントをキャッチするには、FormClosing メソッドを使用します。ここで、アプリを閉じようとしているかどうかをアプリが尋ね、そうであれば終了します。問題は、ボタンをクリックすると FormClosing イベントが発生し、終了するかどうか尋ねられることです。それを避ける方法は?送信者を使用しようとしていますが、機能しません。

これが私のコードです:

private void Connect_Click(object sender, EventArgs e)
{
    try
    {
         orcl.connect(userID.Text, Password.Text, comboTNS.Text);

         if (orcl.ifHasRows("select dbclass from setupdbversion where dbclass='SECURITY' and rownum=1"))
         {//my stuff
             this.Close();
         }

     }
     catch (Exception ex)
     {
          MessageBox.Show(ex.Message.ToString());
     };
}


private void SecConnForm_FormClosing_1(object sender, FormClosingEventArgs e)
{   
     MessageBox.Show(sender.ToString());
     if (e.CloseReason == CloseReason.UserClosing)
     {
          MessageBox.Show(sender.ToString());
          if (string.Equals((sender as Form).Name, @"SecConnForm")) //it doesn't work as in any cases the sender is my form, not a button (when i click on button of course)
          {
               if (MessageBox.Show(this, "Really exit?", "Closing...",
                    MessageBoxButtons.OKCancel, MessageBoxIcon.Question)
                       == DialogResult.Cancel) 
                   e.Cancel = true;
               else
                   Application.Exit();

          }
          else
          {
               //other stuff goes..
          }
     }
}
4

2 に答える 2

2

コードまたはユーザーのクリックによってフォームが閉じられるたびに、フォームを閉じるイベントが発生します。

必要なのはこれに似たものです。

private boolean bFormCloseFlag = false;

private void Connect_Click(object sender, EventArgs e)
{
    try
    {
         orcl.connect(userID.Text, Password.Text, comboTNS.Text);

         if (orcl.ifHasRows("select dbclass from setupdbversion where dbclass='SECURITY' and rownum=1"))
         {//my stuff
             bFormCloseFlag = true;
             this.Close();
         }

     }
     catch (Exception ex)
     {
          MessageBox.Show(ex.Message.ToString());
     };
}


private void SecConnForm_FormClosing_1(object sender, FormClosingEventArgs e)
{   
     if (bFormCloseFlag = false)
     {
        MessageBox.Show(sender.ToString());
        if (e.CloseReason == CloseReason.UserClosing)
        {
          MessageBox.Show(sender.ToString());
          if (string.Equals((sender as Form).Name, @"SecConnForm")) //it doesn't work as in any cases the      sender is my form, not a button (when i click on button of course)
          {
               if (MessageBox.Show(this, "Really exit?", "Closing...",
                    MessageBoxButtons.OKCancel, MessageBoxIcon.Question)
                       == DialogResult.Cancel) 
                   e.Cancel = true;
               else
                   Application.Exit();

          }
          else
          {
               //other stuff goes..
          }
       }
     }
}

このフラグは、「X」ボタンのクリックによってフォームが閉じられているか、コードによって閉じられているかを単純にチェックします。

于 2013-03-15T14:07:13.530 に答える
0

this.Close() は、"UserClosing" の終了タイプをトリガーします おそらく this.close() の代わりにダイアログを非表示にしますか?

于 2013-03-15T13:49:23.107 に答える