烟台大学 .net 第六章实验 实验06 Windows应用编程(2)

实验06 Windows应用编程(2)

【实验目的】

  1. 掌握控件(Control)的基本属性、事件和方法的使用。
  2. 掌握消息框、通用对话框的设计。
  3. 掌握容器类控件的使用。
  4. 掌握菜单和工具栏的设计。
  5. 掌握多重窗体和多文档界面。
    【实验内容】
    以下9道实验题目最终效果,大家可运行“可执行文件”目录中各题。
    //
    //
    //
    //
    //

1、设计一个如图6-1所示的窗体:该窗体中有一个图片框,显示一副图片。要求:
(1)在窗体打开时,动态加载图片(图片资源Penguins.jpg已经在项目内。大家也可用别的图片替换。方法为:自己找到一副图片,复制后,右击项目,选择“粘贴”命令,再选择粘贴过来的图片文件,右击,选择“属性”命令,修改“复制到输出目录”属性的值为“如果较新则复制”。另外,代码中图片名称也要相应修改);
(2)设置图片显示模式为根据图片框大小缩放图片;
(3)当鼠标停留在图片框时,显示如“北京风光”的文本提示(使用ToolTip控件)。

在这里插入图片描述
//鼠标移动上去之后显示的tooltip
在这里插入图片描述
代码实现:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace test6
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            pictureBox1.Image = Image.FromFile(Application.StartupPath + @"\timg.jpg");
            pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
            toolTip1.SetToolTip(this.pictureBox1, "北京风光");
        }

      
       
    }
}

2、创建一个如图6-2所示的窗体。在窗体Load事件中动态添加一个文本为“结束”的按钮控件。实现功能:
单击按钮,打开如图中所示对话框。若单击“是”按钮,则程序结束,否则只是关闭消息框。

在这里插入图片描述
在这里插入图片描述
代码实现:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace test6
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            DialogResult dr = MessageBox.Show("确定要结束程序吗?[Yes|No]", "提示",MessageBoxButtons.YesNo,MessageBoxIcon.Warning);
            if (DialogResult.No == dr) { 
            
            }
            if (DialogResult.Yes == dr) {
                Application.Exit();
            }

        }
    }
}

3、创建一个如图6-3所示的窗体。在窗体Load事件中动态添加一个saveFileDialog、openFileDialog、文本框、两个按钮控件。文本框要求多行、带垂直滚动条。实现功能:
(1)单击打开按钮,可选择文本文件,并读取文件中内容,显示在文本框中。
(2)单击保存按钮,可将文本框中内容保存到一个文件。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代码实现:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace test6
{
    public partial class Form3 : Form
    {
        public Form3()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog pd = new OpenFileDialog();
            pd.InitialDirectory = "c:\\";
            pd.Title = "请选择文本文件";
            pd.Filter = "文本文件|*.txt";
            pd.RestoreDirectory = true;
            pd.FilterIndex = 1;
            //pd.ShowDialog();
            if (pd.ShowDialog() == DialogResult.OK)
            {
                StreamReader sr = new StreamReader(pd.FileName,Encoding.GetEncoding("gb2312"));
                string str = sr.ReadLine();
                while (str != null) {
                    richTextBox1.AppendText(str);
                    richTextBox1.AppendText("\n");
                    str = sr.ReadLine();
                }
            }


        }

        private void button2_Click(object sender, EventArgs e)
        {
            SaveFileDialog sd = new SaveFileDialog();
            sd.InitialDirectory = @"d:\";
            sd.AddExtension = true;
            sd.DefaultExt = ".txt";
            sd.Filter = "文本文件|*.txt";
            sd.FilterIndex = 1;
            sd.Title = "保存文件";
            if (sd.ShowDialog() == DialogResult.OK) {
                StreamWriter sw = new StreamWriter(sd.FileName, true, Encoding.GetEncoding("gb2312"));
                sw.Write(richTextBox1.Text);
                sw.Close();
            }
        }
    }
}

4、创建一个如图6-4所示的窗体。在窗体Load事件中动态添加一个colorDialog、一个标题为“颜色”的按钮控件。实现功能:
(1)单击颜色按钮,打开颜色对话框,将选择的颜色作为窗体背景色。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代码实现:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace test6
{
    public partial class Form4 : Form
    {
        public Form4()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ColorDialog cd = new ColorDialog();
            cd.AllowFullOpen = true;
            cd.FullOpen = true;
            cd.Color = Color.DarkBlue;
            if (cd.ShowDialog() != DialogResult.Cancel) {
                this.BackColor = cd.Color;
                this.button1.BackColor = cd.Color;
            }
        }
    }
}

