精华内容
下载资源
问答
  • statuspanel能不能作为自定义控件容器,怎么在statuspanel上呈现带有用户事件的自定义控件
  • 使用WebBrowser控件作为容器打开Word文档
  • ActiveX控件测试容器

    2016-11-01 21:15:17
    从VC的示例代码中编译的ActiveX控件测试容器,可以很方便的测试开发中的ActiveX控件。 以前这个工具是作为VC的一个实用工具一起发布的,现在VC提供了代码,直接编译就行了。
  • ASP:Panel控件(容器控件)

    千次阅读 2014-07-23 23:38:23
    Panel控件在页面内为其他控件提供了一个容器,可以将多个控件放入一个Panel控件中,作为一个单元进行控制,如隐藏或显示这些控件;同时,也可以使用Panel控件为一组控件创建独特的外观。  Panel控件相当于一个储物...


        Panel控件在页面内为其他控件提供了一个容器,可以将多个控件放入一个Panel控件中,作为一个单元进行控制,如隐藏或显示这些控件;同时,也可以使用Panel控件为一组控件创建独特的外观。

        Panel控件相当于一个储物箱,在这个储物箱内可以防止各种物品(其他控件)。也就是说,可以将零散的物品放置在储物箱中,便于管理和控制。


    Panel控件的常用属性及说明

          属性

                              说明

     ID

       获取或设置分配给服务器控件的编程标识符

     Visible

       用于指示该控件是否可见

     HorizontalAlign 

       用于设置控件内容的水平对齐方式

     Enabled

       获取或设置一个值,该值指示是否已启用控件                                                                   

     ScrollBars

       可以控制Panel控件以何种方式使用滚动条

    [补充]:属性说明

    ►HorizontalAlign属性

        Panel控件的HorizontalAlign属性用于指定容器中内容的水平对齐方式。HorizontalAlign属性成员说明如下所示:

      成员名称

                            说明

      Center

       容器的内容居中

      Justify  

       容器的内容均匀展开,与左右边距对齐                                                                                

      Left

       容器的内容左对齐         

      NotSet

       未设置水平对齐方式

      Right

       容器的内容右对齐

     

     

    展开全文
  • Python笔记之Tkinter(Frame控件容器)

    千次阅读 2019-04-30 23:40:23
    学习Tkinter制作窗体软件的基础,框架控件,作用:作为一种容器,可以把其他空间放在frame上。 二、试验平台 windows7 , python3.7 三、直接上代码 import tkinter win = tkinter.Tk() win.title("Kahn ...

    一、目标

    学习Tkinter制作窗体软件的基础,框架控件,作用:作为一种容器,可以把其他空间放在frame上。

    二、试验平台

    windows7 , python3.7

    三、直接上代码

    import tkinter
    
    
    win = tkinter.Tk()
    win.title("Kahn Software v1")    # #窗口标题
    win.geometry("500x300+200+20")   # #窗口位置500后面是字母x
    
    '''
    框架控件,作用:作为一种容器,可以把其他空间放在frame上。
    '''
    frm = tkinter.Frame(win)             # #创建一个frame控件
    frm.pack()
    
    # #左侧
    frm_1 = tkinter.Frame(frm)             # #创建一个frm_1并且放到frm上
    tkinter.Label(frm_1, text="左上", bg="pink").pack(side=tkinter.TOP)    # #创建一个Lable放到frm_1上
    tkinter.Label(frm_1, text="左下", bg="green").pack(side=tkinter.TOP)
    frm_1.pack(side=tkinter.LEFT)         # #frm_1的位置放在左侧
    
    # #右侧
    frm_r = tkinter.Frame(frm)
    tkinter.Label(frm_r, text="右上", bg="red").pack(side=tkinter.TOP)
    tkinter.Label(frm_r, text="右下", bg="yellow").pack(side=tkinter.TOP)
    frm_r.pack(side=tkinter.RIGHT)
    
    win.mainloop()   # #窗口持久化
    

    小家伙还不睡,闹腾。

    kahn  2019年4月30日23:39:24

    展开全文
  • 1.开发环境 Qt版本:Qt 4.8.7 编译器:MinGw 系统:Windows 2.创建Qt4自定义控件 ...此时编译出来Release版本的自定义控件放进Designer目录下仅在Designer中拖动,在使用该控件的工程中编译将会报错,所...

    1.开发环境

    Qt版本:Qt 4.8.7
    编译器:MinGw
    系统:Windows

    2.创建Qt4自定义控件

    创建一个Qt自定义控件工程。

    这里写图片描述

    工程名为Custom。

    这里写图片描述

    控件类取名Custom。

    这里写图片描述

    然后完成创建。

    3.包含头文件与宏

    此时编译出来Release版本的自定义控件放进Designer目录下仅能在Designer中拖动,在使用该控件的工程中编译将会报错,所以需要在该控件编译前在该控件类的头文件中包含指定的头文件与宏。

    在custom.h中包含头文件QtDesigner/QDesignerExportWidget。

    #include <QtDesigner/QDesignerExportWidget>

    在class与类名Custom之间添加宏。

    QDESIGNER_WIDGET_EXPORT

    这里写图片描述

    4.编写自定义控件

    这里测试用的Custom为了与Qt控件在外观上区别开,加上一段qss就好。

    这里写图片描述

    当然Custom继承自QWidget类,为了使qss有效,会重写一下paintEvent事件函数。

    void Custom::paintEvent(QPaintEvent *)
    {
        QStyleOption styleOpt;
        styleOpt.init(this);
        QPainter painter(this);
        style()->drawPrimitive(QStyle::PE_Widget, &styleOpt, &painter, this);
    }

    5.编译

    编写好自定义控件类后,就需要编译Release版本了。

    编译好Release版本后,在目标目录中找到customplugin.dll和libcustomplugin.a(vs编译为.lib)并将其拷贝到Qt安装目录下的plugins\designer中。

    这里写图片描述

    6.Designer

    打开Designer,就可以在“自定义窗口部件”一栏下看到刚才编写的自定义控件Custom。

    这里写图片描述

    拖动Custom到Designer的窗口中,就可以看到效果。

    这里写图片描述

    7.使用自定义控件

    在Qt Creator中新建一个应用工程CustomWidget。

    在CustomWidget工程目录下新建include和lib两个目录。

    这里写图片描述

    讲自定义控件Custom的头文件custom.h拷贝到include目录下,讲库libcustomplugin.a拷贝到lib目录下。

    注意:此时因为使用的自定义控件是Release版本的,所以当前应用工程也编译Release版本,如果当前应用工程需要Run的是Debug版本,则链接的自定义控件类库也需要时Debug版本。

    在CustomWidget.pro工程文件中包含头文件与库。

    INCLUDEPATH += $$PWD/include
    LIBS += $$PWD/lib/libcustomplugin.a

    执行一次qmake,在生成的目标目录下,将customplugin.dll拷贝到程序运行目录下。

    使用Designer编辑.ui文件。(是加载有自定义控件Custom的Qt Designer)

    在Designer中使用自定义控件Custom。

    这里写图片描述

    编译应用工程CustomWidget成功后,然后运行就OK了。

    这里写图片描述

    8.Designer中实现容器与控件内布局

    在Qt Designer中,QWidget以及QGroupBox等预定义控件都可以当做容器来存放其他控件并实现快速布局,但是在自定义控件继承了其基类后发现无法当做容器来存放其他控件并实现快速布局,这个时候就需要修改重写QDesignerCustomWidgetInterface类中的一个函数的实现。

    找到Qt自定义控件中xxxplugin.h,其中有一个重写QDesignerCustomWidgetInterface类的函数isContainer,即是否为一个容器。

    bool isContainer() const;

    跳转到xxxplugin.cpp中isContainer函数的实现。

    bool XXXPlugin::isContainer() const
    {
        return false;
    }

    将返回值修改为true。

    bool XXXPlugin::isContainer() const
    {
        return true;
    }

    然后重新编译并在Qt Designer中使用,即可发现该自定义控件可以作为一个容器存放其他控件并实现控件内布局。

    展开全文
  • Android标签容器控件的实现

    千次阅读 2016-07-21 14:57:00
    Android中标签容器控件的实现,在一些APP中我们可以看到一些存放标签的容器控件,和我们平时使用的一些布局方式有些不同,它们一般都可以自动适应屏幕的宽度进行布局,根据对自定义控件的一些理解,今天写一个简单的...

    Android中标签容器控件的实现

    介绍

    在一些APP中我们可以看到一些存放标签的容器控件,和我们平时使用的一些布局方式有些不同,它们一般都可以自动适应屏幕的宽度进行布局,根据对自定义控件的一些理解,今天写一个简单的标签容器控件,项目源码在最后给出

    下面这个是我在手机上截取的一个实例,是在MIUI8系统上截取的

    这里写图片描述

    这个是我实现的效果图

    这里写图片描述

    原理介绍

    根据对整个控件的效果分析,大致可以将控件分别从以下这几个角度进行分析:

    1.首先涉及到自定义的ViewGroup,因为现有的控件没法满足我们的布局效果,就涉及到要重写onMeasure和onLayout,这里需要注意的问题是自定义View的时候,我们需要考虑到View的Padding属性,而在自定义ViewGroup中我们需要在onLayout中考虑Child控件的margin属性否则子类设置这个属性将会失效。整个View的绘制流程是这样的:

    最顶层的ViewRoot执行performTraversals然后分别开始对各个View进行层级的测量、布局、绘制,整个流程是一层一层进行的,也就是说父视图测量时会调用子视图的测量方法,子视图调孙视图方法,一直测量到叶子节点,performTraversals这个函数翻译过来很直白,执行遍历,就说明了这种层级关系。

    2.该控件形式上和ListView的形式比较相近,所以在这里我也模仿ListView的Adapter模式实现了对控件内容的操作,这里对ListView的setAdapter和Adapter的notifyDataSetChanged方法做个简单的解释:

    在ListView调用setAdapter后,ListView会去注册一个Observer对象到这个adapter上,然后当我们在改变设置到adapter上的数据发改变时,我们会调用adapter的notifyDataSetChanged方法,这个方法就会通知所有监听了该Adapter数据改变时的Observer对象,这就是典型的监听者模式,这时由于ListView中的内部成员对象监听了该事件,就可以知道数据源发生了改变,我们需要对真个控件重新进行绘制了,下面来一些相关的源码。

    Adapter的notifyDataSetChanged

    public void notifyDataSetChanged() {
            mDataSetObservable.notifyChanged();
        }

    ListView的setAdapter方法

    @Override
        public void setAdapter(ListAdapter adapter) {
            /**
             *每次设置新的适配的时候,如果现在有的话会做一个解除监听的操作
             */
            if (mAdapter != null && mDataSetObserver != null) {
                mAdapter.unregisterDataSetObserver(mDataSetObserver);
            }
    
            resetList();
            mRecycler.clear();
            /** 省略部分代码.....   */
            if (mAdapter != null) {
                mAreAllItemsSelectable = mAdapter.areAllItemsEnabled();
                mOldItemCount = mItemCount;
                mItemCount = mAdapter.getCount();
                checkFocus();
    
                /**
                *在这里对adapter设置了监听,
                *使用的是AdapterDataSetObserver类的对象,该对象定义在ListView的父类AdapterView中
                */
                mDataSetObserver = new AdapterDataSetObserver();
                mAdapter.registerDataSetObserver(mDataSetObserver);
                /** 省略 */
            } else {
                /** 省略 */
            }
    
            requestLayout();
        }

    AdapterView中的内部类AdapterDataSetObserver

    class AdapterDataSetObserver extends DataSetObserver {
    
            private Parcelable mInstanceState = null;
    
            @Override
            public void onChanged() {
                /* ***代码略*** */
                checkFocus();
                requestLayout();
            }
    
            @Override
            public void onInvalidated() {
               /* ***代码略*** */
                checkFocus();
                requestLayout();
            }
    
            public void clearSavedState() {
                mInstanceState = null;
            }
        }

    一段伪代码表示

    ListView{
        Observer observer{
             onChange(){
                  change;
             }
        }
    
        setAdapter(Adapter adapter){
             adapter.register(observer);
        }
    }
    
    Adapter{
        List<Observer> mObservable;
        register(observer){
            mObservable.add(observer);
        }
        notifyDataSetChanged(){
            for(i-->mObserverable.size()){
                mObserverable.get(i).onChange
            }
        }
    }

    实现过程

    获取ViewItem的接口

    package humoursz.gridtag.test.adapter;
    
    import android.view.View;
    
    import java.util.List;
    
    /**
     * Created by zhangzhiquan on 2016/7/19.
     */
    public interface GrideTagBaseAdapter {
        List<View> getViews();
    }
    

    抽象适配器AbsGridTagsAdapter

    package humoursz.gridtag.test.adapter;
    
    import android.database.DataSetObservable;
    import android.database.DataSetObserver;
    
    /**
     * Created by zhangzhiquan on 2016/7/19.
     */
    public abstract class AbsGridTagsAdapter implements GrideTagBaseAdapter {
    
        DataSetObservable mObservable = new DataSetObservable();
    
        public void notification(){
            mObservable.notifyChanged();
        }
        public void registerObserve(DataSetObserver observer){
            mObservable.registerObserver(observer);
        }
        public void unregisterObserve(DataSetObserver observer){
            mObservable.unregisterObserver(observer);
        }
    }
    

    此效果中的需要的适配器,实现了getView接口,主要是模仿了ListView的BaseAdapter

    package humoursz.gridtag.test.adapter;
    
    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.widget.TextView;
    
    
    import java.util.ArrayList;
    import java.util.List;
    
    import humoursz.gridtag.test.R;
    import humoursz.gridtag.test.util.UIUtil;
    import humoursz.gridtag.test.widget.GridTagView;
    
    /**
     * Created by zhangzhiquan on 2016/7/19.
     */
    public class MyGridTagAdapter extends AbsGridTagsAdapter {
    
        private Context mContext;
    
        private List<String> mTags;
    
        public MyGridTagAdapter(Context context, List<String> tags) {
            mContext = context;
            mTags = tags;
        }
    
        @Override
        public List<View> getViews() {
            List<View> list = new ArrayList<>();
            for (int i = 0; i < mTags.size(); i++) {
    
                TextView tv = (TextView) LayoutInflater.from(mContext)
                        .inflate(R.layout.grid_tag_item_text, null);
    
                tv.setText(mTags.get(i));
    
                GridTagView.LayoutParams lp = new GridTagView
                        .LayoutParams(GridTagView.LayoutParams.WRAP_CONTENT
                        ,GridTagView.LayoutParams.WRAP_CONTENT);
    
                lp.margin(UIUtil.dp2px(mContext, 5));
    
                tv.setLayoutParams(lp);
    
                list.add(tv);
            }
            return list;
        }
    }

    最后是主角GridTagsView控件

    package humoursz.gridtag.test.widget;
    
    import android.content.Context;
    import android.database.DataSetObserver;
    import android.util.AttributeSet;
    import android.util.Log;
    import android.view.View;
    import android.view.ViewGroup;
    
    
    import java.util.List;
    
    import humoursz.gridtag.test.adapter.AbsGridTagsAdapter;
    
    /**
     * Created by zhangzhiquan on 2016/7/18.
     */
    public class GridTagView extends ViewGroup {
    
        private int mLines = 1;
    
        private int mWidthSize = 0;
    
        private AbsGridTagsAdapter mAdapter;
    
        private GTObserver mObserver = new GTObserver();
    
        public GridTagView(Context context) {
            this(context, null);
        }
    
        public GridTagView(Context context, AttributeSet attrs) {
            this(context, attrs, 0);
        }
    
        public GridTagView(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
        }
    
        public void setAdapter(AbsGridTagsAdapter adapter) {
            if (mAdapter != null) {
                mAdapter.unregisterObserve(mObserver);
            }
            mAdapter = adapter;
            mAdapter.registerObserve(mObserver);
            mAdapter.notification();
        }
    
        @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            int widthSize = MeasureSpec.getSize(widthMeasureSpec);
            int heightSize = MeasureSpec.getSize(heightMeasureSpec);
            int curWidthSize = 0;
            int childHeight = 0;
            mLines = 1;
            for (int i = 0; i < getChildCount(); ++i) {
                View child = getChildAt(i);
                measureChild(child, widthMeasureSpec, heightMeasureSpec);
                curWidthSize += getChildRealWidthSize(child);
                if (curWidthSize > widthSize) {
                    /**
                     * 计算一共需要多少行,用于计算控件的高度
                     * 计算方法是,如果当前控件放下后宽度超过
                     * 容器本身的高度,就放到下一行
                     */
                    curWidthSize = getChildRealWidthSize(child);
                    mLines++;
                }
                if (childHeight == 0) {
                    /**
                     * 在第一次计算时拿到字视图的高度作为计算基础
                     */
                    childHeight = getChildRealHeightSize(child);
                }
            }
            mWidthSize = widthSize;
            setMeasuredDimension(widthSize, childHeight == 0 ? heightSize : childHeight * mLines);
    
        }
    
        @Override
        protected void onLayout(boolean changed, int l, int t, int r, int b) {
            if (getChildCount() == 0)
                return;
            int childCount = getChildCount();
            LayoutParams lp = getChildLayoutParams(getChildAt(0));
            /**
             * 初始的左边界在自身的padding left和child的margin后
             * 初始的上边界原理相同
             */
            int left = getPaddingLeft() + lp.leftMargin;
            int top = getPaddingTop() + lp.topMargin;
            int curLeft = left;
            for (int i = 0; i < childCount; ++i) {
                View child = getChildAt(i);
    
                int right = curLeft + getChildRealWidthSize(child);
                /**
                 * 计算如果放下当前试图后整个一行到右侧的距离
                 * 如果超过控件宽那就放到下一行,并且左边距还原,上边距等于下一行的开始
                 */
                if (right > mWidthSize) {
                    top += getChildRealHeightSize(child);
                    curLeft = left;
                }
                child.layout(curLeft, top, curLeft + child.getMeasuredWidth(), top + child.getMeasuredHeight());
                /**
                 * 下一个控件的左边开始距离是上一个控件的右边
                 */
                curLeft += getChildRealWidthSize(child);
            }
        }
    
        /**
         * 获取childView实际占用宽度
         * @param child
         * @return 控件实际占用的宽度,需要算上margin否则margin不生效
         */
        private int getChildRealWidthSize(View child) {
            LayoutParams lp = getChildLayoutParams(child);
            int size = child.getMeasuredWidth() + lp.leftMargin + lp.rightMargin;
            return size;
        }
    
        /**
         * 获取childView实际占用高度
         * @param child
         * @return 实际占用高度需要考虑上下margin
         */
        private int getChildRealHeightSize(View child) {
            LayoutParams lp = getChildLayoutParams(child);
            int size = child.getMeasuredHeight() + lp.topMargin + lp.bottomMargin;
            return size;
        }
    
        /**
         * 获取LayoutParams属性
         * @param child
         * @return
         */
        private LayoutParams getChildLayoutParams(View child) {
            LayoutParams lp;
            if (child.getLayoutParams() instanceof LayoutParams) {
                lp = (LayoutParams) child.getLayoutParams();
            } else {
                lp = (LayoutParams) generateLayoutParams(child.getLayoutParams());
            }
    
            return lp;
        }
    
    
        @Override
        public ViewGroup.LayoutParams generateLayoutParams(AttributeSet attr) {
            return new LayoutParams(getContext(), attr);
        }
    
        @Override
        protected ViewGroup.LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {
            return new LayoutParams(p);
        }
    
        public static class LayoutParams extends MarginLayoutParams {
    
            public LayoutParams(Context c, AttributeSet attrs) {
                super(c, attrs);
            }
    
            public LayoutParams(int width, int height) {
                super(width, height);
            }
    
            public LayoutParams(MarginLayoutParams source) {
                super(source);
            }
    
            public LayoutParams(ViewGroup.LayoutParams source) {
                super(source);
            }
    
            public void marginLeft(int left) {
                this.leftMargin = left;
            }
    
            public void marginRight(int r) {
                this.rightMargin = r;
            }
    
            public void marginTop(int t) {
                this.topMargin = t;
            }
    
            public void marginBottom(int b) {
                this.bottomMargin = b;
            }
            public void margin(int m){
                this.leftMargin = m;
                this.rightMargin = m;
                this.topMargin = m;
                this.bottomMargin = m;
            }
        }
    
    
        private class GTObserver extends DataSetObserver {
            @Override
            public void onChanged() {
                removeAllViews();
                List<View> list = mAdapter.getViews();
                for (int i = 0; i < list.size(); i++) {
                    addView(list.get(i));
                }
            }
            @Override
            public void onInvalidated() {
                Log.d("Mrz","fd");
            }
        }
    }
    

    MainActivity

    package humoursz.gridtag.test;
    
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    
    import java.util.List;
    
    import humoursz.gridtag.test.adapter.MyGridTagAdapter;
    import humoursz.gridtag.test.util.ListUtil;
    import humoursz.gridtag.test.widget.GridTagView;
    
    public class MainActivity extends AppCompatActivity {
    
        MyGridTagAdapter adapter;
        GridTagView mGridTag;
        List<String> mList;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mGridTag = (GridTagView)findViewById(R.id.grid_tags);
            mList = ListUtil.getGridTagsList(20);
            adapter = new MyGridTagAdapter(this,mList);
            mGridTag.setAdapter(adapter);
        }
    
        public void onClick(View v){
            mList.removeAll(mList);
            mList.addAll(ListUtil.getGridTagsList(20));
            adapter.notification();
        }
    }
    

    XML 文件

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="humoursz.gridtag.test.MainActivity">
    
        <humoursz.gridtag.test.widget.GridTagView
            android:id="@+id/grid_tags"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
        </humoursz.gridtag.test.widget.GridTagView>
        <Button
            android:layout_centerInParent="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="onClick"
            android:text="换一批"/>
    </RelativeLayout>
    

    这样一个简单的控件就写好了,主要需要注意measure和layout否则很多效果都会失效,安卓中的LinearLayout之类的控件实际实现起来要复杂的很多,因为支持的属性实在的太多了,多动手实践可以帮助理解,下面是工程的下载地址

    Android简单标签容器工程源码

    展开全文
  • ASP.NET-Panel容器控件

    千次阅读 2017-06-05 10:38:03
     Panel控件在页面为其他控件提供了一个容器,可以将其他群空间放入一个Panel控件中,作为一个单元进行控制,如隐藏或显示这些控件:同时,也可以使用Panel控件为一组控件创建独特的外观。 2.属性 ID Visible ...
  • Qt之容器控件(QStackedWidget)

    千次阅读 2020-03-21 20:09:47
    简述 QStackedWidget提供了一个控件栈,在这个栈中,一次只能显示一个控件。 QStackedWidget可以提供与QTabWidget类似的用户接口。...其它接口与QTabWidget类似,参见Qt之容器控件(QTabWidget) 使用 效果 ...
  • QLabel对象作为一个占位符可以显示可编辑的文本或者图片,也可以放一个gif动画,还可以作为一个提示标记作为其他控件; 该标签可以放纯文本,链接或者富文本信息; 参考文章:PyQt5-QLabel控件使用 ...
  •   MFC 控件容器支持涉及三个主类: COccManager,COleControlContainer,和 COleControlSite。COccManager 是一个 MFC 进程中的所有控件容器的主控制器,并负责处理出 COleControlSite 和 COleControlContaine
  • 原文链接:ATL Windowless ActiveX Media Container 这个ATL activeX框架适用于作为Windows Media Player,Flash以及Sliverlight动画的承载容器。整个框架分布在Windowless文件夹下,共有6个文件。架构如图所示: ...
  • ActiveX控件和它的容器

    千次阅读 2010-07-16 14:21:00
    3.ActiveX控件容器及实现 <br /> 4.总结 <br /> 1.COM基础 <br /> COM是一种组件开发技术, 它实际上是一种在二进制层上兼容的软件开发方法的规范. COM技术是与具体的编程语言无关的技术,...
  • 可移动缩放控件容器

    千次阅读 2008-02-04 12:42:00
    一.设计时效果二.运行时效果三.主要功能1.选中后显示聚焦框,与缩放的8个焦点。2.鼠标移动到右侧,右下角,下方的指定区域时,显示...5.容器中的控件提供动态的加入(暂具备设计时加入后的响应功能),动态的删除。 
  • Android 在布局容器中动态添加控件

    千次阅读 2019-01-10 16:51:51
    这里,通过一个小demo,就可以掌握在布局容器中动态添加控件,以动态添加Button控件为例,添加其他控件同样道理。 1、addView 添加控件到布局容器 2、removeView 在布局容器中删掉已有的控件 3、使用,来个小...
  • 容器控件JPanel的使用

    千次阅读 2017-04-02 23:29:25
    就是为其他的控件提供空间作为支撑,且可以在属性中设置其背景色     对于每一个 JPanel 都有一个布局选项 Layout,根面板 contentPane 的布局默认为 java.awt.BorderLayout     除了 ...
  • QDockWidget类提供了一个小部件,它可以停靠在QMainWindow内,也可以作为桌面上的顶层窗口浮动。 功能详述 QDockWidget提供了铆接(停靠)控件的概念,也叫做工具窗口。铆接窗口是QMainWindow中心控件的辅助窗口,...
  • 这是一个可执行应用程序,直接双击就可以使用,或者在Visual Studio 2010作为菜单栏的工具栏作为外部工具使用。
  • 不能成功地适应容器之间的差别将严重影响控件在某些容器内的应用,甚至导致控件完全无法在个别容器使用。 本文讨论使用Visual C++创建控件时如何适应容器相关的需求,特别是为大范围内使用而开发ActiveX控件时必须...
  • 创建适用于多种容器控件

    千次阅读 2007-01-04 11:24:00
    不能成功地适应容器之间的差别将严重影响控件在某些容器内的应用,甚至导致控件完全无法在个别容器使用。 本文讨论使用Visual C++创建控件时如何适应容器相关的需求,特别是为大范围内使用而开发ActiveX控件时必须...
  • Qt之容器控件(QMdiArea)

    千次阅读 2020-03-22 14:08:59
    简述 QMdiArea(Multiple Document Interface Area)提供了一个可以同时显示多个文档窗口的...通常情况下,QMdiArea用作QMainWindow的中心控件,以此来创建一个MDI应用程序。但是,它也可以被放置在任何布局类中。...
  • 因为特定的理由,ms的c#在使用无边框窗体作为子窗体的时候就会
  • 布局属性: Anchor ----------------定义某个控件绑定...Dock -----------------------定义要绑定到容器控件边框Location---------------------------------控件左上角相对于其容器左上角的坐标 容器: FlowLa...
  • Qt Creator有9种Containers Widgets,如图:  Containers Widgets的Qt类和名称介绍如下表: ... 控件控件名 中文名  QGroupBox GroupBox 组合框  QScrollArea ScrollArea 滚动区  QToolBox ToolBo...
  • 常用设置 添加控件 使用addTab和insertTab来添加控件,有两个版本,一个带图例,一个带,如下所示。 tabWidget->addTab(pageWidget_0, "第一页"); tabWidget->addTab(pageWidget_0, QICon(":/picture/qq.png"), ...
  • Qt控件精讲四:容器

    万次阅读 2013-12-22 16:42:21
    2.控件介绍:框架控件用来存放其他控件,也可用于装饰,它一般用来作为更加复杂容器的基础。也可以用在form中作为占用控件。 3.控件属性设置选项: (1)name:同上 (2)framesShape:框架...
  • 在学习新内容之前,我们先来弄清楚两个问题: 1 . 什么是ViewGroup? ViewGroup是一种容器。它包含零个或以上的View及子View。...ViewGroup内部可以用来存放多个View控件,并且根据自身的测量模式,来测量View子控件
  • 就拿了别人的源码,增加些控件与功能,然后界面太规范,所以边学边改之,第一天弄WinForm界面。有必要记下免得忘了。 目标: 重点要解决的问题,如何让窗口在拖动的时候,某些控件是固定在某个角落。而某些...
  • 原文:WPF: WrapPanel 容器的数据绑定(动态生成控件、遍历) 问题:  有一些CheckBox需要作为选项添加到页面上,但是数目不定。而为了方便排版,我选择用WrapPanel面板来作为容器。那现在...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 58,271
精华内容 23,308
关键字:

不能作为控件容器的是