精华内容
下载资源
问答
  • 如果你想显示一个模态对话框,你需要先将所有者窗口禁用,然后启用模态对话框,当关闭一个模态对话框时,则要确保严格按照相反流程来进行。 为什么要按照这样流程呢? 如果你没有按照正确的顺序启用或禁用窗口...

    调用顺序很重要

    如果你想显示一个模态对话框,你需要先将所有者窗口禁用,然后启用模态对话框,当关闭一个模态对话框时,则要确保严格按照相反的流程来进行。

    为什么要按照这样的流程呢?

    如果你没有按照正确的顺序启用或禁用窗口,则窗口的输入焦点可能会被搞乱。
    如果关闭了一个模态对话框,你可能想要这样做:
    > 关闭并销毁模态对话框
    > 重新启用所有者窗口

    但是,如果你按照上面的顺序操作的话,你会发现:所有者窗口将不会像正常的那样在前景激活。它会随机地激活一些其他的窗口。可以显式的调用激活函数来解决这个问题,但是,这种做法会带来窗口的闪烁,并且窗口的Z序也乱了。

    到底发生了什么?

    当你销毁一个模态对话框时,你是在销毁一个前景激活的窗口。Windows窗口管理器需要找到下一个被激活的窗口。它首先会尝试激活模态对话框的所有者窗口,但是此时所有者窗口被禁用了。
    这个时候,Windows窗口管理器会跳过所有者窗口并寻找系统中其他未被激活的窗口。这就是导致出现上述现象的原因。

    那么,应该怎么做?

    正确的销毁模态对话框的流程如下:
    > 启用模态对话框所有者窗口
    > 销毁模态对话框

    这次,当我们的模态对话框被销毁时,Windows窗口管理器发现所有者窗口是已启用状态,所以它就会将输入焦点设置到所有者窗口并将它激活为前景窗口。

    总结

    按照上面提到的顺序,可以避免诸如界面闪烁,输入焦点混乱的问题。虽然是一个小知识点,但是也值得一试。

    最后

    Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
    本文来自:《The correct order for disabling and enabling windows》

    关闭模态对话框的正确顺序

     

    展开全文
  • 如果在方法里使用 return false;,结果用户输入空值时对话框还是会关闭。正确做法如下: 先设置自定义对话框的属性: autoClose: false ...然后当用户输入正确的值时 ...关闭对话框。 转载于:https://www.cnblo...

    如果我们在对话框给用户输入值时,当用户输入空值点击确定按钮时,应该给个提示然后让用户继续输入。

    如果在方法里使用 return false;,结果用户输入空值时对话框还是会关闭。正确做法如下:

    先设置自定义对话框的属性:

    autoClose: false

    然后当用户输入正确的值时

    $.closeModal();

    关闭对话框。

     

    转载于:https://www.cnblogs.com/GGDong/p/10995520.html

    展开全文
  • 在WPF应用程序中,我想实现以下...问题是,只要显示模态对话框,当用户关闭对话框时,主窗口就会在后台消失(假设有其他应用程序窗口打开).我使用Window.Owner和Window.Show()/ Window.ShowDialog()方式有什么不对,它...

    WPF应用程序中,我想实现以下似乎不能直接起作用的行为:

    从主窗口(Window1),用户打开非模态窗口(Window2),并且该非模态窗口可以显示模态对话框(Window3).

    问题是,只要显示模态对话框,当用户关闭对话框时,主窗口就会在后台消失(假设有其他应用程序的窗口打开).

    我使用Window.Owner和Window.Show()/ Window.ShowDialog()的方式有什么不对,它是一个bug还是它不支持的东西?

    以下简单的WPF应用程序演示了此行为:

    public partial class Window1 : Window

    {

    public Window1()

    {

    InitializeComponent();

    }

    private void Button_Click(object sender,RoutedEventArgs e)

    {

    Window2 win = new Window2();

    win.Owner = this;

    win.Show();

    }

    }

    public partial class Window2 : Window

    {

    public Window2()

    {

    InitializeComponent();

    }

    private void Button_Click(object sender,RoutedEventArgs e)

    {

    Window3 win = new Window3();

    win.Owner = this;

    win.ShowDialog();

    }

    private void btnClose_Click(object sender,RoutedEventArgs e)

    {

    this.Close();

    }

    }

    public partial class Window3 : Window

    {

    public Window3()

    {

    InitializeComponent();

    }

    private void btnClose_Click(object sender,RoutedEventArgs e)

    {

    this.Close();

    }

    }

    XAML Window1:

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    Title="Window1">

    Show non-modal window

    XAML Window2:

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    Title="Window2">

    Show modal dialog

    Close

    XAML Window3:

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    Title="Window3">

    Close

    更新:修复了代码中的复制和粘贴错误.这是.NET 3.5 SP1,如果它很重要.

    展开全文
  • Android自定义对话框提供用户输入选项 ...由于页面空间的限制,采取了通过弹出自定义对话框的形式来实现这一功能,具体实现如下: Apdex详解http://blog.csdn.net/sunny_sailor/article/details/5124031...

    Android自定义对话框提供用户输入选项

    最近在写一个关于服务器站点性能量化评分的小功能,主要是根据Apdex公式来进行评判的,需要提供一个让用户自己设置最优响应时间门槛的值的选项。由于页面空间的限制,采取了通过弹出自定义对话框的形式来实现这一功能,具体实现如下:

    Apdex详解http://blog.csdn.net/sunny_sailor/article/details/51240313

    • 自定义布局文件
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:orientation="vertical"
                  android:paddingLeft="16dp"
                  android:paddingRight="16dp"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent">
                  <LinearLayout
                      android:layout_width="match_parent"
                      android:layout_height="wrap_content"
                      android:orientation="horizontal">
                      <TextView
                          android:id="@+id/compare_edit_last_set"
                          android:layout_width="0dp"
                          android:layout_height="wrap_content"
                          android:layout_weight="1"
                          android:layout_marginLeft="8dp"
                          android:layout_marginTop="8dp"
                          android:text="@string/compare_edit_default"/>
                  </LinearLayout>
                  <LinearLayout
                      android:layout_marginLeft="4dp"
                      android:layout_width="match_parent"
                      android:layout_height="wrap_content">
                      <EditText
                          android:id="@+id/compare_edit_time"
                          android:layout_width="0dp"
                          android:layout_height="wrap_content"
                          android:layout_weight="5"
                          android:hint="@string/compare_edit_set"
                          android:imeOptions="actionDone"
                          android:maxHeight="48dp"
                          android:minLines="1"/>
                      <TextView
                          android:layout_width="0dp"
                          android:layout_height="wrap_content"
                          android:textSize="18sp"
                          android:layout_alignBaseline="@id/compare_edit_time"
                          android:layout_marginRight="16dp"
                          android:layout_weight="1"
                          android:maxHeight="48dp"
                          android:text="@string/compare_edit_set_unit">
                      </TextView>
                  </LinearLayout>
    </LinearLayout>
    • 代码文件
     /**
         * 提供设置量化评分的T值对话框
         */
        private void settingDialog(final Context context)
        {
            final SharedPreferences.Editor editor = mPreferences.edit();
            LayoutInflater layoutInflater = LayoutInflater.from(context);
            //获取自定义的视图
            View editView = layoutInflater.inflate(R.layout.dialog_compare_edit,null);
    
            //省略部分代码 
    
            AlertDialog.Builder builder = new AlertDialog.Builder(context);
            builder.setTitle(getString(R.string.compare_edit_title));
            //设置视图
            builder.setView(editView);
            //获取输入的值
            final EditText eTime = (EditText)editView.findViewById(R.id.compare_edit_time);
            builder.setPositiveButton(getString(R.string.button_ok), new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    if(("").equals(eTime.getText().toString()))
                    {
                        Toast.makeText(context,getString(R.string.input_reminder),Toast.LENGTH_SHORT)
                                .show();
                        changeShowing(false,dialog);
                    }
                    else{
                        int time = Integer.valueOf(eTime.getText().toString());
                        if(time <1 || time > 100000)
                        {
                            Toast.makeText(context,getString(R.string.input_reminder),Toast.LENGTH_SHORT)
                                    .show();
                            changeShowing(false,dialog);
                        }else{
    
                            //还原PositiveButton的关闭效果
                            changeShowing(true,dialog);
                        }
                    }
                }
            }).setNegativeButton(getString(R.string.button_cancel), new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    //还原NegativeButton的关闭效果
                    changeShowing(true,dialog);
                }
            }).create().show();
        }
      /**
         * mShowing是Dialog类的一个成员变量,在setPositiveButton中改变之后会影响setNegativeButton,
         * 如点击“取消”按钮将不能关闭对话框,解决办法在“取消”的onClick事件中再改变mShowing的值
         * @param isShow
         * @param dialog
         */
        private void changeShowing(boolean isShow,DialogInterface dialog){
        //通过反射机制得到变量并改变变量的值
            try {
                Field field = dialog.getClass().getSuperclass().getDeclaredField("mShowing");
                field.setAccessible(true);
                field.set(dialog, isShow);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    上面代码中的changeShowing方法仅仅适用于android.app.AlertDialog,如果使用的是v7包下的AlertDialog,则可以使用如下代码代替来达到输入数据不正确或为空时,点击按钮对话框不关闭的效果。

     /**
         * 提供设置量化评分的T值对话框
         */
        private void settingDialog(final Context context)
        {
            LayoutInflater layoutInflater = LayoutInflater.from(context);
            View editView = layoutInflater.inflate(R.layout.dialog_compare_edit,null);
            TextView lastSetTimeText = (TextView)editView.findViewById(R.id.compare_edit_last_set);
            AlertDialog.Builder builder = new AlertDialog.Builder(context);
            builder.setTitle(getString(R.string.compare_edit_title));
            builder.setView(editView);
            //获取输入的值
            final EditText eTime = (EditText)editView.findViewById(R.id.compare_edit_time);
            builder.setPositiveButton(getString(R.string.button_ok),null);//只设置文本,而不添加监听事件
            builder.setNegativeButton(getString(R.string.button_cancel),null);//只设置文本,而不添加监听事件
            final AlertDialog alertDialog = builder.create();
            alertDialog.show();
            alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(("").equals(eTime.getText().toString()))
                    {
                        Toast.makeText(context,getString(R.string.input_reminder),Toast.LENGTH_SHORT)
                                .show();
                    }
                    else{
                            //do something
                            //关闭对话框
                            alertDialog.dismiss();
                        }
                    }
                }
            });
         }
    展开全文
  • 最近做一个项目,excel导入数据,有一个同事使用模态对话框,上传并返回提示,如果正确上传文件,给提示,关闭模态对话框,刷新父窗口列表。   1.打开一个模态对话框: function openWindow(innerWidth,...
  • MFC 打开新的对话框

    2018-11-08 18:05:57
    MFC 打开新的对话框这是在学习过程中笔记,所有不一定是完全正确的,有待以后慢慢修正与补充。文中借鉴了多篇文章加上自己总结。(1) .h文件增加对话框类头文件;(2) .cpp文件定义类对象。1、打开模态...
  • [C#]在线程运行过程中关闭对话框

    千次阅读 2008-11-28 15:17:00
    在系统运行中,如果有多个线程正在运行,并且不影响主线程的运行情况下,如果需要打开一个Dialog,设置一些参数,保存并关闭,但是,会发现,在主窗体中的线程如果没有结束前是无法关闭弹出的对话框的.下面是错误和正确的两...
  • 首先子组件绑定打开和关闭对话框的布尔值,然后通过父组件传送这个布尔值实现对子组件对话框的控制. 表面看着好像逻辑没问题 但是尤其对于我这种初级程序员来说.理解和经验还没那么丰富,很容易掉进坑里.好了.先分享...
  • 本地连接点修复后,对话框去不掉,点取消根本没反应 。。。。。     以前也经常遇到这种情况,但没去深究,今天再次遇到,不得不解决一下,看到很多网络上歪门邪道,说是什么sp2bug都有。。。。 其实...
  • 本地连接点修复后,对话框去不掉,点取消根本没反应 。。。。...其实真正原因是修复方法不正确。winXP sp2在任务栏那里直接右击连接进行修复时候会出现关不掉情况,它又不会做为独立一个...
  • 设置密码界面有两个dialog,在第一个dialog需要判断密码是否正确,然后在进行下一步,但是每次在点击确定按钮或者取消按钮,dialog都会直接关闭,如果你写dismiss,或者return等等都是没有用,所以今天我们只需要...
  • 当账号密码正确已经可以登入。 但是当输错密码时怎么让对话框继续存在从而让用户重复输入,而不是关闭呢?
  • 文章目录需求描述问题分析...正确的状态应该是只有在点击关闭按钮,或者是Dialog内其他操作性按钮才能使得Dialog状态变为关闭。 问题分析 之所以会产生这种问题,是因为elementUi在对Dialog组件做初始化时...
  • 正确的状态应该是只有在点击关闭按钮,或者是Dialog内其他操作性按钮才能使得Dialog状态变为关闭。 弹窗关闭后还显示一层遮罩层,设置append-to-body即可 问题分析 之所以会产生这种问题,是因为elementUi...
  • 然后关闭文件,登录时,将读取文件中内容,并判断用户输入是否和pwd.ini 文件中存储用户名和密码一致,从而判断用户是否可以正确登录。 项目源代码: 部分代码: 程序运行截图: ...
  • 注意:当props.when正确时,离开站点导航,重新加载或关闭选项卡/窗口也将提示导航确认。 但是,出于安全方面考虑,浏览器通常会自己处理此导航UX,从而导致出现普通警报框。 同样,许多浏览器要求用户在确认...
  • mfc关闭模态dialog的正确方式

    万次阅读 2015-03-20 10:38:27
    正常的用户触发的OnOK 、OnCancel消息都是通过调用函数EndDialog去关闭模态对话框的,EndDialog函数并不立即清除对话框。而是设置一个标志,并且允许对话框应用程序把控制权返回系统。系统在试图从应用程序队列检索...
  • 如果我们在点修复按钮时候,确实网络没有连通,有时会提示无法修复,并且界面上只有一个取消按钮,而无论怎么点这个取消按钮,窗口就是关闭不了,而且进程里也没有可结束来解决这个问题进程。那么咋办呢? ...
  • 之前在清洁厨房时候我发现厨房燃气表下面有个红色小按钮,上面...正确的到底是那种?在请教了专业人之后,我才了解,原来整个红色小按钮是燃气自闭阀,它作用很重要,主要是在燃气泄漏情况下阻止燃气输...
  • 文件读写:通过读写文件实现登录对话框,执行时将创建 MySaveFile ... 然后关闭文件,登录时,将读取文件中内容,并判断用户输入是否和pwd.ini 文件中存储用户名和密码一致,从而判断用户是否可以正确登录。
  • 在Android系统中,默认点击AlertDialog中按键都会关闭该AlertDialog,但有些情况下我们并不希望使对话框关闭,或者希望使对话框在自己需要时候再关闭。 例如我现在做一个项目,通过...不关闭对话框: ...
  • 第一步:首先在程序主入口处,也就是main函数下,键入如下代码 ... //造一个登录窗口对象 if (log.ShowDialog() == DialogResult.OK) //判断登录对话框返回结果是确定还是取消,如果是ok,则进入主窗体 { ...
  • 今天调试程序时候发现一个问题,用编译器运行调试代码程序运行没问题,单独运行Debug或Release里面exe文件时会弹出下面这个对话框。一开始是以为缺少某个dll文件,一直在查找那个那个丢失文件,试过很多方法,...
  • 今天在用DWZ框架做添加功能时,发现在对话框保存成功后,后端返回正确的json格式,但对话框不能自动关闭窗口,而且保存后自动跳回主页,没有停留在当前用户列表页面,具体错误过程重现如下: 1.打开用户列表 2...
  • 在program.cs中 Login login=new Login();...if( login.ShowDialog()==DialogResult.Ok)//注意这里要显示模态对话框 { Application.Run(new 主界面()); } 然后在登录登录按钮事件中加上 ...
  • 模态与非模态对话框: 模态:未关闭之前不能用同应用其他窗口交互(应该是不能再打开其他窗口),比如新建项目时窗口 非模态:可以与它交互也可以与同程序其他窗口交互使一个对话框成为模态对话框:调用它...
  • 用WTL编写程序,编译成release后,在win7上关闭后,弹出这个对话框 处理方法: 将这个xml文件命名成 xxx.exe.manifest,保存到指定目录下 右键工程->properties-->Configuration Properties...

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 269
精华内容 107
关键字:

关闭对话框的正确