5、创建一个如图6-5所示的窗体。在窗体Load事件中动态添加一个fontDialog、一个标题为“打开字体对话框”的按钮控件、一个内容为“烟台大学”的标签。实现功能:
(1)单击按钮,打开字体对话框,将选择的字体作为标签字体。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代码实现:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace test6
{
    public partial class Form5 : Form
    {
        public Form5()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            FontDialog fd = new FontDialog();
            fd.ShowColor = true;
            fd.ShowApply = true;
            fd.ShowDialog();
            label1.Font = fd.Font;
            label1.ForeColor = fd.Color;
        }
    }
}

6、创建一个如图6-6所示的窗体,并在窗体上放置一个标签、一个treeviw控件。窗体打开时,动态为treeviw控件添加节点,选择某个节点后,标签上显示所选内容。
在这里插入图片描述
代码实现:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace test6
{
    public partial class Form6 : Form
    {
        public Form6()
        {
            InitializeComponent();
        }

        private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
        {
            this.label1.Text = e.Node.Text;
        }

        private void Form6_Load(object sender, EventArgs e)
        {
            this.treeView1.Nodes.Add("k0", "根节点");//创建根节点
            //以下为创建子节点
            this.treeView1.Nodes["k0"].Nodes.Add("k1", "n1");
            this.treeView1.Nodes["k0"].Nodes.Add("k2", "n2");
            this.treeView1.Nodes["k0"].Nodes.Add("k3", "n3");

            this.treeView1.Nodes["k0"].Nodes["k1"].Nodes.Add("k11", "n11");
            this.treeView1.Nodes["k0"].Nodes["k1"].Nodes.Add("k12", "n12");
            this.treeView1.Nodes["k0"].Nodes["k1"].Nodes.Add("k13", "n13");

            this.treeView1.ExpandAll();//展开所有节点
            this.treeView1.ShowLines = true; //显示连线
        }
    }
}

7、设计如图6-7所示的窗体,当用户在ritchBox中单击鼠标右键时,弹出一个快捷菜单,单击某一城市,即可在富文本框ritchBox中显示该城市的旅游景点。
在这里插入图片描述
在这里插入图片描述
代码实现:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace test6
{
    public partial class Form7 : Form
    {
        public Form7()
        {
            InitializeComponent();
        }

        private void richTextBox1_MouseClick(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                this.contextMenuStrip1.Show(MousePosition);
            }

        }
        private void 北京ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            richTextBox1.Text = "天安门,天坛,故宫";
        }

        private void 南京ToolStripMenuItem_Click(object sender, EventArgs e)
        {
        richTextBox1.Text = "小笼包";
        }

        private void 西安ToolStripMenuItem_Click(object sender, EventArgs e)
        {
         richTextBox1.Text = "兵马俑";
        }

        private void 青岛ToolStripMenuItem_Click(object sender, EventArgs e)
        {
          richTextBox1.Text= "啤酒";
        }

        private void 上海ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            richTextBox1.Text = "外滩,田子坊,东方明珠,金融中心";
        } 
        
    }
}

8、设计如图6-8a所示的窗体。单击“开始游戏”按钮,随机给出一个[0,9]之间的整数。然后让你猜是什么数字。你可以随便猜一个数字,游戏会提示大小,从而缩小结果范围。经过几次猜测与提示后,最终猜中答案。
游戏设计思路:
(1)窗体打开时,文本框只读,即禁止在文本框标输入任何内容,且焦点在“开始游戏”按钮上。如图6-8a所示。
(2)点击“开始游戏”按钮,则①取消文本框只读;②但在文本框中只能输入09十种数字;③生成一个099的随机整数作为目标数,供游戏者猜。如图6-8b所示。
(3)游戏者在文本框标输入数字。若没猜中,给出大小提示,可以继续输入数字。如图6-8c所示。
(4)若猜中,也给出提示,清空文本框,且重新设置文本框为只读,如图6-8c所示。
(5)游戏者可以点击“结束”按钮结束程序,也可以点击“开始游戏”按钮开始新的一轮游戏,此时随机产生目标数字被重新生成。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
//
//
//
//
//这里我默认输入数字之后按回车才进行确认提交数字的功能 老师给的题目并没有说清楚,输入数字之后,该窗口如何判断输入的数字和随机数的比较,读者们注意一下。
//
//
//
//
//

