C#的托盘程序过程

www.wanyouc.com  www.cnhgds.com  www.yunweis.com

让我们来制作一个带菜单托盘程序,主窗体一直隐藏,通过托盘菜单可以调出子窗体.

 

1.>    新建一个新的Windows应用程序. 项目名为: WrmNotify.

2.>   将From1改名为:FrnMian

         设置FrnMian的Text 属性为 :托盘菜单

           添加一个 NotifyIcon 组件和一个 ContextMenuStrip组件到FrnMian中.默认设置

3> 设置NotifyIcon属性

      ( 因为默认所以控件名称为notifyIcon1同理ContextMenuStrip控件名称为 contextMenuStrip1)

      设置notifyIcon1的Visible属性为True 表示该控件为可见.

       设置notifyIcon1的的Icon属性,这里随便指定一个图标文件即可,主要是设置在系统栏中显示的图标,即托盘显示的图标.

      设置notifyIcon1控件的ContextMenuStrip属性为 contextMenuStrip1,将用户单击托盘图标显示的菜单指向 contextMenuStrip1

      设置notifyIcon1控件的的Text属性为: 杨云飞制作 ,表示鼠标悬停在托盘图标时显示的文本.

4> 设置 ContextMenuStrip的属性

       设置contextMenuStrip1的Text 属性为托盘菜单

      设置contextMenuStrip1的Items 属性即 设置菜单名称

       这里 我们设置3个选项, 发布 接收 退出

      可以这样设置: 点选 contextMenuStrip1 设置ToolStripMenuItem文本为 发布 接收 退出

           

       如图<1>所示:

   

   或者在FrnMian.Designer.cs文件中输入

         private System.Windows.Forms.ContextMenuStrip contextMenuStrip1;
private System.Windows.Forms.ToolStripMenuItem 发布ToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem 接收ToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem 退出ToolStripMenuItem;

