C# 巧用anchor和dock设计复杂界面(控件随着窗体大小的变化而变化)【转】

这个在做winform程序的空间编程的时候遇到过太多次了,自己也想留下点经验,搜索了一下,这篇文章很好很强大了,感谢博主“驴子的菜园”。

程序界面如上

各部分简要说明: 整个窗体上覆盖一个splitcontainer。

splitcontainer的panel1上放置一个label与一个treeview.

splitcontainer的panel2上放置一个tabcontrol.

tabcontrol上面有两个tabpage

tabpage1上放置一个组合框,按钮两个。go 为button1,back 为button2.下面是一个webbrowser

tabpage2上放置了依次放置的控件为label 2,textbox1,label3,textbox2(具有multiline属性)

tabcontrol下方放了四个按钮。依次为button3,button4,button5,button6

下面简要介绍下dock和anchor的意义:

dock属性控制子控件在父窗口的停靠位置;anchor属性控制子控件与父控件之间的距离(自己动手试一下就明白了)

下面介绍各个控件的dock和anchor属性设置情况:

splitcontainer1:

1.anchor:top left;

2.dock :fill(充满整个窗体,使splitcontainer的大小随着winform的大小的改变而改变);

 

label1:

1.anchor: top left;

2.dock :none;

 

treeview1:

1.anchor:top left bottom right(即使窗体变化时,保持treeview1的四个边距离其父控件的距离不变,也就是treeview1跟着变大的意思);

2.dock:none;

 

tabcontrol1:

1.anchor:top left

2.dock:fill;

combobox1:

1.anchor:top left right(即当窗体变化时此控件的上边,左边,右边距离父控件的位置不变);

2.dock:none;

 

button1(go),button2(back):

1.anchor: top right;

2.dock:none.

 

webbrowser1:

1.anchor:top left right bottom

2.dock:none

 

tabpage2 上的 label2,label3 设置如label1;

textbox2,textbox3设置如combobox1

下面介绍四个button如何设置

我们设置button3(帖子提取)的anchor为 left,bottom,dock 为none;其他button的anchor属性设置为bottom,dock属性设置为none;

    当窗体长度发生变化时,我们将tabcontrol的长度分成四份(因为有四个button)。a1,a2,a3,a4,分别配给每个button。每个 button的长度为其所占用长度的3/4(这个可以随意设)代码如下:

 

窗体变化也button变化
privatevoid Form1_Resize(object sender, EventArgs e)
{

int length =this.tabControl1.Width /4;
int s=length*3/4;

button3.Width
= s;
button4.Width
= s;
button5.Width
= s;
button6.Width
= s;
button4.Location
=new   Point(button3.Location.X + length, button3.Location.Y);
button5.Location
=new Point(button4.Location.X + length, button4.Location.Y);
button6.Location
=new Point(button5.Location.X+length, button5.Location.Y);



}

注意:要在form1_load中加入代码句: this.Resize += new System.EventHandler(this.Form1_Resize);//托管

 

当我们拖拽splitcontainer时也应该有button变化。故设计代码如下:

 

窗体不变,panel1和 pannel2相对变化,button也变化
privatevoid splitContainer1_SplitterMoved(object sender, SplitterEventArgs e)
{
int length =this.tabControl1.Width /4;
int s = length *3/4;

button3.Width
= s;
button4.Width
= s;
button5.Width
= s;
button6.Width
= s;
button4.Location
=new Point(button3.Location.X + length, button3.Location.Y);
button5.Location
=new Point(button4.Location.X + length, button4.Location.Y);
button6.Location
=new Point(button5.Location.X + length, button5.Location.Y);
}

 

经过如上设置,我们的窗体界面就设计好了。我还是菜鸟,有理解不对的地方,还恳请大家指证。

转载于:https://www.cnblogs.com/280850911/archive/2012/05/18/2507838.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/267064.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

修改java启动参数_如何修改jvm启动参数

