我的意思是,程序会自动调用this.Close(),但是Close事件的处理函数中有一句ShowDialogBox会跳出一个模式对话框 , 我需要的是屏蔽掉些对话框

解决方案 »

  1.   

    我就是想在手动关掉时提醒,在自动关闭时不提醒。同时我不想用一个flag来判断属于手动还是自动。
    我的想法是能在Form中捕捉到,WM_CancelMode事件
      

  2.   


    不妨设置一个全局变量 bool flag=false;
    在代码调用this.Close()来关闭界面前,将flag置成true在界面关闭事件中加上对flag的判断,由其来决定要不要弹出提醒框。
      

  3.   

    注释掉关闭事件的ShowDialogBox(this)方法。重新写一个窗体关闭方法,类似于下面private void closeWindow()
    {
         ShowDialogBox(this);
         this.close();
    }在需要弹出模态对话框的地方改来调用此方法即可。
      

  4.   

    我就是想在手动关掉时提醒,在自动关闭时不提醒。同时我不想用一个flag来判断属于手动还是自动。 
    我的想法是能在Form中捕捉到,WM_CancelMode事件
      

  5.   

    .net 2.0中
    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    FormClosingEventArgs有个 CloseReason属性,功能是获取一个值,该值指示关闭窗体的原因。
    CloseReason 枚举 
    成员名称 说明 
     ApplicationExitCall Application 类的 Exit 方法被调用。   
     FormOwnerClosing 所有者窗体正在关闭。  
     MdiFormClosing 此多文档界面 (MDI) 窗体的父窗体正在关闭。  
     None 关闭原因未定义或者无法确定。  
     TaskManagerClosing Microsoft Windows 任务管理器正在关闭应用程序。  
     UserClosing 用户正在通过用户界面 (UI) 关闭该窗体,例如通过单击窗体窗口上的“关闭”按钮,通过选择窗口控制菜单上的“关闭”按钮,或者通过按 Alt+F4 等方式关闭。  
     WindowsShutDown 操作系统正在关闭所有应用程序以便准备关机。  .net 2.0之前的版本,事件FormClosing换成Closing事件,自己查msdn。
      

  6.   

    在FormClosing事件中判断CloseReason决定是不是弹出你的模式对话框。
      

  7.   

    这个我知道,但是不想通过FLAG来判断,因为我的程序中有多个类似情况,我不可能手动全部修改。我希望在Message Queue中把发给FORM的来通知弹出对话框的mes给过滤掉。请问在些基础上怎么做?
      

  8.   

    什么地方用了flag?        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
            {
                if (e.CloseReason = CloseReason.UserClosing)  //用户控制下的关闭操作
                {
                    //button2.Text = e.CloseReason.ToString();
                    bool b;
                    b = ShowDialogBox(this); //弹出对话框
                    if (b)
                        e.Cancel = false;  //用户选择了确认关闭,允许关闭
                    else
                        e.Cancel = true;   //用户选择了不关闭,不允许关闭
                }
                else
                    e.Cancel = false;  //其他由系统发出的关闭指令,不给用户确认不弹出对话框,直接关闭
            }
      

  9.   


    if (e.CloseReason = CloseReason.UserClosing)  //用户控制下的关闭操作 
    我说过,我的程序中有许多类似的地方,况且,一个关闭事件,可能有多个CallBack,某些CallBack中也不可以用上边的代码判断,所以我没法用这种方法。
      

  10.   


    请问发给应用程序(就是你说的FORM)的消息中显示模式对话框的消息什么样子的,我怎么没听说过这种消息,
    工作原理就是消息队列中放入close消息,当然消息的参数中包含关闭的原因就是系统的CloseReason的那些。然后在关闭的时候检查有没有formclosing事件,有就执行,执行的时候就是你的代码出现了showdialogbox,打开了模式对话框,
    看了上边的过程,我就不明白你说的过滤打开对话框消息怎么做(消息根本不存在,就是close消息引发的)。
    你如果能照你的说的方法解决了问题,最好贴出来,我也学学,大家共享下怎么能这么牛的。
      

  11.   

    其它你就想判断关闭程序的是人为的还是系统的?那你可以
    1. 在窗口那屏蔽右上角的关闭按钮,然后你画一个关闭按钮出来,让用户点击,这样你就可以根据一个标志位进行区分。
     修改的工作量:
        1. 在窗口属性那更改一个属性
        2. 在工具拦那拖一个按钮,然后在该Click()方法那给一个全局什么的标志位更改一个值
        3. 在窗口的Closing事件里,把弹出你的那个对话框使用这个标志位做判断。  以上的工作量都很快吧?2. 根据具体应用的需求去做。