代码实现:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace test6
{
    public partial class Form8 : Form
    {
        private int randkey;
        private int str;
        public Form8()
        {
            InitializeComponent();
        }

        private void Form8_Load(object sender, EventArgs e)
        {
            this.textBox1.ReadOnly = true;
            button1.TabIndex = 1;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.textBox1.ReadOnly = false;
            this.textBox1.Text=null;
            Random rd = new Random();
           randkey = rd.Next(0, 99);
      
        }
        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!(e.KeyChar == '\b' || (e.KeyChar >= '0' && e.KeyChar <= '9')))
            {
                e.Handled = true;
                str = Convert.ToInt32(textBox1.Text);
            }
            if (e.KeyChar == 13) {
                if (str == randkey)
                {
                    MessageBox.Show("猜中啦");
                    this.textBox1.ReadOnly = true;
                   
                }
                if (str < randkey)
                {
                    MessageBox.Show("小啦");
                }
                if (str > randkey)
                {
                    MessageBox.Show("大啦");
                }
            }
          
            
        }
        private void button2_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

       
    }
}

//
//
//
//
//
//最后一个实验相当复杂,请仔细阅读
//
//
//
//
9、本实验要求设计5个窗体。分别为:一个登录窗体(frmLogin)、一个MDI主窗体(frmMain)和三个子窗体(frm子窗体1、frm子窗体2、frmHelp)。
设计思路:
(1)先创建5个窗体,按上面提示修改每个窗体的名称。
(2)按图6-9提示,修改Program.cs文件中Program类。
(3)登录窗体如图6-10所示。具体要求:标题为“登录窗体”、大小不可调;启动后自动位居屏幕中央;没有最小化、最大化、关闭按钮。
在登录窗体中,若输入用户名为“u1”,且密码为“123”(密码显示为
),则通过登录。销毁登录窗体,同时打开如图6-11所示的主窗体。
否则,给出错误提示,如“用户名不能空”、“用户名错误”、“密码错误”等提示,如图6-12所示。
(4)主窗体界面如图6-11所示。主窗体中包含菜单(menuStrip1)、工具条、状态栏三个控件。提示:需要设置主窗体的IsMdiContainer属性,使之成为MDI窗体。
(5)当用户单击“打开窗体1”菜单项,或者单击“打开窗体1”工具按钮后,即可打开子窗体1,且该子窗体为主窗体子窗体。如图6-13中黄色窗体所示。
(6)当用户单击“打开窗体2”菜单项,或者单击“打开窗体2”工具按钮后,即可打开子窗体2,且该子窗体为主窗体子窗体。如图6-13蓝色窗体所示。
(6)当用户单击“垂直排列”菜单项,蓝色窗体和黄色窗体排列效果如图6-14所示。
(7)当用户单击“帮助”菜单项,蓝色窗体和黄色窗体随即关闭,同时帮助窗体打开,如图6-15所示。
注意:打开帮助窗体时,会自动关闭其他子窗体。此功能就是要求每次只打开一个子窗体。
(8)当用户单击“退出”菜单项,或者单击“结束程序”工具按钮后,弹出如图6-16所示的消息框。若单击“是”,则程序结束,若单击“否”,只是关闭消息框。
(9)注意:状态条中显示登录时用户名、文件菜单中分隔线、“退出”菜单项的快捷键和图标、三个工具按钮的提示和图标。
*

代码实现:
//
//
//
首先

 public static string getUser { get; set; }
         static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            frmLogin loginFrm = new frmLogin();
            loginFrm.ShowDialog();
            if (loginFrm.DialogResult == DialogResult.OK) {
                Application.Run(new frmMain());
           }
         
        }

//注意:上述代码是写在program.cs中的 用于控制程序启动的入口
//
//
//
//
所有子窗口程序:
在这里插入图片描述
frmLogin.cs:
在这里插入图片描述
错误提示:
在这里插入图片描述
在这里插入图片描述
代码实现:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace test6
{
    public partial class frmLogin : Form
    {
        public static string str="";
        public frmLogin()
        {
            InitializeComponent();
        }

        private void Form9_Load(object sender, EventArgs e)
        {
          
            this.MaximizeBox = false;
            this.MinimizeBox = false;
            this.ControlBox = false;
            this.FormBorderStyle = FormBorderStyle.FixedDialog;
            this.StartPosition = FormStartPosition.CenterScreen;
            
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (textBox1.Text == "u1")
            {
                str = textBox1.Text;
                if (textBox2.Text == "123")
                {
                    this.Dispose();
                    frmMain FM = new frmMain();
                    FM.ShowDialog();
                }
                else
                {
                    DialogResult dr = MessageBox.Show("密码错误", "密码验证", MessageBoxButtons.RetryCancel, MessageBoxIcon.Question);
                    if (DialogResult.Cancel == dr)
                    {
                    }
                    if (DialogResult.Retry == dr)
                    {
                        textBox2.Text = null;
                    }
                }
            }
            else if (textBox1.Text != "u1"&&textBox1.Text!="")
            {
                MessageBox.Show("用户名错误!");
            }
            else if (textBox1.Text == "")
            {
                MessageBox.Show("用户名不能为空");
            }
           

        }

    }
}