用java命令查看。用java -option进行修改参数。还有tomcat,eclipse启动时通过配置文件加载的。详细如下:安装Java开发软件时,默认安装包含两个文件夹,一个JDK(Java开发工具箱),一个JRE(Java运行环境,内含JV…

非常完善的Log4net详细说明(转)

最可能来源:https://blog.csdn.net/ydm19891101/article/details/50561638 其它转载者:http://www.cnblogs.com/zhangchenliang/p/4546352.html 1、概述 log4net是.Net下一个非常优秀的开源日志记录组件。log4net记录日志的功能非常强大。它可以将日志分…

话说招聘面试

最近公司有一个新项目,是一个软件和硬件结合的项目,具体的就是一个cs软件通过485通信操作硬件的基站,基站上面挂着传感器和其他设备, 当然我只负责软件也就是上位机部分。通过1个月多的时间,每天开会开会调研调研&…

mysql内链接与交叉连接_SQLServer 2008中的交叉连接与内部连接

这里是交叉连接和内部连接的最佳示例。考虑下表表:Teacherx------------------------x| TchrId | TeacherName |x----------|-------------x| T1 | Mary || T2 | Jim |x------------------------x表:Studentx-------------…

获得数据库中表字段的名字.txt

获得数据库中所有数据库的名字:select name From sysdatabases 获得某个数据库中所有表的名字:select name from sysobjects where typeU获得某个表中字段的名字:select name from syscolumns where idobject_id(表名)use masterif exists(S…

java pause_java – 更有效的暂停循环方式

可用的工具是:等待/通知 – 我们都试图摆脱这个古老的系统.信号量 – 一旦你的线程抓住它,你持有它直到释放,所以再次抓住它不会阻止.这意味着您无法在自己的线程中暂停.CyclicBarrier – 每次使用时都必须重新创建.ReadWriteLock – 我的最爱.您可以让任意多个线程…

jmeter java接口_JMeter接口Java开发五步曲

想做jmeter接口二次开发但不知道如何入手,要解决这个问题,我们可以分为5个步骤第一步:了解jmeter处理java请求的流程第二步:通过实现jmeter中的接口JavaSamplerClient编写自定义JAVA接口第三步:打包第四步:…

循环

# l []# for x in range(3,10):# #pass# l.append(x)# print(x,:,l)# print(l)#break/continue(break:终止。continue:继续)#list [1,2,3,4] #遍历# for x in list:# if x 3:# print(x,#*20)# break #终止当前循环# else:# pr…

Redhat ssh服务登录慢

redhat在安装以后每次通过ssh服务登录,要等待几秒才能进入。 只要在sshd_config修改一下以下值就好 vim /etc/ssh/sshd_config UseDNS no service sshd restart 再次用ssh终端登录就快了转载于:https://www.cnblogs.com/passedbylove/p/9070405.html

console程序也有版本和图标

控制台程序的版本和图标创建和编辑 最近项目要做一个能够支持批处理的文件转换工具,根据应用环境的需要,用VC6做了一个基于Console的程序,等程序做完了,突然发现需要给这个程序指定版本,一时还真有些迷糊。从来做控制台…

java面向对象语言_Java到底是不是一种纯面向对象语言?

英文原文:Why Java Is a Purely Object-Oriented Language Or Why NotJava是否确实是 “纯面向对象”?让我们深入到Java的世界,试图来证实它。在我刚开始学习Java的前面几年,我从书本里知道了Java是遵循“面向对象编程范式(Object…

Python--DBUtil

Python--DBUtil包 1 简介 DBUtils是一套Python数据库连接池包,并允许对非线程安全的数据库接口进行线程安全包装。DBUtils来自Webware for Python。 DBUtils提供两种外部接口: PersistentDB :提供线程专用的数据库连接,并自动管理…

java calendar计时器_Java Calendar setTimeInMillis()用法及代码示例

Calendar类中的setTimeInMillis(long mill_sec)方法用于根据传递的long值设置由此Calendar表示的Calendars时间。用法:public void setTimeInMillis(long mill_sec)参数:该方法采用long类型的一个参数mill_sec,表示要设置的给定日期。返回值:…

找出两个字符串数组中的相同元素

public static List<String> getAllSameElement1(String[] strArr1,String[] strArr2) { if(strArr1 null || strArr2 null) { return null; } List<String> strList1 new ArrayList<String>(Arrays.asList(strArr1)); //----------代码段1 List<…

@ConfigurationProperties和@Value不同的使用场景,@Bean添加组件 (6.spring boot配置文件注入)...

接上文 注释掉ConfigurationProperties使用Value注解 /*** <bean class"Person">* <property name"lastName" value"字面量/${key}从环境变量、配置文件中获取值/#{spel}"></property>* <bean/>*/ //Spring底层注解…

sqlite的数据导入 导出

数据导入的来源可以是其他应用程序的输出&#xff0c;也可以是指定的文本文件&#xff0c;这里采用指定的文本文件。 1. 首先&#xff0c;确定导入的数据源&#xff0c;这里是待导入的&#xff0c;按固定格式的文本文件。 2. 然后&#xff0c;依照导入的文件格式&#xff0…

java继承孙子类_Java:类与继承

Java&#xff1a;类与继承对于面向对象的程序设计语言来说&#xff0c;类毫无疑问是其最重要的基础。抽象、封装、继承、多态 这四大特性都离不开类&#xff0c;只有存在类&#xff0c;才能体现面向对象编程的特点&#xff0c;今天我们就来了解一些类与继承的相关知识。首先&am…

linux 下安装JDK

安装配置JDK 下载JDK 因为Elasticsearch需要Java环境&#xff0c;所以需先下载JDK&#xff0c;并配置Java的环境\ 下载地址&#xff1a;http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html\ 这里我选择jdk-8u151-linux-x64.tar.gz解压安装…

在ubuntu上搭建LNMP服务器

LNMP Linux Nginx MySQL PHP 安装Nginx 执行以下命令即可: apt-get install nginx不过源里的版本是0.7.65&#xff0c;不喜欢老旧的玩意&#xff0c;可以尝试编译安装。 编译安装nginx. 1.准备编译环境 apt-get install libpcre3-dev build-essential libssl-dev在这里 htt…

java 后端开发好吗_后端开发学Java好还是学c++好呢?

C与 java 的抉择为了找工作&#xff1a;选Java。为挑战自我&#xff1a;选C。很多人都说会C就能会快掌握Jave。C是不好学&#xff0c;但是我告诉你java也不好学。C难是难在语言本身&#xff0c;java难是难在各种框架和库。你单纯学个java语法&#xff0c;你什么玩意也做不了&am…