none
自定义IE关闭弹出的对话框 RRS feed

  • 问题

  • 我想实现像IE9一样的功能:当有多个选项卡时,如果点击关闭按钮则会弹出:

    我也使用MessageBox试过,可是对于按钮MessageBox只有几个按钮,如确定、是,而好像不能自定义按钮的文本,

    所以我该怎么实现这个功能


    2012年8月4日 10:18

答案

  • 自己定义一个WinForm,拖拽上你需要的按钮画出你需要的效果。然后为这个WinForm定义一个事件(比如叫做“ClosingEvent”),同时定义一个方法叫做OnClosing,在这个方法内部触发ClosingEvent事件,传入Button的Name啥的。在主窗体中引用这个WinForm并且绑定ClosingEvent事件。这样当主窗体Form_Closing事件引发显示自定义WinForm的时候,点击上面某个按钮,那么都会调用OnClosing并触发事件,根据这个事件中的传入的参数控制当前主窗体是否关闭还是其它操作。

    谢谢!


    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年8月4日 12:04
    版主

全部回复

  • 自己定义一个WinForm,拖拽上你需要的按钮画出你需要的效果。然后为这个WinForm定义一个事件(比如叫做“ClosingEvent”),同时定义一个方法叫做OnClosing,在这个方法内部触发ClosingEvent事件,传入Button的Name啥的。在主窗体中引用这个WinForm并且绑定ClosingEvent事件。这样当主窗体Form_Closing事件引发显示自定义WinForm的时候,点击上面某个按钮,那么都会调用OnClosing并触发事件,根据这个事件中的传入的参数控制当前主窗体是否关闭还是其它操作。

    谢谢!


    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年8月4日 12:04
    版主
  • 能具体说明一下吗?最好结合代码。
    2012年8月4日 12:27
  • 能具体说明一下吗?最好结合代码。

    我做了非常简单的东西,给你演示重要的两窗体交互过程;具体代码请自己写。谢谢!:

    1)创建两个窗体MainForm和ConfirmForm,其中关闭确认窗体如下示例,把FormBorderStyle设置为FixedToolWindow:

    2)主窗体代码如下:

    public partial class MainForm : Form
        {
            /// <summary>
            /// 关闭前确认
            /// </summary>
            private ConfirmWindow cw = null;
     
            public MainForm()
            {
                InitializeComponent();
            }
     
            void cw_CloseConfirming(ConfirmWindow.ConfirmState obj)
            {
                if (obj == ConfirmWindow.ConfirmState.CloseAllWindow)
                {
                    //关闭当前所有的Tab
                }
                else
                {
                    //只关闭当前Tab
                }
                cw.Close(); //关闭自身
            }
            private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
            {
                e.Cancel = true;
                cw = new ConfirmWindow();
                cw.CloseConfirming+=new Action<ConfirmWindow.ConfirmState>(cw_CloseConfirming);
                cw.ShowDialog();
            }    
        }

    3)关闭窗体代码如下:

    public partial class ConfirmWindow : Form
        {
            /// <summary>
            /// 确认点击哪个按钮
            /// </summary>
            public enum ConfirmState
            {
                CloseCurrentWindow,
                CloseAllWindow
            }
            /// <summary>
            /// 关闭前询问
            /// </summary>
            public event Action<ConfirmState> CloseConfirming;
     
            public ConfirmWindow()
            {
                InitializeComponent();
            }
      
            private void button1_Click(object sender, EventArgs e)
            {
                //触发事件
                if (CloseConfirming != null)
                {
                    CloseConfirming(ConfirmState.CloseCurrentWindow);
                }
            }
     
            private void button2_Click(object sender, EventArgs e)
            {
                //触发事件
                if (CloseConfirming != null)
                {
                    CloseConfirming(ConfirmState.CloseAllWindow);
                }
            }
        }

    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处


    2012年8月5日 2:27
    版主
  • 好像有错,关闭所有窗口按钮无效
    2012年8月5日 6:47
  • 好像有错,关闭所有窗口按钮无效

    “关闭所有窗口”中代码你应该设法把Tab全部关闭。我这里没有写代码啊。顺便你应该在增加一个按钮——退出。代码这样写:

    Application.Exit();


    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年8月5日 9:06
    版主