精华内容
下载资源
问答
  • 对话框

    2020-10-12 11:34:26
    对话框分为模态对话框、提示对话框、文本对话框、打开文件对话框等多种类型。在wxpthon中对话框都继承自wx....#定义窗口类MyFrame,包含aboutMenu子菜单并单击创建MyDialog对话框 class MyFrame(wx.Frame): def __i

    对话框分为模态对话框、提示对话框、文本对话框、打开文件对话框等多种类型。在wxpthon中对话框都继承自wx.Dialog类。下面展示一下这些对话框。
    一、对话框的创建和使用与Frame相似,不同的对话框表示一次信息交换的活动。当完成交换后,单击对话框的按钮将关闭该对话框,对话框只是应用程序生命周期的一部分。

    #对话框的创建
    import wx
    
    #定义窗口类MyFrame,包含aboutMenu子菜单并单击创建MyDialog对话框
    class MyFrame(wx.Frame):
        def __init__(self):
            wx.Frame.__init__(self,None,-1,u'自定义对话框',size=(300,200))
            MenuHelp = wx.Menu()
            aboutMenu = MenuHelp.Append(-1,u'关于(&A)')
            menuBar = wx.MenuBar()
            menuBar.Append(MenuHelp,u'帮助(&H)')
            self.Bind(wx.EVT_TOOL,self.ShowAboutDlg,aboutMenu)
            self.SetMenuBar(menuBar)
    
    #定义showaboutdlg(),用该函数创建显示aboutmenu菜单
        def ShowAboutDlg(self,evt):
            pos = self.GetPosition()
    
    #创建对话框dialog,并显示MyFrame的相对位置
            dialog = MyDialog(self,-1,u'关于')
            dialog.SetPosition((pos[0] + 100,pos[1] + 60))
    
    #创建了MyDialog对话框类,继承自wx.Dialog,创建 确定 按钮打开对话框
    class MyDialog(wx.Dialog):
        def __init__(self,parent,id,title):
            wx.Dialog.__init__(self,parent,id,title,size=(100,100))
            self.panel = wx.Panel(self)
            self.OkBtn = wx.Button(self,10,u'确定',pos=(10,20),size=(80,30))
            self.Bind(wx.EVT_BUTTON,self.CloseDlg,self.OkBtn)
            self.Show() #调用show()显示对话框
    
        def CloseDlg(self,evt):
            self.Close()
    
    if __name__=='__main__':
        app = wx.PySimpleApp()
        MyFrame().Show()
        app.MainLoop()
    
    #由于模态对话框的约束性,因此模态对话框通常作为获取数据的窗口。
    #只有从模态对话框中返回数据后,才能关闭对话框
    

    二、提示对话框有助于用户体验的完善,例如,退出应用程序时显示退出提示,删除数据时显示删除提示。

    #提示对话框:通常用于帮助用户进行交互式操作
    import wx
    class MyFrame(wx.Frame):
        def __init__(self):
            wx.Frame.__init__(self,None,-1,u'对话框',size=(300,200))
            button = wx.Button(self,wx.ID_OK,u'退出',pos=(10,10))
            button.SetDefault()
            self.Bind(wx.EVT_BUTTON,self.OnClick,button)
        #创建对话框,根据wx.YES_NO,生成“是”、“否”按钮
        def OnClick(self,evt):
            #使用MessageDialog()类创建选择对话框
            dlg = wx.MessageDialog(None,u'是否退出?',u'退出',wx.YES_NO|wx.ICON_QUESTION)
            #判断用户选择的返回值
            if(dlg.ShowModal() == wx.ID_YES):
                frame.Close()   #关闭主程序
            #调用释放对话框对象
            dlg.Destroy()
    
    if __name__=='__main__':
        app = wx.PySimpleApp()
        frame = MyFrame()
        frame.Show()
        app.MainLoop()
    

    三、文本输入对话框:用于返回输入字符串的值,通常由一个静态文本框、一个输入文本框和OK、Cancel按钮组成,可由wx.TextEnTryDialog类创建。

    import wx
    class MyFrame(wx.Frame):
        def __init__(self):
            wx.Frame.__init__(self,None,-1,"TextEntryDialog",size=(300,200))
            panel = wx.Panel(self,-1)
    
            #创建TextCtrl实例textCtrl,并用wx.TE_PROCESS_ENTER处理回车事件
            self.textCtrl = wx.TextCtrl(panel,-1," ",pos=(10,10),style=wx.TE_PROCESS_ENTER)
            self.textCtrl.Bind(wx.EVT_TEXT_ENTER,self.OnClick,self.textCtrl)
    
        def OnClick(self,evt):
            #创建文本对话框,包含“ok”和“cancel”按钮
            self.dialog = wx.TextEntryDialog(None,u'输入文本',u'文本对话框',"",style=wx.OK|wx.CANCEL)
            #当按下OK按钮时
            if self.dialog.ShowModal() == wx.ID_OK:
                #获取文本输入内容,调用SetLabel把文本填入textCtrl控件的文本框
                self.textCtrl.SetLabel(self.dialog.GetValue())
    if __name__=='__main__':
        app = wx.PySimpleApp()
        MyFrame().Show()
        app.MainLoop()
    #创建1个TextCtrl控件,当按下回车键后,将显示TextEntryDialog对话框
    #用户输入文本后,单击“OK”按钮将把输入的值返回给TextCtrl控件
    

    四、特殊对话框:包括打开文本对话框、字体对话框、颜色选择对话框。打开文件对话框由wx.FileDialog类创建。

    #演示“打开”文件对话框的创建和使用方法
    import wx
    import os
    
    #创建打开文件对话框,显示当前目录中的文件,并可对类型进行过滤
    def ShowFileDialog():
    #文件类型的下拉列表提供“py”为后缀的文件和所有文件两种类型
        filterFile = "Python source(*.py)|*.py|All files(*.*)|*.*"  #过滤文件
        #对话框dialog。os.getcwd()获取当前文件所在的路径
        dialog = wx.FileDialog(None,u'选择文件',os.getcwd(),"",filterFile,wx.ART_FILE_OPEN)
        #以模式对话框的形式显示dialog对象
        dialog.ShowModal()
        dialog.Destroy()
    
    if __name__=='__main__':
        app = wx.PySimpleApp()
        ShowFileDialog()
        app.MainLoop()
    

    五、窗口与对话框的交互,对话框中的组件支持验证能力,而窗口不支持组件内容的验证。wx.PyValidator类的TransferWindow()和TransfromWindow()这两个方法实现窗口和对话框的交互。前者方法用于对话框打开时执行,后者方法用于对话框关闭的调用,可以实现窗口与对话框的数据交换。

    #创建Frame窗口,该窗口用于计算两个数字的和
    import wx
    class MyFrame(wx.Frame):
        def __init__(self):
            wx.Frame.__init__(self,None,-1,u"对话框的验证",size=(300,200))
            panel = wx.Panel(self,-1)
            sizer = wx.BoxSizer(wx.HORIZONTAL)
            self.addTextCtrl = wx.TextCtrl(panel,-1,"",pos=(10,10))
            addStaticText = wx.StaticText(panel,-1,"+")
            self.addTextCtrl2 = wx.TextCtrl(panel,-1,"")
            btn = wx.Button(panel,-1,u'计算')
            btn.Bind(wx.EVT_BUTTON,self.OnClick,btn)
            sizer.Add(self.addTextCtrl)
            sizer.Add(addStaticText)
            sizer.Add(self.addTextCtrl2)
            sizer.Add(btn)
            panel.SetSizer(sizer)
            panel.Fit()
        def OnClick(self,event):
        #定义字典data,把两个文本框中的数字存放到字典中
            data = {0:self.addTextCtrl.GetValue(),1:self.addTextCtrl2.GetValue()}
            dlg = MyDialog(data)
            dlg.ShowModal()
            dlg.Destroy()
    

    演示设计执行计算的对话框类,该对话框接收窗口定义的字典数据,然后进行计算。

    #演示设计执行计算的对话框类
    class MyDialog(wx.Dialog):
        def __init__(self,data):
            wx.Dialog.__init__(self,None,-1,u'验证器')
            addStaticText = wx.StaticText(self,-1,u'数字1:')
            addStaticText2 = wx.StaticText(self,-1,u'数字2:')
            self.addTextCtrl = wx.TextCtrl(self,validator = DataValidator(data,0))
            self.addTextCtrl2 = wx.TextCtrl(self,validator = DataValidator(data,1))
            btn = wx.Button(self,wx.ID_OK,u'确定')
            btn.Bind(wx.EVT_BUTTON,self.OnClick,btn)
            btn.SetDefault()
            sizer = wx.BoxSizer(wx.VERTICAL)
            gridSizer = wx.FlexGridSizer(2,2,5,5)
            gridSizer.Add(addStaticText,0,wx.ALIGN_LEFT)
            gridSizer.Add(self.addTextCtrl,0,wx.EXPAND)
            gridSizer.Add(addStaticText2,0,wx.ALIGN_LEFT)
            gridSizer.Add(self.addTextCtrl2,0,wx.EXPAND)
            sizer.Add(gridSizer,0,wx.EXPAND|wx.ALL,5)
            sizer.Add(btn,0,5)
            self.SetSize(sizer)
            sizer.Fit(self)
        def OnClick(self,evt):
            result = float(self.addTextCtrl.GetValue()) + float(self.addTextCtrl2.GetValue())
            wx.MessageBox(str(result),u'结果')
            self.Close()
    

    用DataValidator类实现创建数据的接收。

    class DataValidator(wx.PyValidator):
    #定义构造函数,用于接收data字典和相应的索引
        def __init__(self,data,key):
            wx.PyValidator.__init__(self)
            self.data = data
            self.key = key
         #覆盖close()方法,返回验证器的拷贝
        def Clone(self):    #close()方法必须实现
            return DataValidator(self.data,self.key)
        def Validata(self,w):   #验证数据
            return True
        def TransferToWindow(self): #对话框打开时调用
            textCtrl = self.GetWindow()	#获得当前组件
            #通过索引key查找当前组件的值,即把窗口文本框的内容传递给对话框的文本框
            textCtrl.SetValue(self.data.get(self.key,""))
            return True
        def TransferFromWindow(self): #对话框关闭时调用
            return True
    

    在DataValidator类的validata()方法实现对组件数据的验证,有兴趣者可以自己编写一些相关的验证规则来丰富对话框的验证功能。

    (好久没来写笔记了,希望大家勤快点哦)

    展开全文
  • 【小编“百花争妍”】东奥会计在线高级会计师频道提供:2017年高级职称计算机预习:对话框组成和操作。对话框组成和操作对话框在WindowsXP中占有重要地位,它是用户与计算机系统之间进行信息交流的桥梁。对话框...

    【小编“百花争妍”】东奥会计在线高级会计师频道提供:2017年高级职称计算机预习:对话框的组成和操作。

    对话框的组成和操作

    对话框在Windows

    XP中占有重要地位,它是用户与计算机系统之间进行信息交流的桥梁。对话框不能像窗口那样任意地改变大小,在标题栏上也没有最小化、最大化按钮,取而代之的是帮助按钮。

    2.4.1 对话框的组成和基本操作

    Windows

    XP中的对话框用于向程序提供信息。对话框通常具有多个选项和元素。例如下拉列表框、命令按钮、单选按钮、复选框和文本框等。如图所示显示了一个典型的对话框。

    1.标题栏

    2.命令按钮

    3.文本框

    4.列表框

    5.下拉式菜单

    6.单选按钮

    7.复选框

    8.数字增减框

    9.滑动杆

    10.选项卡

    包含信息较多的对话框可以由多个选项卡组成,每个选项卡对应一个主题信息,且含有不同的选项组。以下操作可以实现不同选项卡之间的切换:

    ◆直接单击选项卡标题,以切换选项卡;

    ◆单击选项卡标题,当标题名周围出现虚框线时,使用键盘上得左、右方向键可以在各个选项卡之间进行切换;

    ◆利用Ctrl+Tab组合键可以从左到右依次切换各个选项卡,而利用Ctrl+Shift+Tab组合键则可以反向顺序依次切换。

    2.4.2 确认、提醒或警告对话框

    确认、提醒或警告对话框在系统需要确认、提醒或警告时才会出现。确认对话框提示用户确认是否执行某一操作,提醒对话框用来传递系统提示信息,警告对话框提示用户执行相应操作可能带来的后果。

    (本文内容版权归东奥会计在线所有 转载请注明出处)

    相关链接:

    展开全文
  • android对话框

    千次阅读 2016-07-14 13:41:42
    android对话框

    在Android开发当中,在界面上弹出一个Dialog对话框使我们经常需要做的,本篇随笔将详细的讲解Dialog对话框这个概念,包括定义不同样式的对话框。

    一、Dialog

    我们首先来看看android官方文档对Dialog的介绍

    A dialog is a small window that prompts the user to make a decision or enter additional information. A dialog does not fill the screen and is normally used for modal events that require users to take an action before they can proceed.

    dialog就是一个在屏幕上弹出一个可以让用户做出一个选择,或者输入额外的信息的对话框,一个对话框并不会沾满我们整个的屏幕,并且通常用于模型事件当中需要用户做出一个决定后才会继续执行。

    Dialog类是dialog对话框的基类,但是我们应该避免直接使用这个类来实例化一个dialog对话框,我们应当使用其子类来得到一个对话框:

    复制代码
    java.lang.Object
       ↳     android.app.Dialog
    Known Direct Subclasses AlertDialog, CharacterPickerDialog, MediaRouteChooserDialog, MediaRouteControllerDialog, Presentation
    Known Indirect Subclasses DatePickerDialog, ProgressDialog, TimePickerDialog
    复制代码

    我们看到,Dialog有很多的子类实现,所以我们要定义一个对话框,使用其子类来实例化一个即可,而不要直接使用Dialog这个父类来构造。

    二、AlertDialog

    今天我们重点要来了解的就是AlertDialog对话框,我们看到,AlertDialog是Dialog的一个直接子类。

    使用AlertDialog,我们可以显示一个标题,最多3个按钮操作,以及一组选择框或者是自己定义的弹出框。

    这里借用android的官方文档提供的一个图来看看AlertDialog框的组成:

    ①区域1那里就是定义弹出框的头部信息,包括标题名或者是一个图标。

    ②区域2那里是AlertDialog对话框的content部分,在这里我们可以设置一些message信息,或者是定义一组选择框,还可以定义我们自己的布局弹出框。

    ③区域3那里使我们的Action Buttons部分,这里我们可以定义我们的操作按钮。

    说到Action Buttons这里要特别注意一下:

    在AlertDialog中,定义按钮都是通过 setXXXButton 方法来完成,其中一共有3种不同的Action Buttons供我们选择:

    复制代码
    1.setPositiveButton(CharSequence text, DialogInterface.OnClickListener listener)
    这是一个相当于OK、确定操作的按钮,
    
    2.setNegativeButton (CharSequence text, DialogInterface.OnClickListener listener)
    这是一个相当于取消操作的按钮。
    
    3. setNeutralButton (CharSequence text, DialogInterface.OnClickListener listener)
    这个是相当于一个忽略操作的按钮。
    复制代码

    我们每一种action buttons最多只能出现一个,即弹出对话框最多只能出现一个PositiveButton。

    接下来我们通过一个一个的具体实例来看看我们常用的几种AlertDialog对话框。

    1.弹出一个警告框,并有三个按钮可选择

    我们来看看代码部分:

    复制代码
    button.setOnClickListener(new OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                    //    通过AlertDialog.Builder这个类来实例化我们的一个AlertDialog的对象
                    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                    //    设置Title的图标
                    builder.setIcon(R.drawable.ic_launcher);
                    //    设置Title的内容
                    builder.setTitle("弹出警告框");
                    //    设置Content来显示一个信息
                    builder.setMessage("确定删除吗?");
                    //    设置一个PositiveButton
                    builder.setPositiveButton("确定", new DialogInterface.OnClickListener()
                    {
                        @Override
                        public void onClick(DialogInterface dialog, int which)
                        {
                            Toast.makeText(MainActivity.this, "positive: " + which, Toast.LENGTH_SHORT).show();
                        }
                    });
                    //    设置一个NegativeButton
                    builder.setNegativeButton("取消", new DialogInterface.OnClickListener()
                    {
                        @Override
                        public void onClick(DialogInterface dialog, int which)
                        {
                            Toast.makeText(MainActivity.this, "negative: " + which, Toast.LENGTH_SHORT).show();
                        }
                    });
                    //    设置一个NeutralButton
                    builder.setNeutralButton("忽略", new DialogInterface.OnClickListener()
                    {
                        @Override
                        public void onClick(DialogInterface dialog, int which)
                        {
                            Toast.makeText(MainActivity.this, "neutral: " + which, Toast.LENGTH_SHORT).show();
                        }
                    });
                    //    显示出该对话框
                    builder.show();
                }
            });
    复制代码

    我们如果要创建一个AlertDialog对话框,需要使用AlertDialog的一个内部类,即AlertDialog.Builder来构建一个AlertDialog的对话框,然后通过setXX方法来设置我们想要显示的内容即可。

    我们看到,我们一共设置了3个action buttons,每一个button都为其绑定了一个 DialogInterface.OnClickListener() 的监听事件,然后在里面通过Toast吐司对话框(这个在后面随笔中会讲解)来弹出一下我们的一些信息,which方法表示的是action button所代表的int值:

    positive:  -1
    negative:  -2
    neutral:  -3

    我们可以知道,which=-1就表示点击的是确定按钮,-2表示点击的是取消按钮,-3表示点击的是忽略按钮。

    2.下拉列表弹出框

    关键代码如下:

    复制代码
    button2.setOnClickListener(new OnClickListener()
            {
                @Override
                public void onClick(View arg0)
                {
                    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                    builder.setIcon(R.drawable.ic_launcher);
                    builder.setTitle("选择一个城市");
                    //    指定下拉列表的显示数据
                    final String[] cities = {"广州", "上海", "北京", "香港", "澳门"};
                    //    设置一个下拉的列表选择项
                    builder.setItems(cities, new DialogInterface.OnClickListener()
                    {
                        @Override
                        public void onClick(DialogInterface dialog, int which)
                        {
                            Toast.makeText(MainActivity.this, "选择的城市为:" + cities[which], Toast.LENGTH_SHORT).show();
                        }
                    });
                    builder.show();
                }
            });
    复制代码

    在这里我们通过 setItems(CharSequence[] items, DialogInterface.OnClickListener listener) 方法来设置我们的一个下拉列表框。注意:因为下拉列表框或者是下拉多选框这些都是显示在Content中的,所以message和下拉列表框这些是不能够同时存在的

    我们也可以给其绑定一个DialogInterface.OnClickListener监听器,当选中一个选项时,对话框就会消失掉。这里的which代表的是下拉列表的每个选项的索引,通过这个我们可以轻松得到用户选中的是哪一个选项。

    3.弹出一个下拉单选框

    复制代码
    button3.setOnClickListener(new OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                    builder.setIcon(R.drawable.ic_launcher);
                    builder.setTitle("请选择性别");
                    final String[] sex = {"男", "女", "未知性别"};
                    //    设置一个单项选择下拉框
                    /**
                     * 第一个参数指定我们要显示的一组下拉单选框的数据集合
                     * 第二个参数代表索引,指定默认哪一个单选框被勾选上,1表示默认'女' 会被勾选上
                     * 第三个参数给每一个单选项绑定一个监听器
                     */
                    builder.setSingleChoiceItems(sex, 1, new DialogInterface.OnClickListener()
                    {
                        @Override
                        public void onClick(DialogInterface dialog, int which)
                        {
                            Toast.makeText(MainActivity.this, "性别为:" + sex[which], Toast.LENGTH_SHORT).show();
                        }
                    });
                    builder.setPositiveButton("确定", new DialogInterface.OnClickListener()
                    {
                        @Override
                        public void onClick(DialogInterface dialog, int which)
                        {
                            
                        }
                    });
                    builder.setNegativeButton("取消", new DialogInterface.OnClickListener()
                    {
                        @Override
                        public void onClick(DialogInterface dialog, int which)
                        {
                            
                        }
                    });
                    builder.show();
                }
            });
    复制代码

    注意在弹出下拉单选框时,当我们选中一个选项,对话框是不会消失的,我们需要点击action button才能让对话框消失

    4.弹出一个下拉多选框

    复制代码
    button4.setOnClickListener(new OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                    builder.setIcon(R.drawable.ic_launcher);
                    builder.setTitle("爱好");
                    final String[] hobbies = {"篮球", "足球", "网球", "斯诺克"};
                    //    设置一个单项选择下拉框
                    /**
                     * 第一个参数指定我们要显示的一组下拉多选框的数据集合
                     * 第二个参数代表哪几个选项被选择,如果是null,则表示一个都不选择,如果希望指定哪一个多选选项框被选择,
                     * 需要传递一个boolean[]数组进去,其长度要和第一个参数的长度相同,例如 {true, false, false, true};
                     * 第三个参数给每一个多选项绑定一个监听器
                     */
                    builder.setMultiChoiceItems(hobbies, null, new DialogInterface.OnMultiChoiceClickListener()
                    {
                        StringBuffer sb = new StringBuffer(100);
                        @Override
                        public void onClick(DialogInterface dialog, int which, boolean isChecked)
                        {
                            if(isChecked)
                            {
                                sb.append(hobbies[which] + ", ");
                            }
                            Toast.makeText(MainActivity.this, "爱好为:" + sb.toString(), Toast.LENGTH_SHORT).show();
                        }
                    });
                    builder.setPositiveButton("确定", new DialogInterface.OnClickListener()
                    {
                        @Override
                        public void onClick(DialogInterface dialog, int which)
                        {
                            
                        }
                    });
                    builder.setNegativeButton("取消", new DialogInterface.OnClickListener()
                    {
                        @Override
                        public void onClick(DialogInterface dialog, int which)
                        {
                            
                        }
                    });
                    builder.show();
                }
            });
    复制代码

    我们看到在设置下拉多选框时使用的是setMultiChoiceItems方法,其各个参数的含义,在上面代码中已经阐述了。
    同样,对于下拉多选框,当我们选中其中一个选项时,对话框是不会消失的,只有点击了action button才会消失

    5.自定义弹出对话框

    对于自定义弹出对话框,我们就需要自己指定一个自定义的布局文件了,我们就给出一个最简单的输入用户名和密码的两个EditText:

    dialog.xml

    复制代码
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
        
        <EditText 
            android:id="@+id/username"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="username"/>
        
        <EditText
            android:id="@+id/password"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@id/username"
            android:hint="password"
            android:inputType="textPassword"/>
    
    </RelativeLayout>
    复制代码

    关键代码:

    复制代码
    button5.setOnClickListener(new OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                    builder.setIcon(R.drawable.ic_launcher);
                    builder.setTitle("请输入用户名和密码");
                    //    通过LayoutInflater来加载一个xml的布局文件作为一个View对象
                    View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.dialog, null);
                    //    设置我们自己定义的布局文件作为弹出框的Content
                    builder.setView(view);
                    
                    final EditText username = (EditText)view.findViewById(R.id.username);
                    final EditText password = (EditText)view.findViewById(R.id.password);
                    
                    builder.setPositiveButton("确定", new DialogInterface.OnClickListener()
                    {
                        @Override
                        public void onClick(DialogInterface dialog, int which)
                        {
                            String a = username.getText().toString().trim();
                            String b = password.getText().toString().trim();
                            //    将输入的用户名和密码打印出来
                            Toast.makeText(MainActivity.this, "用户名: " + a + ", 密码: " + b, Toast.LENGTH_SHORT).show();
                        } 
                    });
                    builder.setNegativeButton("取消", new DialogInterface.OnClickListener()
                    {
                        @Override
                        public void onClick(DialogInterface dialog, int which)
                        {
                            
                        }
                    });
                    builder.show();
                }
            });
    复制代码

    我们看到,通过自定义弹出框,我们首先需要写一个xml的布局文件,然后在里面定义我们的布局,我们不需要在布局文件里定义Button按钮,可以通过 AlertDialog.Builder 来设置 action buttons。

    通过 View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.dialog, null); 我们可以将我们的布局文件加载进来,得到一个View对象,然后通过 AlertDialog.Builder 的setView方法来设置我们的自定义弹出框

    展开全文
  • 1、对话框组成  从MFC角度看,分为两类:  (1)对话框模板资源。对话框模板用于指定对话框的控件及其分布,Windows根据对话框模板来创建并显示对话框  (2)对话框类。用于实现对话框的功能,一般从CDialog类...

    1、对话框组成

        从MFC角度看,分为两类:

        (1)对话框模板资源。对话框模板用于指定对话框的控件及其分布,Windows根据对话框模板来创建并显示对话框

        (2)对话框类。用于实现对话框的功能,一般从CDialog类、CpropertySheet类、CpropertyPage类派生新类,完成特定的功能。


    2、对话框分类

        对话框分为模态(Model)对话框和非模态(Modeless)对话框

        2.1、模态对话框

        是指这种对话框显示时,其父窗口将失效,只有处理完对话框要求的动作,才会将控制权交换给父窗口。

         <窗口风格>

        虽然可赋予对话框任何风格,但是Windows建议y用DS_MODALFRAME(使得模态对话框具有厚边)、WS_CAPTION及WS_SYSMENU。

         <注意>

         屏幕上显示模态对话框时,它拥有自己的消息循环,因此,所有的输入窗口信息都不能指定为WS_CHILD风格,否则父窗口将失效,子窗口(对话框自己)也会随之失效。


        2.2、非模态对话框

        又称共享式对话框,在打开非模态对话框时,依然可以对其他窗口进行操作。

        <窗口风格>

        大部分都指定WS_POPUP、WS_CAPTION、WS_BORDER、及WS_SYSTEMMENU风格。典型的都包括系统菜单和标题。

        <注意>

         (1)非模态对话框从主程序的消息循环中获得输入消息。如果非模态对话框中有控件存在,而且允许用户用键盘去选择,就必须在消息循环中调用CWnd类(或其继承类)的成员函数IsDialogMessage()来判断输入消息是否要送给非模态对话框,若是,就处理它,否则就按百折不回的途径处理它。

        (2)非模态对话框的建立靠CDialog类的成员函数Create()来完成,关闭则用CWnd类的成员函数DestroyWindow()来实现。


    3、创建对话框的一般步骤

        (1)添加一个新的对话框资源并用对话框编辑器设计对话框(修改ID等属性)

        (2)创建新的对话框类,该类应从CDialog类中派生

        (3)使用ClassWizard为对话框类加入与控件相关联的成员变量

        (4)在对话框类中添加需要的消息处理函数

        (5)创建并显示对话框


    4、模态对话框的创建

        步骤

        步骤1:新建MFC单文档应用程序,工程名为DIalog

        步骤2:在生成标准菜单后main添加一个弹出式菜单“Dialog”,下面有两个菜单命令分别为“Model Dialog”和"Modeless Dialog",它们的ID分别为IDM_MODEDLG和IDM_MODELESSDLG,并在CMainFrame类中添加这两个菜单命令的COMMAND消息处理函数,分别OnModeldlg和OnModelessdlg。如下图。






        步骤3:插入新的对话框资源,并用对话框编辑器设计对话框

            设置新的对话框的ID为IID_MYDLG,标题改为“对话框实例”

            分别在对话框上添加3个静态正文控件和3个编辑框控件,

             3个静态正文控件的Caption属性分别设为“加数”、“被加数”、“两数之和”

             3个编辑框控件的ID分别设为IDC_EDIE_NUM1,IDC_EDIT_NUM2,IDC_EDIT_SUM

             将对话框上的“Cancel”属性改为“相加”





        步骤4:创建新的对话框类,该类应从CDialog派生

        利用ClassWizard创建,这个新类只有两个函数,一个构造函数,一个析构函数


        <注意>现在还没有给这个对话框类添加与控件相关联的数据成员,还不能进行数据交换


        步骤5 :使用ClassWizard为对话框添加与控件相关联的成员变量

             勾选“Control variable”复选框,表示此事添加的是控件成员变量,默认选择的类是CMyDlg(即当前窗口的类),“Contro ID”会显示控件的ID

             在“control ID”选择控件ID;在“Variable name”中输入变量名,m_num1;在“Category”下拉列表选择Value选项;在“Variable type”中选择int选项,其余默认

             可以给这个成员变量一个限定值0-200


        其他的编辑控件也如此设置:




        步骤6:在对话框类中添加需要处理的消息函数

         打开IDD_MYDLG对话框资源,在“相加”控件右击选择“Add Event Handler”命令,选择Message type ,Class List以及handler name后点击OK


        在CMainFrame.cpp文件中添加代码:

        

       
    void CMainFrame::OnModeldlg()
    {
    	// TODO: 在此添加命令处理程序代码
    	CMyDlg m_mydlg;
    	m_mydlg.DoModal();
    }

        <说明>

        DoModal()负责创建和撤销摩天对话框。在创建对话框时,DoModal()的任务包括载入对话框模板资源、调用OnInitDialog()初始化对话框和将对话框显示出来。完成对话框的创建后,DoModal()启动一个消息循环,以响应用户的输入。由于该消息循环截获了几乎所有的输入消息,是的主循环收不到对话框的输入,是的用户只能和模态对话框进行交互,而其他用户界面对象收不到输入信息。

    5、非模态对话框的创建

         <说明>

            非模态对话框必须定义为全局变量或用new操作符产生一个。

        步骤

         步骤1:构造一个对话框类的对象,两种方法
         
         方法1:在框架窗口类的头文件中声明一个对话框的对象成员变量,如下:
       
    
    // MainFrm.h : CMainFrame 类的接口
    //
    
    ........
    #include "MyDlg.h"
    
    class CMainFrame : public CFrameWnd
    {
    	
        .........................
    
    	//创建非模态对话框的变量
    public:
    	CMyDlg m_mydlgless;
    	...................
    };
    
    
    

        <注意>
         这里声明的CMyDlg类的 对象,因此还要在框架窗口类的头文件中加入语句#include “MyDlg.h”,将对话框的头文件包含进来,否则会报错

        方法2:是在框架窗口类中声明一个对话框类的指针变量,然后使用new操作符动态创建。
        例如CMyDlg* pMyDlg = new CMyDlg;不过最后要使用delete才操作符将其释放。

        步骤2:调用CDialog::Create()函数来创建对话框窗口,相应的添加事件响应函数中实现(本例在CMainFrm.cpp)
       
    void CMainFrame::OnModelessdlg()
    {
    	// TODO: 在此添加命令处理程序代码
    	if(!m_mydlgless.m_hWnd)
    	{
    		m_mydlgless.Create(IDD_MYDLG);
    	}
    	m_mydlgless.ShowWindow(SW_SHOW);
    }

        步骤3:调用CWnd::ShowWindow()函数来显示对话框窗口

    展开全文
  • MFC 对话框

    千次阅读 2013-10-30 15:15:47
    MFC 对话框 1、对话框基本要点和生命周期 MFC对话框支持“所见即所得”编程模式。其类型分为模式对话框和非模式对话框对话框由一个rc资源文件描述外观,通过ID与一个CPP类相连接,对话框内的控件使用...
  • 常用对话框:文件对话框

    千次阅读 2014-12-09 13:59:38
     文件对话框分为打开文件对话框和保存文件对话框,相信大家在Windows系统中经常见到这两种文件对话框。例如,很多编辑软件像记事本等都有“打开”选项,选择“打开”后会弹出一个对话框,让我们选择要打开文件的...
  • MFC对话框

    2013-06-30 10:19:32
    1、对话框基本要点和生命周期 MFC对话框支持“所见即所得”编程模式。其类型分为模式对话框和非模式对话框对话框由一个rc资源文件描述外观,通过ID与一个CPP类相连接,对话框内的控件使用基于ID的变量映射通讯...
  • symbian对话框

    2010-08-04 14:55:00
    <br />Symbian对话框   Symbian OS的对话框首先需要在资源文件中定义(对话框所容纳的控件也需要在资源文件中定义...对话框构架管理器负责管理对话框的所有行为,包括布局,外观,以及用户输入。典型的
  • Symbian对话框

    千次阅读 2009-11-05 15:03:00
    Symbian对话框Symbian OS的对话框首先需要在资源文件中定义(对话框所容纳的控件也需要在资源文件中定义),然后在程序中建立对话框对象并使用资源文件中的对话框id进行初始化,最后执行对话框并显示相关内容。...
  • C#对话框

    2020-05-06 09:29:20
    public static DialogResult Show(string text,string caption,MessageBoxButtons buttons,MessageBoxIcon icon);... 消息框包含确定按钮 OKCancel 包含确定、取消按钮 AbortRetryIgnore ...
  • 属性对话框

    2019-01-14 18:11:39
    CPropertySheet 的对象表示属性表,它通常由一个或更多CPropertyPage 对象所组成 属性表的创建需用两步构造法:首先调用构造函数,接着调用DoModal创建模态属性表,或者调用Create 创建非模态属性表。 ...
  • AlertDialog对话框

    千次阅读 2014-02-18 22:37:45
    ①区域1那里就是定义弹出框的头部信息,包括标题名或者是一个图标。 ②区域2那里是AlertDialog对话框的content部分,在这里我们可以设置一些message信息,或者是定义一组选择框,还可以定义我们自己的布局弹出...
  • JS对话框框架

    千次阅读 2017-03-03 23:43:14
    基本的对话框窗口是一个...它由一个标题栏和一个内容区域组成,且可以移动,调整尺寸,默认可通过 'x' 图标关闭。  中文帮助文档:http://aui.github.io/artDialog/doc/index.html  常见的js对话框框架有Jquery UI
  • Android 开发过程中经常需要用户自定义的对话框。这种对话框需要支持在对话框里面输入的内容在对话框关闭后传递给当前所在的Activity。...用户自定义对话框的例子包含已下几个部分:    1)Act
  • MFC对话框整合

    千次阅读 2016-11-24 19:20:34
    创建对话框主要分两大步,第一,创建对话框资源,主要包括创建新的对话框模板、设置对话框属性和为对话框添加各种控件;第二,生成对话框类,主要包括新建对话框类、添加控件变量和控件的消息处理函数等。 创建...
  • javascript对话框

    2017-11-22 20:14:00
    对于无模式对话框,来自 showModelessDialog 的返回值为 DHTML 对话框包含的文档的 window 对象,它可以随后用于与打开的对话框进行通信。我们来看一下下面的无模式对话框的示例。在该示例中,在主页面设置一个值...
  • MFC 文件对话框

    2017-04-06 21:11:37
    上一讲鸡啄米介绍的是消息对话框,本节讲解文件对话框。文件对话框也是很常用的一类对话框。  文件对话框的分类  文件对话框分为打开文件对话框和保存文件对话框,相信大家在Windows系统中经常见到这两种...
  • 对话框模板

    千次阅读 2005-09-05 14:30:00
    构造DLGTEMPLATE宋燎原对话框构造流程如下:在对话框的标准模板中,DLGTEMPLATE结构后总是紧跟着三个变长数组,它们分别指定了对话框的菜单,类,标题。如果设置了DS_SETFONT属性,这些数组之后还紧跟着一个指定字体...
  • Android 对话框相关总结

    千次阅读 2017-08-22 21:56:52
    1.纯粹的 AlertDialog以及设置位置2. ProgressDialog和自定义对话框3. 自定义对话框(考虑wrap_content时的大小问题)4.单选列表对话框5.多选列表对话框6.全屏的对话框
  • 第12章 对话框

    2018-08-22 20:22:38
    对话框的一般形式是包含多种子窗口控件的弹出式窗口,这些控件的大小和位置在程序资源描述文件的「对话框模板」中指定。虽然程序写作者能够「手工」定义对话框模板,但是现在通常是在Visual C++ Developer Studio中...
  • VS2010/MFC(对话框:文件对话框

    千次阅读 2016-06-29 11:56:02
    文件对话框分为打开文件对话框和保存文件对话框,相信大家在Windows系统中经常见到这两种文件对话框。例如,很多编辑软件像记事本等都有“打开”选项,选择“打开”后会弹出一个对话框,让我们选择要打开文件的路径...
  • MFC编程之文件对话框

    2018-04-27 20:22:19
    什么是文件对话框? 文件对话框分为打开文件对话框和保存文件对话框,例如很多时候我们点击下载某个文件的时候,都会弹出一个选项框“保存文件”或者“打开文件”,点击这个按钮,会弹出硬盘的目录。 二. 文件...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 63,724
精华内容 25,489
关键字:

对话框的组成包括什么