精华内容
下载资源
问答
  • 一开始窗体名为mainreport,但是一添加控件就自动改成了webform1,窗体名一改源程序就有错误报警,因为对应的名字不对,可为什么会自动改变名字呢?![图片说明]...
  • 首先,虽然在讲课的时候,我时常会讲到一些关于动态地向窗体中添加控件的例子,但在实际工作中我却很少用用到要这个技术。一般情况下,控件在窗体上是写好的,只是根据需要显示与隐藏。 其次,也是最重要的——我...
    WPF感悟(3)——关于向窗体动态添加控件
    这是一个很有意思的话题。
    首先,虽然在讲课的时候,我时常会讲到一些关于动态地向窗体中添加控件的例子,但在实际工作中我却很少用用到要这个技术。一般情况下,控件在窗体上是写好的,只是根据需要显示与隐藏。
    其次,也是最重要的——我标题用的是“窗体”没有用Window,这是为什么呢?因为同样看上去是窗体,WinForm编程对应的类是Form,WPF编程对应的类是Window。虽然在运行时(run time)它们都是Windows API用CreateWindowEx函数创建出来的Window Class,但在它们还是.NET类的时候,却有着巨大的区别——特别是体现在内部控件的组织形式上。
    WinForm
    WinForm窗体里的按钮、文本框等供用户操作的对象称为“控件”(controls)。这些控件可以分为两类,一类是非容器控件,这类控件的内部结构是固定不变的,比如一个Button内部只能是一串文字(还可以设置Button的背景图片),如果你想在Button内显示一个图标后跟上一串文字,要么你写一个自定义控件(派生自Button、再来点儿GDI+的技术)、要么你把文字写在图片上整个作为Button的背景图片;另一类是容器控件,它的内部可以装一些其他控件,这类控件的一个特点就是有一个Controls属性,这是一个ControlCollection。
    你可以把Form也看成是一个容器控件。我们说的动态添加控件也就是向容器控件内添加控件了——方法就是先声明一个与控件类型相对应的变量、为它创建一个控件类型的实例、把这个实例初始化好之后再调用Contols.Add方法,把这个变量添加进容器控件就好了。看起来大概是这样:
    1. private void button1_Click(object sender, EventArgs e)   
    2. {   
    3.     Button button = new Button();   
    4.     button.Size = new Size(80, 20);   
    5.     button.Text = "OK";   
    6.     groupBox1.Controls.Add(button);   
    7. }  
    这里有两点非常重要——
    • WinForm的控件组织是“平面化”的,也就是说,在一个容器控件内,它们处在同一个ControlCollection内、不再有包含关系(除非它是一个容器控件)。如果我们把目光放的宏观一些,那么WinForm窗体在包含容器控件时,可以称之为一棵以容器控件(也只能以容器控件)为结点的、逻辑上的树——但实际工作中我们谁也不会去使用这棵树,因为它没什么用处。后面你会看到,WPF里也有“树”——那是真正的树,WPF几乎一切事件消息路由都依赖于这棵树。
    • 要想向Controls里添加一个初始化完备的控件,你就几乎总要声明一个变量——在WPF里就不用这么做,因为XAML本身的树状结构,再加上新版本.NET支持“对象初始化”语法,使代码变得非常简单。当然,.NET的方便的功能并非WPF所独享的——我们完全可以在WinForm编程中也使用它,上面的代码会简化成这样
    1. private void button1_Click(object sender, EventArgs e)   
    2. {   
    3.     groupBox1.Controls.Add(new Button { Text = "OK", Size = new Size(80,20) });   
    4. }  
    这种语法叫做“对象初始化器”,这也是我要在下一篇文章——《WPF感悟(4)——对象初始化器传奇》——里将要介绍的内容。
    WPF
    WPF窗体里的按钮、文本框等UI组件称为“元素”(Element),更确切地说是“UI元素”(与UIElement类对应)。UI元素这个词里隐含了一点,那就是:它一定是“可视”的(Visual),不然怎么让用户去使用呢?
    WPF UI元素与WinForm控件最大的不同就是WPF UI元素不再以“容器”和“非容器”作为区分,而是以“内容元素”和“非内容元素”来区分。所谓内容元素,就是说它有一个名为Content的属性——它是Object类型的!要知道,Object类是所有.NET类的父类,这就意味着对于一个内容元素来说,随便你往它里面装什么都可以!装一个UI元素可以、装一组UI元素也可以——把这组元素组合在一个集合里就OK了。
    如果内容元素的内容仍然是内容元素呢?一棵真正的、可视化的“树”就形成了。这就是WPF中声明赫赫的Visual Tree,WPF窗体上的事件消息也是沿着这棵可视化树传递的——消息经过每个可视化树上的结点(UIElement)时称为“路由”(Route),这时候我们可以对消息进行处理和控制。这方面的知识我将在《深入浅出WPF》系列文章里仔细介绍。
    你可能会问,WPF里有哪些UIElement是Content Element呢?呃……真问住我了。太多了!以至于我只记得几个非Content Element——比如TextBlock、TextBox。在WPF中,非Content Element的表现功能是很弱的,因为它们肚子里的内容太单一了。就拿TextBlock和TextBox来说,它们的内容只能是文本。
    Content Element的内容就非常多了!Button就是一个Content元素。在WPF中,Button摇身一变,肚子里可就“别有洞天”了。
    ……打会儿游戏,晚上接着写。









    本文转自 水之真谛 51CTO博客,原文链接:http://blog.51cto.com/liutiemeng/95270,如需转载请自行联系原作者
    展开全文
  • 窗体 Panel 中添加新的窗体(C#winform 开发) 本文的要写的是如何将窗体Form添加到 panel 中 为什么要这样呢 如果用 tab 控件整个窗体控件太多不易于我们编程 可以更灵活的控制窗体的布局 我想你一定看过这样的...
  • 我想后台动态添加...请问如何后台把button添加进runnat:server的窗体中,代码如下 protected void Page_Load(object sender, EventArgs e) { Button bt = new Button(); this.Controls.Add(bt); }
  • 窗体控件

    2020-12-02 22:06:31
    菜单控件中添加内容 给任意菜单栏添加快捷键 &+任意字母 可以自己定义一个快捷键 格式: Alt+快捷键 可以激发这个属性 二级菜单与多级菜单激发对应的功能不需要按alt,直接按配好的键即可展开 工具栏 ...

    菜单控件menuStrip

    在这里插入图片描述
    在菜单控件中添加内容
    在这里插入图片描述
    给任意菜单栏添加快捷键
    &+任意字母 可以自己定义一个快捷键

    格式:

    Alt+快捷键  可以激发这个属性
    

    在这里插入图片描述
    二级菜单与多级菜单激发对应的功能不需要按alt,直接按配好的键即可展开
    在这里插入图片描述

    工具栏

    在这里插入图片描述
    添加工具按钮
    在这里插入图片描述
    给工具按钮添加图片
    在这里插入图片描述
    得到效果为
    在这里插入图片描述
    调整图片大小
    默认ImageScaling是调整好大小的
    在这里插入图片描述
    以什么形态显示
    在这里插入图片描述

    单选按钮RadioButton

    在这里插入图片描述
    引入Panel控件
    在这里插入图片描述
    使用Panel控件进行分组,实现互斥效果
    在这里插入图片描述

    分组框GroupBox

    在这里插入图片描述
    实现效果
    在这里插入图片描述

    日期时间选择器 DateTimePicker

    在这里插入图片描述
    在value属性中设置值
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 多文档界面窗体(MDI窗体)中的父窗体没有办法添加控件,我们可以窗体中添加一个picture控件,然后将控件放在picture上。但是随之而来的问题就是MDI子窗体没有办法显示出来,被picture控件给挡住了,经过翻阅...

    多文档界面窗体(MDI窗体)中的父窗体没有办法添加控件,我们可以在父窗体中添加一个picture控件,然后将控件放在picture上。但是随之而来的问题就是MDI子窗体没有办法显示出来,被picture控件给挡住了,经过翻阅各种资料,发现的了一些信息以及解决办法。跟大家分享一下。

    首先为什么MDI子窗体显示不出来

    因为 MDI 程序中

    子窗体实际上是位于 MDIClient 里

    就是说 子窗体的父窗体 是 MDIClient

    而 放置在MDI中 的 picturebox 和MDIClient是同一级的

    层次结构

    ThunderMDIForm--MDIForm1

    --MDIClient

    ----ThunderFormDC--Form1 子窗体1

    ----ThunderFormDC--Form2 子窗体2

    --ThunderPictureBoxDC MDI中 的 picturebox

    解决方法

     

    1.在MDI父窗体中引用一个API函数即SetParen函数

    Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
    

    2.在需要出现的窗体的单击事件中输入

        SetParent FrmIntroduction.hWnd, PicMain.hWnd
        FrmIntroduction.Show
    

     举个例子:

                 FrmIntroduction为需要出现的子窗体, PicMain为父窗体的picture控件名

    Private Sub Introduction_Click()
        SetParent FrmIntroduction.hWnd, PicMain.hWnd
        FrmIntroduction.Show
    End Sub
    

     

    SetParent函数解释

    声明方法:

    Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long

    功能:可以设置弹出式窗口,层叠窗口或子窗口的父窗口

    函数原型:HWND SetParent(HWND hWndChild,HWND hWndNewParent)

    参数:hWndChild   子窗口句柄

               hWndNewParent   新的父窗口句柄(如果该参数是NULL,则桌面窗口就成为新的父窗口)

    返回值:如果函数成功,返回值为子窗口的原父窗口句柄;如果函数失败,返回值为NULL。若想获得多错误信息,请调用GetLastError函数。

    这里有关于MDI窗体的部分介绍:请看这里

    由于上篇文章存在MFC的解释,相应的我找到了关于MFC较全面的文章,欢迎转步:点这里

    展开全文
  • 在窗体中,通过VS的添加服务引用后,代码可以正常编译,运行,使用。在创建自定义用户控件的时候可以编译生成,但是把他拖到窗体上就会出现这个错误,提示:“创建XX组件失败,错误消息为,在ServiceModel客户配置...

    问题现象:
    在窗体中,通过VS的添加服务引用后,代码可以正常编译,运行,使用。在创建自定义用户控件的时候可以编译生成,但是把他拖到窗体上就会出现这个错误,提示:“创建XX组件失败,错误消息为,在ServiceModel客户配置部分中,找不到引用的协定aaservice的默认终结点元素。这可能是因为未找到应用程序中的配置文件,或者客户端元素中找不到与此协议匹配的德终结点元素”。


    解决方案:

    if (!DesignMode)

    //有调用WCF服务的方法

    ----------------------------------------------------------------------------------------------

    参考:
       是因为你的配置信息存在于配置文件里,而其他地方队此控件的引用,没有导入对应的配置信息或者说配置文件里没有需要的配置信息,所以导致不能使用服务。可行的解决办法2个:
    1.在使用你自定义控件的程序里的配置文件里把以前的客户端添加服务引用的信息导入到你需要使用此控件的项目里。这样使用此服务的程序里的对应的WCF 服务调用才能找到正确的配置信息。
    2.使用编程方式,把客户端添加服务引用的配置信息,编写代码,来设置这些信息,这样的话就不需要在因为找不到配置文件里的信息而出错。
       方式2比较适合你的情况,客户端调用服务,在客户端配置文件里比较重要的就是服务的终结点地址,还有一些超时、消息模式等信息,你注意一下。配置文件能搞定的事情,代码都可以搞定。

    展开全文
  • 窗体Panel中添加新的窗体(C#,winform开发) 本文的要写的是如何将窗体(Form)添加到panel中。 为什么要这样呢? 1)如果用tab控件,整个窗体控件太多,不易于我们编程; 2)可以更灵活的控制窗体的布局。 ...
  • 窗体Panel中添加新的窗体(C#,winform开发) 本文的要写的是如何将窗体(Form)添加到panel中。 为什么要这样呢? 1)如果用tab控件,整个窗体控件太多,不易于我们编程; 2)可以更灵活
  • 目的要写的是如何将窗体(Form)添加到panel。 为什么要这样呢? 1)如果用tab控件,整个窗体控件太多,不易于我们编程; 2)可以更灵活的控制窗体的布局。 我想你一定看过这样的配制信息窗体吧(迅雷的...
  • <br />文的要写的是如何将窗体(Form)添加到panel。 为什么要这样呢? 1)如果用tab控件,整个窗体控件太多,不易于我们编程; 2)可以更灵活的控制窗体的布局。 我想你一定看过这样...
  • C#Panel中添加新的窗体(Form)

    千次阅读 2011-03-16 12:24:00
    <br />本文的要写的是如何将窗体(Form)添加到panel。 为什么要这样呢? 1)如果用tab控件,整个窗体控件太多,不易于我们编程; 2)可以更灵活的控制窗体的布局。   我想你...
  • 每次按下键盘的某个按键,截一张图,然后在窗体旁边的控件(容器A)上显示这张图片,目前我使用FlowLayoutPanel作为容器A,每生成一张图片就新添加一个PictureBox来显示该图片,并将PictureBox添加到容器A,每次...
  • 控件窗体大小变化而变化即要OnSize(UINT nType, int cx, int cy)函数中添加如下代码: 假设m_sheet为某控件的成员变量: m_sheet.SetWindowPos(NULL,0,0,cx,cy/3,SWP_NOZORDER|SWP_NOMOVE); 这样写,会...
  • 我想快速给WPF程序添加托盘菜单1 简单要求:使用开源控件XAML中声明托盘菜单,就像给控件添加ContextMenu一样封装了常用命令,比如:打开主窗体、退出应用程序等我TerminalMACS中添加了托盘菜单,最终实现的...
  • 问:一个Form,有些控件我不想换肤,请问有没有办法解决? 答:如果不想对某个控件换肤,请设置它的Tag属性与SkinEngine控件的DisableTag属性相等。 这个属性的值默认为9999,您也可以修改它。问:当我设置了...
  • 利用C#编写Windows窗体程序的过程,程序运行过程界面如果没有一些提示总是感觉缺点儿什么,给用户的感觉不知道程序是否运行,所以这是就想到了为程序添加进度条控件ProgressBar,但是进度条添加上以后,...
  • 在aspx窗体中,如果有ASP:Button按钮,那么这个按钮就会自动具有焦点,在窗体中不论什么控件上按回车键,最会都会导致按钮postback并触发按钮的click事件。如果希望在窗体中的文本框中按下回车键时,完成其他操作,...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 167
精华内容 66
关键字:

在窗体中添加什么控件