using System;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace ProductManager
{
public partial class FormMain : Form
{
#region 自定义对象
private FormLogin login;
private FormLock suspend;
private ListView lvNavigate;
private TreeView tvNavigate;
private StringBuilder sbTitle;
#endregion
public FormMain()
{
#region
InitializeComponent();
sbTitle = new StringBuilder("企业销售管理系统! ");
this.IsMdiContainer = true; // 该窗体是多文档界面 (MDI) 子窗体的容器。
this.DoubleBuffered = true; // 双缓存处理,以减少闪烁。
this.DesktopBounds = Screen.GetWorkingArea(this); // 在桌面区域全屏显示。
this.AutoSizeMode = AutoSizeMode.GrowAndShrink; // 禁用手动调整窗体大小。
this.SizeGripStyle = SizeGripStyle.Hide; // 隐藏窗口大小调整手柄。
statusStrip.SizingGrip = false; // 隐藏状态栏大小调整手柄。
notifyIcon.Icon = this.Icon;
notifyIcon.Visible = true;
notifyIcon.Text = AppDomain.CurrentDomain.FriendlyName;
#endregion
}
#region TimerInfo
private void timerInfo_Tick(object sender, EventArgs e)
{
statusLabelTime.Text = string.Format(" {0:dddd yyyy-MM-dd tt h:mm:ss}", DateTime.Now);
if (this.Text.Length < sbTitle.Length)
this.Text = sbTitle.ToString(0, this.Text.Length + 1);
else
{
sbTitle.Append(sbTitle[0]);
this.Text = sbTitle.Remove(0, 1).ToString();
}
}
#endregion
#region FormLoad
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
statusLabelUser.Text = Convert.ToString(this.Tag);
infoMenu.Visible = (statusLabelUser.Text == "后台管理");
this.TreeNavigate();
}
#endregion
#region FormClosing
protected override void OnFormClosing(FormClosingEventArgs e)
{
base.OnFormClosing(e);
switch (e.CloseReason)
{
case CloseReason.ApplicationExitCall:
notifyIcon.Visible = false;
DBConnection.Server.Close();
if (login != null)
login.Dispose();
if (suspend != null)
suspend.Dispose();
break;
case CloseReason.UserClosing:
this.Visible = false;
e.Cancel = true;
break;
}
}
#endregion
#region FormVisible
protected override void OnVisibleChanged(EventArgs e)
{
base.OnVisibleChanged(e);
if (this.Visible)
this.Activate();
else
notifyIcon.ShowBalloonTip(10, notifyIcon.Text, " 在系统托盘中运行", ToolTipIcon.Info);
}
#endregion
#region notifyIcon_DoubleClick
private void notifyIcon_DoubleClick(object sender, EventArgs e)
{
this.Visible = !this.Visible;
}
#endregion
#region exitMenuItem_Click
private void exitMenuItem_Click(object sender, EventArgs e)
{
if (MessageBox.Show("您真的要退出企业销售管理系统吗?", "系统询问", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
Application.Exit();
}
#endregion
#region ListNavigate
private void ListNavigate()
{
if (lvNavigate == null)
{
lvNavigate = new ListView();
lvNavigate.Alignment = ListViewAlignment.Left;
lvNavigate.Dock = DockStyle.Fill;
lvNavigate.Font = new Font("宋体", 12F, FontStyle.Regular);
lvNavigate.LabelWrap = false; // 禁用项标签换行。
lvNavigate.LargeImageList = imageList;
lvNavigate.View = View.LargeIcon;
lvNavigate.MouseUp += new MouseEventHandler(lvNavigate_MouseUp);
}
splitterNavigate.Controls.Clear();
splitterNavigate.Controls.Add(lvNavigate);
lvNavigate.BringToFront(); // 控件移到 Z 顺序的前面。
foreach (ToolStripMenuItem menuItem in menuStrip.Items)
{
if (!menuItem.Visible)
continue;
Button btnNavigate = new Button();
btnNavigate.Font = lvNavigate.Font;
btnNavigate.Height = 32;
btnNavigate.Tag = menuItem;
btnNavigate.Text = menuItem.Text;
btnNavigate.Click += new EventHandler(btnNavigate_Click);
splitterNavigate.Controls.Add(btnNavigate);
}
(splitterNavigate.Controls[2] as Button).PerformClick();
}
private void btnNavigate_Click(object sender, EventArgs e)
{
foreach (Button btn in splitterNavigate.Controls.OfType<Button>())
{
btn.Dock = DockStyle.Bottom;
}
Button btnNavigate = sender as Button;
btnNavigate.Dock = DockStyle.Top;
lvNavigate.Clear();
lvNavigate.BeginUpdate();
foreach (ToolStripMenuItem item in (btnNavigate.Tag as ToolStripMenuItem).DropDownItems)
{
lvNavigate.Items.Add(item.Text.Substring(0, item.Text.Length - 4), 0).Tag = item;
}
StringBuilder sb = new StringBuilder(lvNavigate.Items[0].Text);
int length = (lvNavigate.ClientSize.Width - sb.Length * lvNavigate.Font.Height) / 16;
while (length-- > 0)
{
sb.Insert(0, ' ');
sb.Append(' ');
}
lvNavigate.Items[0].Text = sb.ToString(); // 文本水平居中。
lvNavigate.EndUpdate();
}
private void lvNavigate_MouseUp(object sender, MouseEventArgs e)
{
ListViewHitTestInfo info = lvNavigate.HitTest(e.Location);
if ((info.Location & ListViewHitTestLocations.Label) != 0)
{
if (info.Item.Equals(lvNavigate.Tag))
return;
ToolStripMenuItem menuItem = info.Item.Tag as ToolStripMenuItem;
if (!menuItem.OwnerItem.Equals(systemMenu) && !menuItem.OwnerItem.Equals(helpMenu))
{
foreach (Form childForm in this.MdiChildren)
{
childForm.Close();
if (Convert.ToBoolean(childForm.Tag))
return;
childForm.Dispose();
}
sbTitle.Remove(0, sbTitle.Length);
sbTitle.Append(info.Item.Text);
sbTitle.Capacity = sbTitle.Append(" ").Length;
this.Text = null;
lvNavigate.Tag = info.Item;
}
menuItem.PerformClick();
}
}
#endregion
#region TreeNavigate
private void TreeNavigate()
{
if (tvNavigate == null)
{
tvNavigate = new TreeView();
tvNavigate.Dock = DockStyle.Fill;
tvNavigate.Font = new Font("宋体", 12F, FontStyle.Regular);
tvNavigate.HotTracking = true; // 当鼠标指针经过项文本时,其外观变为超链接的形式。
tvNavigate.ImageList = imageList;
tvNavigate.Indent = 32; // 每个子树节点级别的缩进距离(以像素为单位)。默认值为 19。
tvNavigate.AfterSelect += new TreeViewEventHandler(tvNavigate_AfterSelect);
}
splitterNavigate.Controls.Clear();
splitterNavigate.Controls.Add(tvNavigate);
tvNavigate.Nodes.Clear();
tvNavigate.BeginUpdate();
TreeNode rootNode = tvNavigate.Nodes.Add("企业销售管理");
foreach (ToolStripMenuItem menu in menuStrip.Items)
{
if (!menu.Visible)
continue;
rootNode.Nodes.Add(null, null, 2, 2);
TreeNode childNode = rootNode.Nodes.Add(menu.Text.Substring(0, menu.Text.Length - 4));
foreach (ToolStripMenuItem item in menu.DropDownItems)
{
childNode.Nodes.Add(item.Text.Substring(0, item.Text.Length - 4)).Tag = item;
}
}
rootNode.ExpandAll();
tvNavigate.EndUpdate();
}
private void tvNavigate_AfterSelect(object sender, TreeViewEventArgs e)
{
if (e.Node.Level < 2) // 判断选中的节点是否为叶子节点。
return;
if (e.Node.Equals(tvNavigate.Tag))
return;
e.Node.SelectedImageIndex = 1;
ToolStripMenuItem menuItem = e.Node.Tag as ToolStripMenuItem;
if (menuItem.OwnerItem.Equals(systemMenu) || menuItem.OwnerItem.Equals(helpMenu))
tvNavigate.SelectedNode = null;
else
{
foreach (Form childForm in this.MdiChildren)
{
childForm.Close(); // 在窗体关闭时,FormClosing 事件发生。
if (Convert.ToBoolean(childForm.Tag))
{
tvNavigate.SelectedNode = tvNavigate.Tag as TreeNode;
return;
}
childForm.Dispose();
}
sbTitle.Remove(0, sbTitle.Length);
sbTitle.Append(e.Node.Text);
sbTitle.Capacity = sbTitle.Append(" ").Length;
this.Text = null;
tvNavigate.Tag = e.Node;
}
menuItem.PerformClick();
}
#endregion
#region Navigate
private void navigateMenuItem_Click(object sender, EventArgs e)
{
if (navigateMenuItem.Text == "列表导航栏(&B)")
{
navigateMenuItem.Text = "树图导航栏(&B)";
this.ListNavigate();
}
else
{
navigateMenuItem.Text = "列表导航栏(&B)";
this.TreeNavigate();
}
}
#endregion
#region SetMdiParent
private void SetMdiParent(Form frame)
{
frame.MdiParent = this; // 设置此窗体的当前多文档界面 (MDI) 父窗体。
frame.ControlBox = false; // 隐藏该窗体的标题栏中的控件框。
frame.FormBorderStyle = FormBorderStyle.None; // 窗体无边框。
frame.WindowState = FormWindowState.Maximized; // 窗体最大化。
frame.Text = null;
frame.Show();
}
private void providerMenuItem_Click(object sender, EventArgs e)
{
SetMdiParent(new FormProvider());
}
private void clientMenuItem_Click(object sender, EventArgs e)
{
SetMdiParent(new FormClient());
}
private void workerMenuItem_Click(object sender, EventArgs e)
{
SetMdiParent(new FormWorker());
}
private void buyInfoMenuItem_Click(object sender, EventArgs e)
{
SetMdiParent(new FormProductBuy());
}
private void buySelectMenuItem_Click(object sender, EventArgs e)
{
SetMdiParent(new FormSelectBuy());
}
private void sellInfoMenuItem_Click(object sender, EventArgs e)
{
SetMdiParent(new FormProductSell());
}
private void sellSelectMenuItem_Click(object sender, EventArgs e)
{
SetMdiParent(new FormSelectSell());
}
private void productTypeMenuItem_Click(object sender, EventArgs e)
{
SetMdiParent(new FormProductType());
}
private void productInfoMenuItem_Click(object sender, EventArgs e)
{
SetMdiParent(new FormProduct());
}
private void inputMenuItem_Click(object sender, EventArgs e)
{
SetMdiParent(new FormProductIn());
}
private void outputMenuItem_Click(object sender, EventArgs e)
{
SetMdiParent(new FormProductOut());
}
private void productCheckMenuItem_Click(object sender, EventArgs e)
{
SetMdiParent(new FormProductCheck());
}
private void buyTotalMenuItem_Click(object sender, EventArgs e)
{
SetMdiParent(new FormTotalBuy());
}
private void sellTotalMenuItem_Click(object sender, EventArgs e)
{
SetMdiParent(new FormTotalSell());
}
#endregion
#region SetOwnerForm
private void userMenuItem_Click(object sender, EventArgs e)
{
new FormUser().ShowDialog(this);
if (lvNavigate != null)
lvNavigate.Tag = null;
if (tvNavigate != null)
{
tvNavigate.SelectedNode = null;
tvNavigate.Tag = null;
}
}
private void backupMenuItem_Click(object sender, EventArgs e)
{
new FormBackupDB().ShowDialog(this);
}
private void serviceMenuItem_Click(object sender, EventArgs e)
{
new FormService().ShowDialog(this);
}
private void powerStateMenuItem_Click(object sender, EventArgs e)
{
if (suspend == null)
suspend = new FormLock();
suspend.ShowDialog(this); // (this) <=> suspend.Owner = this.
}
private void loginMenuItem_Click(object sender, EventArgs e)
{
if (login == null)
{
login = new FormLogin();
login.ShowInTaskbar = false; // 禁止在 Windows 任务栏中显示窗体。
}
if (login.ShowDialog(this) == DialogResult.OK) // (this) <=> login.Owner = this.
{
this.Show();
this.Activate();
this.OnLoad(EventArgs.Empty);
}
}
#endregion
#region System.Diagnostics.Process
private void calcToolMenu_Click(object sender, EventArgs e)
{
System.Diagnostics.Process.Start("calc.exe").Close(); // 启动计算器。
}
private void notepadToolMenu_Click(object sender, EventArgs e)
{
System.Diagnostics.Process.Start("notepad.exe").Close(); // 启动记事本。
}
#endregion
}
}