//
//
//
//
//
frmMain.cs:
在这里插入图片描述
//具体窗口内部设计 请看老师给出的文档,这里我就直接上代码了

代码实现:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace test6
{
    public partial class frmMain : Form
    {
        public frmMain()
        {
            InitializeComponent();
        }

        private void frmMain_Load(object sender, EventArgs e)
        {
            toolStripButton1.Image = Image.FromFile(Application.StartupPath + @"\p1.png");
            toolStripButton2.Image = Image.FromFile(Application.StartupPath + @"\p2.ico");
            toolStripButton3.Image = Image.FromFile(Application.StartupPath + @"\Close.png");
            this.退出AltXToolStripMenuItem.Image = Image.FromFile(Application.StartupPath + @"\key.ico");
            this.toolStripStatusLabel1.Text = frmLogin.str;
               
        }

        private void toolStripButton3_Click(object sender, EventArgs e)
        {
            DialogResult dr= MessageBox.Show("确认退出吗?", "提示",  MessageBoxButtons.YesNo,MessageBoxIcon.Information);
            if (DialogResult.No == dr) { 
            }
            if (DialogResult.Yes == dr) { 
            Application.Exit();
            }
            
        }

        private void 打开窗体1ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            frm子窗体1 f1=new frm子窗体1();
            f1.MdiParent=this;
            f1.Show();
        }

        private void 打开窗体2ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            frm子窗体2 f2 = new frm子窗体2();
            f2.MdiParent = this;
            f2.Show();
        }

        private void toolStripButton1_Click(object sender, EventArgs e)
        {
            frm子窗体1 f1 = new frm子窗体1();
            f1.MdiParent = this;
            f1.Show();
        }

        private void toolStripButton2_Click(object sender, EventArgs e)
        {
            frm子窗体2 f2 = new frm子窗体2();
            f2.MdiParent = this;
            f2.Show();
        }

        private void 垂直排列ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.LayoutMdi(MdiLayout.TileVertical);
        }

        private void 水平排列ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.LayoutMdi(MdiLayout.TileHorizontal);
        }

        private void 退出AltXToolStripMenuItem_Click(object sender, EventArgs e)
        {
            DialogResult dr = MessageBox.Show("确认退出吗?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
            if (DialogResult.No == dr)
            {
            }
            if (DialogResult.Yes == dr)
            {
                Application.Exit();
            }
        }

        private void frmMain_KeyDown(object sender, KeyEventArgs e)
        {
              if ( e.Modifiers == Keys.Alt&&e.KeyCode == Keys.X )
            {
                DialogResult dr = MessageBox.Show("确认退出吗?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
                if (DialogResult.No == dr)
                {
                }
                if (DialogResult.Yes == dr)
                {
                    Application.Exit();
                }
            }
        }

        private void 帮助ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            foreach (var item in this.MdiChildren)
            {
                item.Dispose();
            }
            frmHelp f3 = new frmHelp();
            f3.MdiParent = this;
            f3.Dock = DockStyle.Fill;
            f3.Show();
        }



      

    }
}

子窗体1和子窗体2.cs:
在这里插入图片描述
代码实现:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace test6
{
    public partial class frm子窗体1 : Form
    {
        public frm子窗体1()
        {
            InitializeComponent();
        }

        private void frm子窗体1_Load(object sender, EventArgs e)
        {
            this.BackColor = Color.Yellow;
        }
    }
}

//
//
//
//
//子窗体2代码和子窗体1一样 只不过背景颜色设置的不同
//
//
//
//
功能实现:
在这里插入图片描述
在这里插入图片描述
frmHelp.cs:
在这里插入图片描述
在这里插入图片描述
//
//
///
//
//
/
/
/
//注意,这体格窗口最重要的知识点是,无论你的窗口被你调节成多大。里面的内容总是同步跟随调节大小的,而不是呆在某一个特定的位置。
这里的这个特殊情况也是研究了很久
具体用到的就是停靠属性

/
//
//
//
///

代码实现:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace test6
{
    public partial class frmHelp : Form
    {
        public frmHelp()
        {
            InitializeComponent();
        }

        private void frmHelp_Load(object sender, EventArgs e)
        {
            string path=Application.StartupPath+@"/123.rtf";
            richTextBox1.LoadFile(path, RichTextBoxStreamType.RichText);

        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.Close();
        }

      
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值