我的一个实例,看一下吧
我用我的事例改的绝对可以运行!!!!!
private void EXIT_Click(object sender, EventArgs e)
         {
             DialogResult a = MessageBox.Show("您还没有保存数据,是否要保存?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk);
             if (a != DialogResult.Yes)
             {
                 this.Validate();
                 this.userInfoBindingSource.EndEdit();
                 this.userInfoTableAdapter.Update(this.gameCardSaleDataSet2.UserInfo);
                 this.Close();       /////////////////////为何不能关闭窗体?????                   
             }
             else
             {
                 this.Close();
             }
         }  
------解决方案--------------------写反了。
等于yes的时候保存。
------解决方案--------------------问题出在
this.userInfoBindingSource.EndEdit();
 this.userInfoTableAdapter.Update(this.gameCardSaleDataSet2.UserInfo);
这个上面,你把这2句注释了,能正确关闭的
------解决方案--------------------this.ShowDialog();
           Application.Exit();
------解决方案--------------------表示 没有看出来有什么不对劲的、、正如二楼所说 还有
你的代码可以精简一下
if (a != DialogResult.Yes)
  {
  this.Validate();
  this.userInfoBindingSource.EndEdit();
  this.userInfoTableAdapter.Update(this.gameCardSaleDataSet2.UserInfo);
  this.Close(); /////////////////////为何不能关闭窗体?????   
 }
  else
  {
  this.Close();
  }
  如下:
if (a != DialogResult.Yes)
  {
  this.Validate();
  this.userInfoBindingSource.EndEdit();
  this.userInfoTableAdapter.Update(this.gameCardSaleDataSet2.UserInfo);
 }
  this.Close();
反正什么操作你都要关闭窗体的、、只是判断关闭前 执行操作否