在创建一个新的项目时,会有一个自动生成的窗体,此后如要添加窗体,可按照以下步骤进行:
右键解决方案->添加->窗体(Windows窗体)。
之后在弹出的界面中可以更改此窗体类的文件名。注意,这一步不仅仅是修改了文件名称这么简单,它也会同时影响窗体的Name属性!
单击上图的“添加”按钮后,窗体的创建即完成。
控件的添加可以通过以下步骤实现:
视图->工具箱->拖动相应的控件至窗体内即可
窗体的属性包括Name,Text,Size等。
Name即窗体的名称,也就是此窗体类的类名,在代码中调用或更改窗体属性时,它是窗体唯一的身份标识;
Text即窗体上方的文本,相当于窗体功能的文本提示;
Size即窗体的大小尺寸,既可以通过鼠标拉动边框更改,也可以在属性栏内修改。
上图所选定的区域(中间栏)即为窗体的属性栏,它的右邻即为事件栏。
可以看到,窗体还可以通过导入添加图片的方式来设置窗体的背景,更改BackgroundImage属性即可实现此步骤。下方的BackgroundImageLayout可以理解为BackgroundImage这个属性的属性,它决定着图像的展示方式,默认为Tile,即按原大小进行铺排。在这里更改为了Stretch,即随窗体大小进行自适应拉伸。
窗体的事件可以在属性栏右侧一栏查看,包括Load、FormClosed、Resize等诸多事件。
Load属性可以通过双击窗体的空白区域添加,也可以在事件栏内双击对应事件添加;
其余事件一般只能通过在事件栏双击对应事件添加。
在这里介绍使用频率较多的几类事件,比如,如果要实现控件随窗体等比例缩放,需要用到Load、Resize两个事件,如果要实现关闭窗体时关闭整个应用程序,则可能需要用到Close或Closing事件。
首先需要设定两个字段,来表示窗体的长和宽:
private float X; // 当前窗体的宽度
private float Y; // 当前窗体的高度
此后在窗体的Design界面双击窗体添加Load事件、在事件栏内找到Resize事件,双击添加,此后所要使用的方法需写入这两个事件。需要用到的方法有:
///
/// 将控件的宽,高,左边距,顶边距和字体大小暂存到tag属性中
///
/// 递归控件中的控件
private void setTag(Control cons)
{
foreach (Control con in cons.Controls)
{
con.Tag = con.Width + ":" + con.Height + ":" + con.Left + ":" + con.Top + ":" + con.Font.Size;
if (con.Controls.Count > 0)
setTag(con);
}
}
// 根据窗体大小调整控件大小
private void setControls(float newx, float newy, Control cons)
{
// 遍历窗体中的控件,重新设置控件的值
foreach (Control con in cons.Controls)
{
string[] mytag = con.Tag.ToString().Split(new char[] { ':' }); // 获取控件的Tag属性值,并分割后存储字符串数组
float a = System.Convert.ToSingle(mytag[0]) * newx; // 根据窗体缩放比例确定控件的值,宽度
con.Width = (int)a; // 宽度
a = System.Convert.ToSingle(mytag[1]) * newy; // 高度
a = System.Convert.ToSingle(mytag[2]) * newx;//左边距离
con.Left = (int)a;
a = System.Convert.ToSingle(mytag[3]) * newy;//上边缘距离
con.Top = (int)a;
Single currentSize = System.Convert.ToSingle(mytag[4]) * newy;//字体大小
con.Font = new Font(con.Font.Name, currentSize, con.Font.Style, con.Font.Unit);
if (con.Controls.Count > 0)
{
setControls(newx, newy, con);
}
}
}
注意:在调用这两个方法前,不要将窗体的MaximumBox与MinimumBox设为False,也不要将AutoSize属性设为True!!
之后即可在事件中调用方法:
private void MainForm_Load(object sender, EventArgs e)
{
X = Width; // 获取窗体的宽度
Y = Height; // 获取窗体的高度
setTag(this); // 调用方法
}
private void MainForm_Resize(object sender, EventArgs e)
{
float newx = Width / X; // 窗体宽度缩放比例
float newy = Height / Y; // 窗体高度缩放比例
setControls(newx, newy, this); // 随窗体改变控件大小
}
这样,一个控件能随窗体大小改变的窗体就创建完成了。
或者,可以退而求其次,将窗体的AutoSize属性设为True来实现控件随其内容的自适应大小变化。
假设此时,要通过某个控件打开这个窗体,直接在对应空间的Click或其他事件内加入:“窗体名.Show()”即可。如果想要设置此窗体只能打开一次,再次点击对应控件时回到已经打开的窗体,可以通过Focus事件来实现窗体的聚焦。具体代码示例如下:
private void 前方交会_Click(object sender, EventArgs e)
{
Form f = Application.OpenForms["ForInt"]; //查找是否打开过窗体
if (f == null) //没打开过
{
ForInt forint = new ForInt();
forint.Show(); //重新new一个Show出来
}
else
{
f.Focus(); //打开过就让其获得焦点
}
}
处理十分简单,直接添加窗体的FormClosed事件处理即可,具体实例代码如下:
private void MainForm_FormClosed(object sender, FormClosedEventArgs e)
{
Application.Exit();
}
这样就可以在窗体关闭的同时关闭应用程序。
控件属性更改界面如下所示:
注意,某些常用控件,如Button、Label经常需要更改字体的格式,这就需要更改Font属性来实现预期效果。
另外,需要在文本框内键入多行文本且需要加入滚动条时,可将TextBox的ScrollBars属性设为Both,将Multiline属性设为True来实现。
几乎所有控件可以通过在Design界面双击来添加Click事件。另外,与窗体事件相同,可以在属性栏右侧的事件栏中双击对应事件来添加事件。
例如,要通过点击关闭按钮关闭窗体,则可通过以下代码实现:
private void 关闭_Click(object sender, EventArgs e)
{
Close();
}
注意,Click事件要按添加步骤添加,不可以直接复制粘贴!!
Button,按钮,单击时实现某功能;
Label,一般用作文本提示,不添加其他功能;
RadioButton,单个窗体内只能勾选一个,可以用作单选选项;
TextBox,文本框,可以手动或依靠代码写入内容,设为ReadOnly时无法手动写入
PictureBox,图框,用来作图的容器;
MenuStrip,紧贴在窗体上侧的菜单,可以添加子选项;
ComboBox,拥有选项的文本框,只能选择对应的选项作为文本内容;
ProgressBar,进度条;
ToolTip,属性向控件,拖入窗体内,这样在所有控件的属性栏内均会多出一个“ToolTip on 控件名Tip”属性,更改这个属性可以更改鼠标移动至控件上时的文本提示内容。ToolTip自身的属性要在其自身的属性栏内调整。
以上就是本期全部内容。