Files
Groupware/Project/MessageWindow.cs
2018-07-23 17:35:21 +09:00

146 lines
4.4 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Windows.Forms;
namespace Project
{
public static class MessageWindow
{
public enum eWindowPosition
{
center = 0,
top = 1,
bottom = 2
}
public enum eWindowType
{
information,
error,
attention,
}
public enum eMsgNo : byte
{
Normal = 0,
RunMsg,
DemoMsg,
ErrorMsg,
EmgButton, //171214
RobotStop,//171214
RetryMsg,
RemoteMsg,
}
private static Dictionary<eMsgNo, Dialog.fMsgWindow> msgBuffer = new Dictionary<eMsgNo, Dialog.fMsgWindow>();
public static void ShowMsg(string m, eMsgNo id, int width = 1200, int height = 300, eWindowType msgtype = eWindowType.information, Boolean useClose = true, eWindowPosition position = eWindowPosition.center)
{
var pform = findForm(id);
if (pform == null)
{
var f = new Dialog.fMsgWindow(m);
f.TopMost = true;
f.ID = id;
f.Disposed += (s1, e1) => { CloseMsg(id); };
f.Width = width;
f.Height = height;
if (msgtype == eWindowType.attention)
{
f.BackColor = Color.Orange;
f.arLabel1.ForeColor = Color.Orange;
}
else if (msgtype == eWindowType.error)
{
f.BackColor = Color.Red;
f.arLabel1.ForeColor = Color.Red;
}
else
{
f.BackColor = Color.Blue;
f.arLabel1.ForeColor = Color.DeepSkyBlue;
}
if (!useClose) f.EnableUserClose = false;
if (position == eWindowPosition.center)
f.StartPosition = FormStartPosition.CenterScreen;
else if (position == eWindowPosition.top)
{
f.StartPosition = FormStartPosition.Manual;
f.Left = (Screen.PrimaryScreen.Bounds.Width - f.Width) / 2;
f.Top = 0;
}
else if (position == eWindowPosition.bottom)
{
f.StartPosition = FormStartPosition.Manual;
f.Left = (Screen.PrimaryScreen.Bounds.Width - f.Width) / 2;
f.Top = Screen.PrimaryScreen.Bounds.Height - f.Height;
}
msgBuffer.Add(id, f);
f.Show();
}
else
{
pform.SetText(m);
if (pform.WindowState == FormWindowState.Minimized) pform.WindowState = FormWindowState.Normal;
if (!pform.Visible) pform.Visible = true;
}
}
private static Dialog.fMsgWindow findForm(eMsgNo id)
{
var items = msgBuffer.Where(t => t.Key == id);
if (items.Count() < 1) return null;
return items.First().Value;
}
public static Boolean ExistForm(eMsgNo id)
{
var items = msgBuffer.Where(t => t.Key == id);
if (items.Count() < 1) return false;
else return true;
}
public delegate void VisibleHandler(Boolean value);
public static void VisibleAll(Boolean value)
{
if (msgBuffer.Count < 1) return;
#region "invoke"
if (msgBuffer.ElementAt(0).Value.InvokeRequired)
{
msgBuffer.ElementAt(0).Value.BeginInvoke(new VisibleHandler(VisibleAll), new object[] { value });
return;
}
#endregion
foreach (var form in msgBuffer)
{
form.Value.Visible = value;
}
}
public static void CloseAll()
{
for (int i = msgBuffer.Count; i > 0; i--)
{
var form = msgBuffer.ElementAt(i - 1);
form.Value.Close();
}
msgBuffer.Clear();
}
public static void CloseMsg(eMsgNo id)
{
var pform = findForm(id);
if (pform != null)
{
pform.Close();
msgBuffer.Remove(id);
}
}
}
}