C#窗体应用开发基础(一)——窗体布局篇

(一)窗体的创建

在创建一个新的项目时,会有一个自动生成的窗体,此后如要添加窗体,可按照以下步骤进行:

右键解决方案->添加->窗体(Windows窗体)。

之后在弹出的界面中可以更改此窗体类的文件名。注意,这一步不仅仅是修改了文件名称这么简单,它也会同时影响窗体的Name属性!

C#窗体应用开发基础(一)——窗体布局篇_第1张图片C#窗体应用开发基础(一)——窗体布局篇_第2张图片

 单击上图的“添加”按钮后,窗体的创建即完成。

(二)控件的添加

控件的添加可以通过以下步骤实现:

视图->工具箱->拖动相应的控件至窗体内即可

C#窗体应用开发基础(一)——窗体布局篇_第3张图片

 (三)窗体的处理

3.1 窗体属性的调整

窗体的属性包括Name,Text,Size等。

Name即窗体的名称,也就是此窗体类的类名,在代码中调用或更改窗体属性时,它是窗体唯一的身份标识;

Text即窗体上方的文本,相当于窗体功能的文本提示;

Size即窗体的大小尺寸,既可以通过鼠标拉动边框更改,也可以在属性栏内修改。

C#窗体应用开发基础(一)——窗体布局篇_第4张图片 

上图所选定的区域(中间栏)即为窗体的属性栏,它的右邻即为事件栏。 

可以看到,窗体还可以通过导入添加图片的方式来设置窗体的背景,更改BackgroundImage属性即可实现此步骤。下方的BackgroundImageLayout可以理解为BackgroundImage这个属性的属性,它决定着图像的展示方式,默认为Tile,即按原大小进行铺排。在这里更改为了Stretch,即随窗体大小进行自适应拉伸。

3.2 窗体事件的添加

 窗体的事件可以在属性栏右侧一栏查看,包括Load、FormClosed、Resize等诸多事件。

Load属性可以通过双击窗体的空白区域添加,也可以在事件栏内双击对应事件添加;

其余事件一般只能通过在事件栏双击对应事件添加。

在这里介绍使用频率较多的几类事件,比如,如果要实现控件随窗体等比例缩放,需要用到Load、Resize两个事件,如果要实现关闭窗体时关闭整个应用程序,则可能需要用到Close或Closing事件。

3.2.1 控件随窗体等比缩放

 首先需要设定两个字段,来表示窗体的长和宽:

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来实现控件随其内容的自适应大小变化。

3.2.2 已打开窗体的再聚焦

假设此时,要通过某个控件打开这个窗体,直接在对应空间的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();   //打开过就让其获得焦点
    }
}

3.2.3 窗体关闭时关闭整个程序

处理十分简单,直接添加窗体的FormClosed事件处理即可,具体实例代码如下:

private void MainForm_FormClosed(object sender, FormClosedEventArgs e)
{
    Application.Exit();
}

 这样就可以在窗体关闭的同时关闭应用程序。

(四)控件的处理

4.1 控件属性的更改

控件属性更改界面如下所示:

C#窗体应用开发基础(一)——窗体布局篇_第5张图片

 注意,某些常用控件,如Button、Label经常需要更改字体的格式,这就需要更改Font属性来实现预期效果。

另外,需要在文本框内键入多行文本且需要加入滚动条时,可将TextBox的ScrollBars属性设为Both,将Multiline属性设为True来实现。

4.2 控件事件的添加

几乎所有控件可以通过在Design界面双击来添加Click事件。另外,与窗体事件相同,可以在属性栏右侧的事件栏中双击对应事件来添加事件。

例如,要通过点击关闭按钮关闭窗体,则可通过以下代码实现:

private void 关闭_Click(object sender, EventArgs e)
{
    Close();
}

注意,Click事件要按添加步骤添加,不可以直接复制粘贴!!

4.3 控件功能简述

Button,按钮,单击时实现某功能;

Label,一般用作文本提示,不添加其他功能;

RadioButton,单个窗体内只能勾选一个,可以用作单选选项;

TextBox,文本框,可以手动或依靠代码写入内容,设为ReadOnly时无法手动写入

PictureBox,图框,用来作图的容器;

MenuStrip,紧贴在窗体上侧的菜单,可以添加子选项;

ComboBox,拥有选项的文本框,只能选择对应的选项作为文本内容;

ProgressBar,进度条;

ToolTip,属性向控件,拖入窗体内,这样在所有控件的属性栏内均会多出一个“ToolTip on 控件名Tip”属性,更改这个属性可以更改鼠标移动至控件上时的文本提示内容。ToolTip自身的属性要在其自身的属性栏内调整。

以上就是本期全部内容。

你可能感兴趣的:(窗体,c#)