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

c# 一个托盘程序的详细设计过程(用户登录)

2010-12-29 22:42 405 查看
整个程序的设计思路如下:

共有四个窗体(对我我们的主题托盘来说无需关注窗体之中的具体内容,只需搞清楚是怎么显示的便可),四个窗体分别是主窗体(FrnMian),登录窗体(FrmLogin),发送Email窗体(FrmPostTask),接受窗体(FrmViewTask)
其中,登录窗体(FrmLogin),发送Email窗体(FrmPostTask),接受窗体(FrmViewTask)分别对应托盘右键菜单的三个菜单选项,主窗体用来存放NotifyIcon控件,和ContextMenuStrip控件
整个过程是通过右击托盘菜单进入登录界面,验证成功后顺利进入相应的窗体:快捷菜单有三个菜单项,名称分别为:发Email,接收,和退出,单击发Email菜单时会首先进入登录界面,经过验证成功后会进入发送Email的窗体,单击接收菜单时会进入另一个窗体,单击退出菜单时会提示是否退出整个程序

整个程序设计过程如下

一:主窗体(FrnMian)
1:首先,设置窗体Form1属性。窗体名称设置为FrnMianShowInTaskBar属性为false(为了不让其在任务栏显示) ,ShowIcon设置为false(不显示窗体图标) ,Text属性赋值为托盘菜单
2:在窗体中添加一个NotifyIcon控件,名称为TrayIcon,Icon属性是为托盘添加一个图标,就像QQ图标一样,在这里我们可以选择一个我们喜欢的图标
3:再为窗体添加一个ContextMenuStrip控件(这是右键快捷菜单),名称还是contextMenuStrip1,然后为快捷菜单添加三个菜单项,分别为:发Email,接收,和退出,并且为发Email菜单项添加图标
做好后如下图所示:



4:然后设置TrayIcon的contextMenuStrip属性为contextMenuStrip1,使contextMenuStrip1绑定到TrayIcon
至此第一步已完成,运行程序会在状态栏出现我们的托盘图标,右击托盘,会出现快捷菜单,有几个菜单项,可以点击,但是没有任何反应,因为我们没有写单击事件

二:登录窗体(FrmLogin)

1:新建一个windows窗体,并命名为FrmLogin,(我们可以组织我们自己的登陆界面,在这里我用了一个Panel控件,并用Photoshop画了一张图片作为Panel的底面图片,当然你也可以不用),设置

ShowInTaskBar属性为false,StartPosition属性为CenterParent是窗体一开始出现在最中央;Text属性为登陆;FromBorderStyle属性为None,是窗体的外观;设置其背景颜色为Peru
2:在窗体上添加四个标签,分别为:用户名,密码,验证码,密码提示;一个PictureBox控件(用来作为验证码的图片显示);两个按钮,分别为确定和取消;三个TextBox控件作为输入用户名,密码和验证码

以上做完后登陆界面效果如下,当然你自己的可以简单点就行



这一步就完成了登陆窗体的布局

三:再一次新建FrmPostTask和FrmViewTask两个窗体

1:FrmPostTask窗体的Name为FrmPostTask,该窗体是点击发送Email
菜单并经过登陆验证后进入的窗体,Text属性为发送Email,设置MaxmizeBox属性为False使窗体不能被最大化,设置MaximumSize和MaximumSize大小一样(比如都为445, 319)以使窗体的大小不变;StartPosition属性为
CenterParent;
2:对于FrmViewTask窗体的Name为FrmViewTask,该窗体是点击接收菜单后进入的窗体,其Text属性为接收,其他的属性设置和FrmPostTask窗体一样
至此所有窗体的制作已全部制作完毕,接下来是代码编辑

四:为个窗体添加代码

(一):主窗体(FrnMian)
1:进入主窗体FrnMian,双击发送Email菜单项,进入代码编辑区,首先为FrnMian添加一个成员_AdminLogin,同时为_AdminLogin添加属性AdminLogin,用来记录登陆状态,表示当用户成功登陆之后,

当再次点击发送Email 菜单项时,直接进入发送E
mail窗体,不必再次经过登陆认证,代码如下:
//初始化
TrayIcon.Visible = true;
AdminLogin = false;


3:为发送Email 菜单项单击事件添加函数体(可以双击发送Email 菜单项就可直接如下该函数编辑区),代码如下:
接收ToolStripMenuItem.Enabled = false;
FrmViewTask frmViewTask = new FrmViewTask();
try
{
frmViewTask.ShowDialog();
}
finally
{
frmViewTask.Dispose();
接收ToolStripMenuItem.Enabled = true;
}


5:双击退出菜单,为其添加单击事件,代码如下:
static int Number;          //记录登陆次数
static string _Image=" ";   //记录验证码数字序列


2:在窗体构造函数中,为成员初始化,代码如下
class BllCheckCode
{
public static Color GetControllableColor(int colorBase)
{
Color color = Color.Black;

Random random = new Random();
//确保 R,G,B 均大于 colorBase,这样才能保证背景色较浅
color = Color.FromArgb(random.Next(56) + colorBase, random.Next(56) + colorBase, random.Next(56) + colorBase);
return color;
}

public static string GenerateCheckCode()
{
int number;
char code;
string checkCode = String.Empty;

System.Random random = new Random();

for (int i = 0; i < 4; i++)
{
number = random.Next();

code = (char)('0' + (char)(number % 10));

checkCode += code.ToString();
}
return checkCode;
}
}


4:编写一个对验证码进行处理的函数(变形和错位),这个如果不懂的话,可以复制到你的代码中直接用
private void pictureBox1_Click(object sender, EventArgs e)
{
Image();
}


6:为登陆按钮添加单击事件,这里有很多情况要考虑,应该很好懂的:
if (e.KeyValue == 13)
button1_Click(sender, e);
if (Number > 0)
{
label3.Visible = true;
label3.Text = "密码提示:谌豹生日?";
}


8:为TextBox1添加Keydown事件,使当按下Enter键之后,会让输入焦点到TextBox2上
if (e.KeyValue == 13)
{
textBox3.Focus();
}


10:在窗体Load函数中,添加对Image()函数的调用,使窗体一加载便会出现第一张验证码图片
private void FrmLogin_Load(object sender, EventArgs e)
{
Image();
}

至此,登陆窗体的代码以编辑完毕,运行程序可以显示相应的逻辑处理
(三):接收窗体
1:这个窗体没有实现什么功能,仅仅是通过点击接收菜单时,显示它

程序到这里就全部写完了,运行这个程序就可看到托盘的效果,祝你成功
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