在制作winform程序时,设计模式中可以调整控件的大小位置,但是编译之后不能改变了,请问如何改变?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在制作winform程序时,设计模式中可以调整控件的大小位置,但是编译之后不能改变了,请问如何改变?相关的知识,希望对你有一定的参考价值。
我就是想在编译之后,通过点击按钮可以改变控件的大小,位置,等等。
using System;using System.Windows.Forms;
using System.Drawing;
namespace ControlSizeChangeEx
/// <summary>
/// This class implements sizing and moving functions for
/// runtime editing of graphic controls
/// </summary>
public class PickBox
//////////////////////////////////////////////////////////////////
// PRIVATE CONSTANTS AND VARIABLES
//////////////////////////////////////////////////////////////////
private const int BOX_SIZE = 8;
private Color BOX_COLOR = Color.White;
private ContainerControl m_container;
private Control m_control;
private Label[] lbl = new Label[8];
private int startl;
private int startt;
private int startw;
private int starth;
private int startx;
private int starty;
private bool dragging;
private Cursor[] arrArrow = new Cursor[] Cursors.SizeNWSE, Cursors.SizeNS,
Cursors.SizeNESW, Cursors.SizeWE, Cursors.SizeNWSE, Cursors.SizeNS,
Cursors.SizeNESW, Cursors.SizeWE;
private Cursor oldCursor;
private const int MIN_SIZE = 20;
//
// Constructor creates 8 sizing handles & wires mouse events
// to each that implement sizing functions
//
public PickBox()
for (int i = 0; i < 8; i++)
lbl[i] = new Label();
lbl[i].TabIndex = i;
lbl[i].FlatStyle = 0;
lbl[i].BorderStyle = BorderStyle.FixedSingle;
lbl[i].BackColor = BOX_COLOR;
lbl[i].Cursor = arrArrow[i];
lbl[i].Text = "";
lbl[i].BringToFront();
lbl[i].MouseDown += new MouseEventHandler(this.lbl_MouseDown);
lbl[i].MouseMove += new MouseEventHandler(this.lbl_MouseMove);
lbl[i].MouseUp += new MouseEventHandler(this.lbl_MouseUp);
//////////////////////////////////////////////////////////////////
// PUBLIC METHODS
//////////////////////////////////////////////////////////////////
//
// Wires a Click event handler to the passed Control
// that attaches a pick box to the control when it is clicked
//
public void WireControl(Control ctl)
ctl.Click += new EventHandler(this.SelectControl);
/////////////////////////////////////////////////////////////////
// PRIVATE METHODS
/////////////////////////////////////////////////////////////////
//
// Attaches a pick box to the sender Control
//
private void SelectControl(object sender, EventArgs e)
if (m_control is Control)
m_control.Cursor = oldCursor;
//Remove event any pre-existing event handlers appended by this class
m_control.MouseDown -= new MouseEventHandler(this.ctl_MouseDown);
m_control.MouseMove -= new MouseEventHandler(this.ctl_MouseMove);
m_control.MouseUp -= new MouseEventHandler(this.ctl_MouseUp);
m_control = null;
m_control = (Control)sender;
//Add event handlers for moving the selected control around
m_control.MouseDown += new MouseEventHandler(this.ctl_MouseDown);
m_control.MouseMove += new MouseEventHandler(this.ctl_MouseMove);
m_control.MouseUp += new MouseEventHandler(this.ctl_MouseUp);
//Add sizing handles to Control's container (Form or PictureBox)
for (int i = 0; i < 8; i++)
m_control.Parent.Controls.Add(lbl[i]);
lbl[i].BringToFront();
//Position sizing handles around Control
MoveHandles();
//Display sizing handles
ShowHandles();
oldCursor = m_control.Cursor;
m_control.Cursor = Cursors.SizeAll;
public void Remove()
HideHandles();
m_control.Cursor = oldCursor;
private void ShowHandles()
if (m_control != null)
for (int i = 0; i < 8; i++)
lbl[i].Visible = true;
private void HideHandles()
for (int i = 0; i < 8; i++)
lbl[i].Visible = false;
private void MoveHandles()
int sX = m_control.Left - BOX_SIZE;
int sY = m_control.Top - BOX_SIZE;
int sW = m_control.Width + BOX_SIZE;
int sH = m_control.Height + BOX_SIZE;
int hB = BOX_SIZE / 2;
int[] arrPosX = new int[] sX+hB, sX + sW / 2, sX + sW-hB, sX + sW-hB,
sX + sW-hB, sX + sW / 2, sX+hB, sX+hB;
int[] arrPosY = new int[] sY+hB, sY+hB, sY+hB, sY + sH / 2, sY + sH-hB,
sY + sH-hB, sY + sH-hB, sY + sH / 2;
for (int i = 0; i < 8; i++)
lbl[i].SetBounds(arrPosX[i], arrPosY[i], BOX_SIZE, BOX_SIZE);
/////////////////////////////////////////////////////////////////
// MOUSE EVENTS THAT IMPLEMENT SIZING OF THE PICKED CONTROL
/////////////////////////////////////////////////////////////////
//
// Store control position and size when mouse button pushed over
// any sizing handle
//
private void lbl_MouseDown(object sender, MouseEventArgs e)
dragging = true;
startl = m_control.Left;
startt = m_control.Top;
startw = m_control.Width;
starth = m_control.Height;
HideHandles();
//
// Size the picked control in accordance with sizing handle being dragged
// 0 1 2
// 7 3
// 6 5 4
//
private void lbl_MouseMove(object sender, MouseEventArgs e)
int l = m_control.Left;
int w = m_control.Width;
int t = m_control.Top;
int h = m_control.Height;
if (dragging)
switch (((Label)sender).TabIndex)
case 0: // Dragging top-left sizing box
l = startl + e.X < startl + startw - MIN_SIZE ? startl + e.X : startl + startw - MIN_SIZE;
t = startt + e.Y < startt + starth - MIN_SIZE ? startt + e.Y : startt + starth - MIN_SIZE;
w = startl + startw - m_control.Left;
h = startt + starth - m_control.Top;
break;
case 1: // Dragging top-center sizing box
t = startt + e.Y < startt + starth - MIN_SIZE ? startt + e.Y : startt + starth - MIN_SIZE;
h = startt + starth - m_control.Top;
break;
case 2: // Dragging top-right sizing box
w = startw + e.X > MIN_SIZE ? startw + e.X : MIN_SIZE;
t = startt + e.Y < startt + starth - MIN_SIZE ? startt + e.Y : startt + starth - MIN_SIZE;
h = startt + starth - m_control.Top;
break;
case 3: // Dragging right-middle sizing box
w = startw + e.X > MIN_SIZE ? startw + e.X : MIN_SIZE;
break;
case 4: // Dragging right-bottom sizing box
w = startw + e.X > MIN_SIZE ? startw + e.X : MIN_SIZE;
h = starth + e.Y > MIN_SIZE ? starth + e.Y : MIN_SIZE;
break;
case 5: // Dragging center-bottom sizing box
h = starth + e.Y > MIN_SIZE ? starth + e.Y : MIN_SIZE;
break;
case 6: // Dragging left-bottom sizing box
l = startl + e.X < startl + startw - MIN_SIZE ? startl + e.X : startl + startw - MIN_SIZE;
w = startl + startw - m_control.Left;
h = starth + e.Y > MIN_SIZE ? starth + e.Y : MIN_SIZE;
break;
case 7: // Dragging left-middle sizing box
l = startl + e.X < startl + startw - MIN_SIZE ? startl + e.X : startl + startw - MIN_SIZE;
w = startl + startw - m_control.Left;
break;
l = (l < 0) ? 0 : l;
t = (t < 0) ? 0 : t;
m_control.SetBounds(l, t, w, h);
//
// Display sizing handles around picked control once sizing has completed
//
private void lbl_MouseUp(object sender, MouseEventArgs e)
dragging = false;
MoveHandles();
ShowHandles();
/////////////////////////////////////////////////////////////////
// MOUSE EVENTS THAT MOVE THE PICKED CONTROL AROUND THE FORM
/////////////////////////////////////////////////////////////////
//
// Get mouse pointer starting position on mouse down and hide sizing handles
//
private void ctl_MouseDown(object sender, MouseEventArgs e)
dragging = true;
startx = e.X;
starty = e.Y;
HideHandles();
//
// Reposition the dragged control
//
private void ctl_MouseMove(object sender, MouseEventArgs e)
if (dragging)
int l = m_control.Left + e.X - startx;
int t = m_control.Top + e.Y - starty;
int w = m_control.Width;
int h = m_control.Height;
l = (l < 0) ? 0 : ((l + w > m_control.Parent.ClientRectangle.Width) ?
m_control.Parent.ClientRectangle.Width - w : l);
t = (t < 0) ? 0 : ((t + h > m_control.Parent.ClientRectangle.Height) ?
m_control.Parent.ClientRectangle.Height - h : t);
m_control.Left = l;
m_control.Top = t;
//
// Display sizing handles around picked control once dragging has completed
//
private void ctl_MouseUp(object sender, MouseEventArgs e)
dragging = false;
MoveHandles();
ShowHandles();
-----------------------------------------------------
这是一个自定义组件,有了它,一切就全都解决了.
想改谁,把它套谁上就行了. 参考技术A 添加6个按钮,上下左右,放大缩小。
然后在这些按钮的onclick事件中写代码控制 参考技术B 设置属性啊,控件.left距左边(top上边)的距离,大小的话你自己再看看,用的哪个属性! 参考技术C control.Size=new Size(width,height);
control.Location = new Point(x,y);
Winform 控件
※控件在视图工具箱里面找,找到之后双击即可添加进来,也可以点住拖进来
※每个工具,控件,窗体都有一个name,相当于id,用来标识该对象的名称,name值不允许重复
控件:
1、Label -- 文本显示工具
Text属性:用来设置或返回标签控件中显示的文本信息。
AutoSize 属性:用来获取或设置一个值,该值指示是否自动调整控件的大小以完整显示其内容。取值为true时,控件将自动调整到刚好能容纳文本时的大小,取值为false时,控件的大小为设计时的大小。默认值为false。
2、TextBox -- 文本框
Text属性:获得文本框的当前内容。
MaxLength 属性:用来设置文本框允许输入字符的最大长度
MultiLine 属性:用来设置文本框中的文本是否可以输入多行并以多行显示
ReadOnly属性:用来获取或设置一个值,该值指示文本框中的文本是否为只读
PasswordChar 属性:可设置一个字符来隐藏你要输入的信息,密码框
ScrollBars属性:用来设置滚动条模式
WordWrap:自动换行
3、RichTextBox --文本域
可以随意调整大小
部分属性:
Dock:定义要绑定到容器的控件边框
Multiline:控制编辑控件的文本是否能够跨越多行
ReadOnly:控制能否更改编辑控件中的文本,默认是False,改为True是只读
Enabled:指示是否已启用该控件
Visible:确定该控件是可见还是隐藏
※用法同TextBox
4、Button -- 按钮
text:修改按钮显示的文字
name:id
FlatStyle:确定当用户将鼠标移动到控件上并单击时该控件的外观
※点击事件:双击按钮可以时间某些功能
5、radioButton -- 单选按钮
text:文字
Checked:是否选中
把多个单选按钮做成互斥,winform里面没有group属性,所以要看他们父级容器(只能是上一级),如果在同一个父级下就是同一组
如果要进行分组,则将同一组的按钮放到同一个容器下 用Panel
取选中值:
每一种工具都是一个类 如:radiobutton都是radiobutton类
每一个窗体都继承自form类 所有工具也均继承自一个父类就是Control
6、checkbox -- 复选框组
Checked属性:是否选中
Tag属性:可以存储自定义数,用户自己定义
7、listbox--列表框
items:列表框中的值 是一个集合 一般用数据库读取数据来添加
SelectionMode:指示列表框将是单项选择,多项选择还是不可选择
从数据库添加数据:
首先建立数据库连接(三个类,建类程序省略),然后用下面的程序添加;
private void bt1_Click(object sender, EventArgs e) { NationData nd=new NationData(); clb1.DataSource = nd.select(); clb1.DisplayMember = "NationName"; }
根据条件设置哪项被选中
private void button1_Click(object sender, EventArgs e) { for (int i = 0; i<clb1.Items.Count;i++ ) { Nation n = new Nation(); n = (Nation)clb1.Items[i]; if (n.NationName == "壮族") { clb1.SetItemCheckState(i, CheckState.Checked); } } }
展示多项
string end = ""; int count = 0; foreach (object o in checkedListBox1.CheckedItems) { if (count > 0) end += ","; end += o.ToString(); count++; } MessageBox.Show(end);
8、combobox--下拉列表
所有用法同listbox
private void Form1_Load(object sender, EventArgs e) { NationDA da = new NationDA(); //添加一项请选择 Nation data = new Nation(); data.Code = "qxz"; data.Name = "请选择"; List<Nation> list = da.Select(); list.Add(data); comboBox1.DataSource = list; comboBox1.DisplayMember = "Name"; comboBox1.ValueMember = "Code"; }
9、NumericUpDown 控件
NumericUpDown 控件看起来像是一个文本框与一对用户可单击以调整值的箭头的组合
Increment:获取或设置单击向上或向下按钮时,该控件递增或递减的值。
Maximum:获取或设置该控件的最大值。
Minimum:获取或设置该控件的最小值。
Value:获取或设置该控件的当前值。
10、DataTimePicker -- 日期选择控件
设置选中:
private void button8_Click(object sender, EventArgs e) { //定义一个时间 string sj = "2016-1-1"; //方法1: //dateTimePicker1.Value = Convert.ToDateTime(sj); //方法2: dateTimePicker1.Text = sj; }
取值可取value
11、PictureBox
外观,Image可以选择图片路径
行为,SizeMode可以设置图片大小布局方式
12、notifyicon--托盘图标工具
Text:鼠标放上显示的文字
Icon:托盘图标
Visible:可见或隐藏
ContextMenuStrip:与该图标关联的快捷菜单
13、ToolTip --鼠标移入提示框
拖进窗口后可在其他控件的属性里增加一个杂项属性
相当于给别的控件加个注释
ToolTipTitle:提示的标题
Error: 错误图标
Info :信息图标
None :不是标准图标
Warning: 警告图标
在其他控件的杂项里面选择
14、ProgressBar --进度条
value:来设置进度条当前进度
MarqueeAnimationSpeed:字幕动画的速度以毫秒为单位
Maximum:使用的范围上限
15、MouthCalender---日历
16、TreeView
标签项的分层集合 唯一一个用递归的控件
17、WebBrower
可在窗口展示网页
public Form2() { InitializeComponent(); Uri u = new Uri("http://www.baidu.com"); webBrowser1.Url = u; } private void button1_Click(object sender, EventArgs e) { Uri u = new Uri(textBox1.Text); webBrowser1.Url = u; }
18、MaskedTextBox
一个特殊的文本框可根据情况限制输入的内容
以上是关于在制作winform程序时,设计模式中可以调整控件的大小位置,但是编译之后不能改变了,请问如何改变?的主要内容,如果未能解决你的问题,请参考以下文章