Files
ClientServerProject/软件系统客户端模版/FormMainWindow.cs

421 lines
15 KiB
C#
Raw Normal View History

2017-02-22 14:30:10 +08:00
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 BasicFramework;
using IndustryEthernet;
using Newtonsoft.Json.Linq;
using CommonLibrary;
using System.Threading;
//============================================================================
// 模版日期 2017-02-21
// 创建人 胡少林
// 版权所有 胡少林
// 授权说明 模版仅授权个人使用如需商用请联系hsl200909@163.com洽谈
// 说明 JSON组件引用自james newton-king遵循MIT授权协议
// 说明 文件的图标来源于http://fileicons.chromefans.org/,感谢作者的无私分享
2017-02-22 14:30:10 +08:00
//============================================================================
//============================================================================
//
// 注意:本代码的相关操作未作密码验证,如有需要,请自行完成
// 示例具体示例参照Form1_FormClosing(object sender, FormClosingEventArgs e)方法
// 如果遇到启动调试就退出了请注释掉Program.cs文件中的指允许启动一个实例的代码
//
//============================================================================
namespace
{
public partial class FormMainWindow : Form
{
public FormMainWindow()
{
InitializeComponent();
}
#region
/// <summary>
/// 指示窗口是否显示的标志
/// </summary>
private bool IsWindowShow { get; set; } = false;
private void FormMainWindow_Load(object sender, EventArgs e)
{
//窗口载入
label_userName.Text = UserClient.UserAccount.UserName;
label_grade.Text = AccountGrade.GetDescription(UserClient.UserAccount.Grade);
label_factory.Text = UserClient.UserAccount.Factory;
label_register.Text = UserClient.UserAccount.RegisterTime.ToString();
label_last.Text = UserClient.UserAccount.LastLoginTime.ToString();
label_times.Text = UserClient.UserAccount.LoginFrequency.ToString();
label_address.Text = UserClient.UserAccount.LastLoginIpAddress;
//状态栏设置
toolStripStatusLabel_time.Alignment = ToolStripItemAlignment.Right;
statusStrip1.LayoutStyle = ToolStripLayoutStyle.StackWithOverflow;
toolStripStatusLabel1.Text = $"本软件著作权归{Resource.StringResouce.SoftCopyRight}所有";
2017-02-22 14:30:10 +08:00
//绑定事件仅执行一次不能放到show方法里
net_socket_client.MessageAlerts += Net_socket_client_MessageAlerts;
net_socket_client.LoginFailed += Net_socket_client_LoginFailed;
net_socket_client.LoginSuccess += Net_socket_client_LoginSuccess;
net_socket_client.AcceptByte += Net_socket_client_AcceptByte;
net_socket_client.AcceptString += Net_socket_client_AcceptString;
//启动网络服务
Net_Socket_Client_Initialization();
label_Announcement.Text = UserClient.Announcement;
toolStripStatusLabel_Version.Text = UserClient.CurrentVersion.ToString();
//初始化窗口
MainRenderInitialization();
2017-02-22 14:30:10 +08:00
}
private void FormMainWindow_Shown(object sender, EventArgs e)
{
//窗口显示
IsWindowShow = true;
//是否显示更新日志
if(UserClient.JsonSettings.IsNewVersionRunning)
{
UserClient.JsonSettings.IsNewVersionRunning = false;
UserClient.JsonSettings.SaveSettings();
ToolStripMenuItem_Click(null, new EventArgs());
2017-02-22 14:30:10 +08:00
}
//根据权限使能菜单
if(UserClient.UserAccount.Grade<AccountGrade.SuperAdministrator)
{
ToolStripMenuItem.Enabled = false;
ToolStripMenuItem.Enabled = false;
ToolStripMenuItem.Enabled = false;
}
}
private void FormMainWindow_FormClosing(object sender, FormClosingEventArgs e)
{
//窗口关闭
IsWindowShow = false;
net_socket_client.ClientClose();
//等待一秒退出
FormWaitInfomation fwm = new FormWaitInfomation("正在退出程序...", 1000);
fwm.ShowDialog();
fwm.Dispose();
}
#endregion
#region
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
//实例化一个密码修改的窗口,并指定了实现修改的具体方法,指定了密码长度
FormPasswordModify fpm = new FormPasswordModify(UserClient.UserAccount.Password,
p => {
JObject json = new JObject();json.Add(UserAccount.UserNameText, UserClient.UserAccount.UserName);
json.Add(UserAccount.PasswordText, p);
return UserClient.Net_simplify_client.ReadFromServer(CommonHeadCode.SimplifyHeadCode. + json.ToString()).IsSuccess;
2017-02-22 14:30:10 +08:00
}, 6, 8);
fpm.ShowDialog();
fpm.Dispose();
}
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
FormAbout fa = new FormAbout(Resource.StringResouce.SoftName,
UserClient.CurrentVersion, 2017, Resource.StringResouce.SoftCopyRight);
2017-02-22 14:30:10 +08:00
fa.ShowDialog();
fa.Dispose();
}
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
//更新情况复位
if (UserClient.JsonSettings.IsNewVersionRunning)
{
UserClient.JsonSettings.IsNewVersionRunning = false;
UserClient.JsonSettings.SaveSettings();
}
FormUpdateLog ful = new FormUpdateLog(UserClient.HistoryVersions);
ful.ShowDialog();
ful.Dispose();
}
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
FormAboutVersion fav = new FormAboutVersion(UserClient.CurrentVersion);
fav.ShowDialog();
fav.Dispose();
}
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
FormInputAndAction fiaa = new FormInputAndAction(str => UserClient.Net_simplify_client.ReadFromServer(
2017-02-22 14:30:10 +08:00
CommonHeadCode.SimplifyHeadCode. + str).IsSuccess,UserClient.Announcement);
fiaa.ShowDialog();
fiaa.Dispose();
}
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
FormLog flg = new FormLog(UserClient.Net_simplify_client);
2017-02-22 14:30:10 +08:00
flg.ShowDialog();
flg.Dispose();
}
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
using (FormRegisterAccount fra = new FormRegisterAccount(UserClient.Net_simplify_client))
{
fra.ShowDialog();
}
}
2017-02-22 14:30:10 +08:00
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
FormAccountManage fam = new FormAccountManage(() =>
{
OperateResultString result = UserClient.Net_simplify_client.ReadFromServer(CommonHeadCode.SimplifyHeadCode.);
2017-02-22 14:30:10 +08:00
if (result.IsSuccess) return result.Content;
else return result.ToMessageShowString();
},m => UserClient.Net_simplify_client.ReadFromServer(CommonHeadCode.SimplifyHeadCode. + m).IsSuccess);
2017-02-22 14:30:10 +08:00
fam.ShowDialog();
fam.Dispose();
}
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (UserClient.UserAccount.UserName == "admin")
{
using (FormUpdateRemote fur = new FormUpdateRemote())
{
fur.ShowDialog();
}
}
else
{
MessageBox.Show("权限不足!");
}
2017-02-22 14:30:10 +08:00
}
private void linkLabel_logout_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
Program.QuitCode = 1;
Close();
}
2017-02-22 14:30:10 +08:00
#endregion
#region
private Net_Socket_Client net_socket_client = new Net_Socket_Client();
private void Net_Socket_Client_Initialization()
{
try
{
net_socket_client.KeyToken = CommonHeadCode.KeyToken;//新增的身份令牌
2017-02-22 14:30:10 +08:00
net_socket_client.EndPointServer = new System.Net.IPEndPoint(
System.Net.IPAddress.Parse(UserClient.ServerIp),
CommonLibrary.CommonLibrary.Port_Main_Net);
net_socket_client.ClientAlias = UserClient.UserAccount.UserName;
net_socket_client.ClientStart();
}
catch(Exception ex)
{
SoftBasic.ShowExceptionMessage(ex);
}
}
private void Net_socket_client_AcceptString(HuTcpState object1, string object2)
{
//接收到服务器发来的字符串数据
string head_code = object2.Substring(0, 4);
if (head_code == CommonHeadCode.MultiNetHeadCode.)
{
if (IsHandleCreated) Invoke(new Action(() =>
{
FormPopup fpp = new FormPopup(object2.Substring(4), Color.DodgerBlue, 10000);
fpp.Show();
}));
}
else if (head_code == CommonHeadCode.MultiNetHeadCode.线)
{
if (IsHandleCreated) Invoke(new Action(() =>
{
listBox1.DataSource = object2.Substring(4).Split('#');
}));
}
else if (head_code == CommonHeadCode.MultiNetHeadCode.)
{
if (IsHandleCreated) Invoke(new Action(() =>
{
Close();
}));
}
else if (head_code == CommonHeadCode.SimplifyHeadCode.)
2017-02-22 14:30:10 +08:00
{
//此处应用到了同步类的指令头
if (IsHandleCreated) Invoke(new Action(() =>
{
UserClient.Announcement = object2.Substring(4);
label_Announcement.Text = object2.Substring(4);
2017-02-22 14:30:10 +08:00
FormPopup fpp = new FormPopup(object2.Substring(4), Color.DodgerBlue, 10000);
fpp.Show();
}));
}
else if (head_code == CommonHeadCode.MultiNetHeadCode.)
{
//收到服务器的数据
JObject json = JObject.Parse(object2.Substring(4));
UserClient.DateTimeServer = json["Time"].ToObject<DateTime>();
if (IsHandleCreated) Invoke(new Action(() =>
{
toolStripStatusLabel_time.Text = UserClient.DateTimeServer.ToString("yyyy-MM-dd HH:mm");
label_file_count.Text = json["FileCount"].ToObject<int>().ToString();
}));
}
else if(head_code==CommonHeadCode.MultiNetHeadCode.)
{
if (IsHandleCreated) Invoke(new Action(() =>
{
label_file_count.Text = object2.Substring(4);
}));
}
2017-02-22 14:30:10 +08:00
}
private void Net_socket_client_AcceptByte(HuTcpState object1, byte[] object2)
{
//接收到服务器发来的字节数据
if (IsHandleCreated) Invoke(new Action(() =>
{
MessageBox.Show(BitConverter.ToInt32(object2, 0).ToString());
}));
2017-02-22 14:30:10 +08:00
}
private void Net_socket_client_LoginSuccess()
{
//登录成功,或重新登录成功的事件,有些数据的初始化可以放在此处
if (IsHandleCreated) Invoke(new Action(() =>
{
toolStripStatusLabel_status.Text = "客户端启动成功";
}));
}
private void Net_socket_client_LoginFailed(int object1)
{
//登录失败的情况,如果连续三次连接失败,请考虑退出系统
if (object1 > 3)
{
if (IsHandleCreated) Invoke(new Action(() =>
{
Close();
}));
}
}
private void Net_socket_client_MessageAlerts(string object1)
{
//信息提示
if (IsHandleCreated) Invoke(new Action(() =>
{
toolStripStatusLabel_status.Text = object1;
}));
}
2017-02-22 14:30:10 +08:00
#endregion
#region
/// <summary>
/// 文件显示的控件
/// </summary>
private UIControls.ShareFilesRender UIControls_Files { get; set; }
/// <summary>
/// 所有在主界面显示的控件集
/// </summary>
private List<UserControl> all_main_render = new List<UserControl>();
/// <summary>
/// 正在显示的子界面
/// </summary>
private UserControl CurrentRender { get; set; } = null;
/// <summary>
/// 主界面的初始化
/// </summary>
private void MainRenderInitialization()
{
//将所有的子集控件添加进去
/*
*
* 1.
* 2.
* 3.
*/
UIControls_Files = new UIControls.ShareFilesRender()
{
Parent = this,//决定了放在哪个界面显示,此处仅仅是测试
Visible = true,
Location = new Point(100, 100),
//Dock = DockStyle.Fill,
};
all_main_render.Add(UIControls_Files);
}
private void SetShowRenderControl(UserControl control)
{
if(!ReferenceEquals(CurrentRender,control))
{
CurrentRender = control;
all_main_render.ForEach(c => c.Visible = false);
control.Visible = true;
}
}
private void SetShowRenderControl(Type typeControl)
{
UserControl control = null;
foreach(var c in all_main_render)
{
if(c.GetType()==typeControl)
{
control = c;
break;
}
}
if (control != null) SetShowRenderControl(control);
}
private void label_file_count_Click(object sender, EventArgs e)
{
SetShowRenderControl(UIControls_Files);
UIControls_Files.UpdateFiles();
}
#endregion
2017-02-22 14:30:10 +08:00
}
}