您的位置:首页 > 编程语言 > C#

小白自学C#之《C#.net_经典编程例子400个》实例001带历史信息的菜单 附自学源码

2017-02-11 18:05 666 查看
第一部分,原文章程序

实例001  带历史信息的菜单

实例说明
在开发图纸管理软件时,要求在菜单上记录用户最近打开的档案或图纸,以方便下次使用。如图1.1所示,单击“文件”菜单下的“打开文件”子菜单,打开需要查阅的图纸。下次运行该软件时,上次打开的文件名记录到“文件”菜单的历史菜单中,选择该菜单,即可打开相应的图纸文件。
技术要点
要实现保存最近打开的文件,可以将在菜单中最近打开文件的文件名和路径保存到事先建立的*.ini文件中,系统启动时读取*.ini中的数据建立数组菜单,即可实现显示历史菜单的功能。
 注意:要建立一个带历史信息的菜单,必须首先添加一个MenuStrip菜单控件,并将主窗体的IsMdiContainer属性设为True。
实现过程
(1)创建一个项目,将其命名为Ex01_01,默认窗体为Form1。
(2)从工具箱中向Form1窗体添加MenuStrip控件,同时向窗体添加OpenFileDialog控件。创建一个“文件”主菜单,在其下面创建打开、关闭所有、退出等菜单选项。
(3)主要程序代码。
将打开文件路径写入INI文件的实现代码如下:
       
private void 打开ToolStripMenuItem_Click(objectsender, EventArgs e)
{
openFileDialog1.FileName = "";
this.openFileDialog1.ShowDialog();
StreamWriter s = new StreamWriter(address + "\\Menu.ini", true);
s.WriteLine(openFileDialog1.FileName);//写入INI文件
s.Flush();
s.Close();
ShowWindows(openFileDialog1.FileName);
}


读取INI文件并将信息加入菜单的实现代码如下:
     
private voidForm1_Load(object sender, EventArgs e)
{
StreamReader sr = new StreamReader(address + "\\Menu.ini");
int i = this.文件ToolStripMenuItem.DropDownItems.Count-2;
while (sr.Peek()>=0)//读取INI文件
{
ToolStripMenuItem menuitem = new ToolStripMenuItem(sr.ReadLine());
this.文件ToolStripMenuItem.DropDownItems.Insert(i,menuitem);
i++;
menuitem.Click += new EventHandler(menuitem_Click);
}
sr.Close();
}


自定义方法ShowWindows()用来加载背景图片并显示窗体,实现代码如下:
       
public voidShowWindows(string fileName)
{
Image p = Image.FromFile(fileName);
Form f = new Form();
f.MdiParent = this;
f.BackgroundImage = p;
f.Show();
}


举一反三
根据本实例,读者可以开发以下程序。
  记录用户操作菜单日志的程序。在用户单击菜单时,把用户、菜单命令和菜单对应功能写入保存菜单日志的INI文件。如果需要查看日志,只需打开INI文件。
  通过数据库保存菜单历史信息的程序。
  菜单使用频率的程序。把用户使用菜单的数据信息保存到数据库中,然后统计用户使用菜单的频率,并根据此频率调整菜单的显示顺序。



第二部分,小白笔记

源码如下
using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.IO;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