5> 设置 退出 响应事件

     这里退出为退出整个程序

     双击 图<1>中的 退出 进出 代码编辑界面, 编辑 退出 响应事件

           private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)
{
退出ToolStripMenuItem.Enabled = false; //单击退出后 退出选项为不可用
if (MessageBox.Show("真的退出吗?", "退出", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{                //点击是后的代码 
// this.Close(); //关闭当前窗口     
Application.Exit();   //整个应用程序退出
}
else
{      //点击否后的代码
退出ToolStripMenuItem.Enabled = true;
}   
}

6>   将主窗体隐藏

      在Load事件事件中设置 notifyIcon1.Visible = true;

     //Load事件
private void FrmMain_Load(object sender, EventArgs e)
{
notifyIcon1.Visible = true; 
}

       设置FrnMian 的 ShowIcon 和ShowInTaskbar 属性为 False

       设置 FrnMian 的 WindowState 属性为Minimized 即开始时候最小化 这样主窗体就隐藏了

7> 设置 发布 响应事件

       添加一个新的Windows应用窗体 命名为:FrmPostTask.cs

     设置FrmPostTask窗体的Text属性为 发布信息    窗口标题显示文字 ,也可以不设置.

      设置FrmPostTask的StartPosition 属性为 CenterScreen 即窗体第一次居中显示

     注意FrmPostTask的其它属性根据自己的喜好设置

    切换到主窗体 FrmMain 双击 图<1>中的 发布进出 代码编辑界面, 编辑 发布 响应事件

     private void 发布ToolStripMenuItem_Click(object sender, EventArgs e)
{
//只打开一个发布窗口
发布ToolStripMenuItem.Enabled = false; //发布控件不可用
FrmPostTask frmPostTask = new FrmPostTask();
try
{
frmPostTask.ShowDialog(); //发布窗体显示
}
finally
{
frmPostTask.Dispose();//发布窗体关闭
发布ToolStripMenuItem.Enabled = true;//发布控件可用
}
}

这样就实现了 发布窗体的打开

8> 设置 接收 响应事件

参考7>编辑即可

新建 FrmViewTask.cs

Test 属性为 接收消息

   主窗体接收响应事件为

        private void 接收ToolStripMenuItem_Click(object sender, EventArgs e)
{
接收ToolStripMenuItem.Enabled = false;
FrmViewTask frmViewTask = new FrmViewTask();
try
{
frmViewTask.ShowDialog();
}
finally
{
frmViewTask.Dispose();
接收ToolStripMenuItem.Enabled = true;
}
}

9> 扩展 窗口间的传值

   需要登录才能发布 登录成功以后不再弹出登录窗口

   即第一次点发布的时候弹出登录框,登录成功不再弹出

   

首先新建一个Windows应用窗体命名为FrmLogin.cs

拖入6个控件到窗体中 Label TextBox Button 各2个 默认设置并布局好

将Label 1 Label 2的Text属性分别设置为" 用户名", "密 码"
将Button1 Button2的属性分别设置为 "登录", "取消"字体大小颜色等根据自己的喜好设置

                                                                                                                                  图    2

设置FrmLogin的StartPostion属性为CenterScreen 窗口居中 显 示  

       Text属性为登录 ShowInTaskbar 属性为False 即不在任务栏 中显示   

         FormBorderStyle 属性为None即窗体不显示标题栏窗体大小和背景颜色等自由设置

        这里我设置的是背景为黄色并将窗体的大小固定,简单的方法是将窗体和6个控件的布局调好后将 MaximumSize MinimumSize 的属性和Size的属性设置为一样的 这样窗体就构造好了. 如图2所示

         在     主窗体 FrmMain中加入如下代码, 设置属性可以向子窗体传值

        private bool _adminLogin;     //是否登录
public bool AdminLogin      //属性
{
get
{
return _adminLogin;
}
set
{
_adminLogin = value;
}
}

将        FrnMian_Load()修改为

       private void FrnMian_Load(object sender, EventArgs e)
{
notifyIcon1.Visible = true;
AdminLogin = false; //为AdminLogin赋初值,表示首次运行没有登录
}

将        发布ToolStripMenuItem_Click(object sender, EventArgs e)修改为

      private void 发布ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (!AdminLogin)
{
发布ToolStripMenuItem.Enabled = false;
FrmLogin frmLogin = new FrmLogin();
try
{
frmLogin.Owner = this;///重要的一步,主要是使Form2的Owner指针指向Form1
frmLogin.ShowDialog();
}
finally
{
frmLogin.Dispose();
发布ToolStripMenuItem.Enabled = true;
}

            }

            if (AdminLogin)
{
发布ToolStripMenuItem.Enabled = false;
FrmPostTask frmPostTask = new FrmPostTask();
try
{
frmPostTask.ShowDialog();
}
finally
{
frmPostTask.Dispose();
发布ToolStripMenuItem.Enabled = true;
}
}    
}

转到 FrmLogin 窗体双击 图2所示的 取消按钮 进入取消按钮(button2)的事件响应 代码如下:

          private void button2_Click(object sender, EventArgs e)
{
Close();//关闭当前窗体;  

      }

这个时候我们运行程序 可以发现 点击 发布时进入的是登录窗体,而且 发布按钮为不可用

                                                   点击登录窗体的取消按钮我们会发现登录窗体消失 发布按钮可用

                                                    在点击还是进入登录界面 这是因为我们对登录没有做处理

转到FrmLogin 窗口 双击 图2所示的 确定 按钮 进去确定(button1)的事件响应 代码如下:

        private void button1_Click(object sender, EventArgs e)
{
string s1 = textBox1.Text.ToString();
string s2 = textBox2.Text.ToString();
if (s1 == "")
{
MessageBox.Show("用户名为空");
textBox2.Text = "";
textBox1.Focus(); //用户名为空返回游标指向用户名输入处
return;
}
if (s2 == "")
{
MessageBox.Show("密码为空为");
textBox2.Focus(); //密码为空返回游标指向密码输入处
return;
}
if (s1 != "" && s2 != "")
{
string usename = "yangyunfei";
string password="yangyunfei";

                if (s1 == usename && s2 == password)//比较登录用户名和密码
{
MessageBox.Show("登录成功!");
}
else
{
MessageBox.Show("用户名或密码错误!");
textBox1.Text = "";
textBox2.Text = "";
return;
}
textBox1.Text = "";
textBox2.Text = "";
FrmMian lForm1 = (FrmMian)this.Owner;//把Form2的父窗口指针赋给lForm1
lForm1.AdminLogin = true;//使用父窗口指针赋值
Close();
}
}

这个时候运行程序会发现当我们输入正确的用户名和密码的时候,登录框消失 打开发布窗口, 我们关闭发布窗口.点击 托盘中 发布 打开的还是发布窗体 不再显示登录窗体 ,说明 登录窗体修改了主窗体的值.

补充说明 : 登录窗体的密码显示的是明文 ,设置 textBox2的 UseSystmPasswordChar属性为True 就可以了 再次运行就成功了.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值