namespace Ex01_001

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        

        /// <summary>

        /// 自定义address用于记录当前路径

        /// </summary>

        string address = System.Environment.CurrentDirectory;

        /// <summary>

        /// 自定义方法ShowWindows()用来加载背景图片并显示窗体,实现代码如下:

        /// </summary>

        /// <param name="fileName"></param>

        public void ShowWindows(string fileName)

        {

            Image p = Image.FromFile(fileName);

            Form f = new Form();

            f.MdiParent = this;

            f.BackgroundImage = p;

            f.Show();

        }

        /// <summary>

        /// 将打开文件路径写入INI文件的实现代码如下

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void 打开ToolStripMenuItem_Click(object sender, EventArgs e)

        {

            openFileDialog1.FileName = "";

            this.openFileDialog1.ShowDialog();

            StreamWriter s = new StreamWriter(address + "\\Menu.ini", true);

            s.WriteLine(openFileDialog1.FileName);//写入INI文件

            s.Flush();

            s.Close();

            ShowWindows(openFileDialog1.FileName);

        }

        private void menuitem_Click(object sender, EventArgs e)

        {

            ToolStripMenuItem Mymeun = (ToolStripMenuItem)sender;

            ShowWindows(Mymeun.Text);

        }

        /// <summary>

        /// 读取INI文件并将信息加入菜单的实现代码如下:

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void Form1_Load(object sender, EventArgs e)

   
4000
    {

            StreamReader sr = new StreamReader(address + "\\Menu.ini");

            int i = this.文件ToolStripMenuItem.DropDownItems.Count - 2;

            while (sr.Peek() >= 0)//读取INI文件

            {

                ToolStripMenuItem menuitem = new ToolStripMenuItem(sr.ReadLine());

                this.文件ToolStripMenuItem.DropDownItems.Insert(i, menuitem);

                i++;

                menuitem.Click += new EventHandler(menuitem_Click);

              //  menuitem.Click += new EventHandler(menuitem_Click);

            }

            sr.Close();

        }

    }

}

运行结果为:



网上找了几种获取路径的方法,及说明
//获取包含清单的已加载文件的路径或 UNC 位置。

        public static string sApplicationPath = Assembly.GetExecutingAssembly ( ).Location;

        //result: X:\xxx\xxx\xxx.dll (.dll文件所在的目录+.dll文件名)

 

        //获取当前进程的完整路径,包含文件名(进程名)。

        string str = this.GetType ( ).Assembly.Location;

        //result: X:\xxx\xxx\xxx.exe (.exe文件所在的目录+.exe文件名)

 

        //获取新的 Process 组件并将其与当前活动的进程关联的主模块的完整路径,包含文件名(进程名)。

        string str = System.Diagnostics.Process.GetCurrentProcess ( ).MainModule.FileName;

        //result: X:\xxx\xxx\xxx.exe (.exe文件所在的目录+.exe文件名)

 

        //获取和设置当前目录(即该进程从中启动的目录)的完全限定路径。

        string str = System.Environment.CurrentDirectory;

        //result: X:\xxx\xxx (.exe文件所在的目录)

 

        //获取当前 Thread 的当前应用程序域的基目录,它由程序集冲突解决程序用来探测程序集。

        string str = System.AppDomain.CurrentDomain.BaseDirectory;

        //result: X:\xxx\xxx\ (.exe文件所在的目录+"\")

 

        //获取和设置包含该应用程序的目录的名称。

        string str = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase;

        //result: X:\xxx\xxx\ (.exe文件所在的目录+"\")

 

        //获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称。

        string str = System.Windows.Forms.Application.StartupPath;

        //result: X:\xxx\xxx (.exe文件所在的目录)

 

        //获取启动了应用程序的可执行文件的路径,包括可执行文件的名称。

        string str = System.Windows.Forms.Application.ExecutablePath;

        //result: X:\xxx\xxx\xxx.exe (.exe文件所在的目录+.exe文件名)

 

        //获取应用程序的当前工作目录(不可靠)。

        string str = System.IO.Directory.GetCurrentDirectory ( );

        //result: X:\xxx\xxx (.exe文件所在的目录)

 

在系统服务中最好用这个方式去取路径

                string stmp = Assembly.GetExecutingAssembly ( ).Location;

                stmp = stmp.Substring ( 0 , stmp.LastIndexOf ( '\\' ) );//删除文件名

                if ( pathType == 1 )

                    return stmp + @"\inputLog.xml";

                else if ( pathType == 2 )

                    return stmp + @"\MiddleDB.xml";

                else

                    return stmp + @"\AppNo.xml";

 

using System.IO;

        string path = "d:asdfasdf.bmp";

        string fileName = Path.GetFileName(path); //文件名

        string ext = Path.GetExtension(path); //扩展名
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C#自学