※ 記事としては未定完成です。
Alertform.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace SingleTimer
{
public partial class Alertform : Form
{
public Alertform(
string strMessage,
string strTitle )
{
InitializeComponent();
buttonClose.Click += ButtonClose_Click;
textMessage.Text = strMessage;
textMessage.SelectionLength = 0;
textMessage.SelectionStart = 0;
this.Text = strTitle;
}
private void ButtonClose_Click(
object sender, EventArgs e)
{
this.Close();
}
}
}
Alertform.Designer.cs
namespace SingleTimer
{
partial class Alertform
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components =
null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(
bool disposing)
{
if (disposing && (components !=
null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.textMessage =
new System.Windows.Forms.TextBox();
this.label1 =
new System.Windows.Forms.Label();
this.buttonClose =
new System.Windows.Forms.Button();
this.SuspendLayout();
//
// textMessage
//
this.textMessage.Font =
new System.Drawing.Font("MS ゴシック", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((
byte)(128)));
this.textMessage.Location =
new System.Drawing.Point(11, 26);
this.textMessage.Margin =
new System.Windows.Forms.Padding(4);
this.textMessage.Multiline =
true;
this.textMessage.Name = "textMessage";
this.textMessage.ReadOnly =
true;
this.textMessage.ScrollBars = System.Windows.Forms.ScrollBars.Both;
this.textMessage.Size =
new System.Drawing.Size(359, 118);
this.textMessage.TabIndex = 0;
//
// label1
//
this.label1.AutoSize =
true;
this.label1.Location =
new System.Drawing.Point(13, 7);
this.label1.Margin =
new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label1.Name = "label1";
this.label1.Size =
new System.Drawing.Size(62, 15);
this.label1.TabIndex = 1;
this.label1.Text = "メッセージ";
//
// buttonClose
//
this.buttonClose.Location =
new System.Drawing.Point(139, 149);
this.buttonClose.Margin =
new System.Windows.Forms.Padding(2);
this.buttonClose.Name = "buttonClose";
this.buttonClose.Size =
new System.Drawing.Size(95, 33);
this.buttonClose.TabIndex = 2;
this.buttonClose.Text = "閉じる";
this.buttonClose.UseVisualStyleBackColor =
true;
//
// Alertform
//
this.AcceptButton =
this.buttonClose;
this.AutoScaleDimensions =
new System.Drawing.SizeF(8F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize =
new System.Drawing.Size(381, 192);
this.Controls.Add(
this.buttonClose);
this.Controls.Add(
this.label1);
this.Controls.Add(
this.textMessage);
this.Font =
new System.Drawing.Font("MS UI Gothic", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((
byte)(128)));
this.Margin =
new System.Windows.Forms.Padding(4);
this.MaximizeBox =
false;
this.MinimizeBox =
false;
this.Name = "Alertform";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "Alertform";
this.TopMost =
true;
this.ResumeLayout(
false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.TextBox textMessage;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Button buttonClose;
}
}
Mainform.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace SingleTimer
{
public partial class Mainform : Form
{
public readonly string NL = System.Environment.NewLine;
public Mainform()
{
InitializeComponent();
buttonAction.Click += ButtonAction_Click;
buttonStop.Click += ButtonStop_Click;
buttonStop.Enabled =
false;
}
protected override void OnClosed( EventArgs e )
{
m_eventCancellation.Dispose();
}
private void ButtonStop_Click(
object sender, EventArgs e)
{
if( !m_eventCancellation.IsSet )
{
m_eventCancellation.Set();
}
}
System.Threading.ManualResetEventSlim m_eventCancellation =
new System.Threading.ManualResetEventSlim();
bool m_bAction =
false;
private void EnableControl(
bool bAction )
{
buttonAction.Enabled = m_bAction;
m_bAction = bAction;
buttonStop.Enabled = m_bAction;
textMemo.ReadOnly = m_bAction;
textTimeM.ReadOnly = m_bAction;
}
private async void ButtonAction_Click(
object sender, EventArgs e)
{
if( m_bAction )
{
return;
}
string strMessage = "";
int nTimeM;
if( !
int.TryParse(textTimeM.Text, out nTimeM) || nTimeM <= 0 )
{
strMessage += "時間指定が不正です。(1分以上必要です)" + NL;
}
if( textMemo.Text.Length == 0 )
{
strMessage += "メモが不正です。(1文字を以上必要です)" + NL;
}
if( strMessage.Length > 0 )
{
using(
var alert =
new Alertform( strMessage, Text ) )
{
alert.ShowDialog(
this );
}
return;
}
EnableControl(
true );
this.WindowState = FormWindowState.Minimized;
nTimeM *= 1000 * 60;
m_eventCancellation.Reset();
System.Action<
bool> fnShowMessage = (
bool bSignal ) =>
{
// bSignal == true はキャンセルした時
if( bSignal ==
false )
{
using(
var alert =
new Alertform( "指定時間を経過しました。" + NL + NL + textMemo.Text, Text ) )
{
alert.ShowDialog();
}
}
EnableControl(
false );
if(
this.WindowState == FormWindowState.Minimized )
{
this.WindowState = FormWindowState.Normal;
}
};
await Task.Run( () =>
{
bool bSignal = m_eventCancellation.Wait( nTimeM );
this.Invoke( fnShowMessage, bSignal );
} );
}
}
}
Mainform.Designer.cs
namespace SingleTimer
{
partial class Mainform
{
/// <summary>
/// 必要なデザイナー変数です。
/// </summary>
private System.ComponentModel.IContainer components =
null;
/// <summary>
/// 使用中のリソースをすべてクリーンアップします。
/// </summary>
/// <param name="disposing">マネージド リソースを破棄する場合は true を指定し、その他の場合は false を指定します。</param>
protected override void Dispose(
bool disposing)
{
if (disposing && (components !=
null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows フォーム デザイナーで生成されたコード
/// <summary>
/// デザイナー サポートに必要なメソッドです。このメソッドの内容を
/// コード エディターで変更しないでください。
/// </summary>
private void InitializeComponent()
{
this.buttonAction =
new System.Windows.Forms.Button();
this.textMemo =
new System.Windows.Forms.TextBox();
this.textTimeM =
new System.Windows.Forms.TextBox();
this.labelTime =
new System.Windows.Forms.Label();
this.labelMemo =
new System.Windows.Forms.Label();
this.buttonStop =
new System.Windows.Forms.Button();
this.labelMinutes =
new System.Windows.Forms.Label();
this.SuspendLayout();
//
// buttonAction
//
this.buttonAction.Anchor = System.Windows.Forms.AnchorStyles.Bottom;
this.buttonAction.Location =
new System.Drawing.Point(188, 131);
this.buttonAction.Name = "buttonAction";
this.buttonAction.Size =
new System.Drawing.Size(75, 23);
this.buttonAction.TabIndex = 5;
this.buttonAction.Text = "実行";
this.buttonAction.UseVisualStyleBackColor =
true;
//
// textMemo
//
this.textMemo.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.textMemo.Location =
new System.Drawing.Point(12, 25);
this.textMemo.Multiline =
true;
this.textMemo.Name = "textMemo";
this.textMemo.Size =
new System.Drawing.Size(419, 100);
this.textMemo.TabIndex = 1;
//
// textTimeM
//
this.textTimeM.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.textTimeM.Font =
new System.Drawing.Font("MS ゴシック", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((
byte)(128)));
this.textTimeM.Location =
new System.Drawing.Point(46, 132);
this.textTimeM.Name = "textTimeM";
this.textTimeM.Size =
new System.Drawing.Size(71, 22);
this.textTimeM.TabIndex = 3;
//
// labelTime
//
this.labelTime.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.labelTime.AutoSize =
true;
this.labelTime.Location =
new System.Drawing.Point(13, 138);
this.labelTime.Name = "labelTime";
this.labelTime.Size =
new System.Drawing.Size(29, 12);
this.labelTime.TabIndex = 2;
this.labelTime.Text = "時間";
//
// labelMemo
//
this.labelMemo.AutoSize =
true;
this.labelMemo.Location =
new System.Drawing.Point(10, 10);
this.labelMemo.Name = "labelMemo";
this.labelMemo.Size =
new System.Drawing.Size(22, 12);
this.labelMemo.TabIndex = 0;
this.labelMemo.Text = "メモ";
//
// buttonStop
//
this.buttonStop.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.buttonStop.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.buttonStop.Location =
new System.Drawing.Point(356, 131);
this.buttonStop.Name = "buttonStop";
this.buttonStop.Size =
new System.Drawing.Size(75, 23);
this.buttonStop.TabIndex = 6;
this.buttonStop.Text = "停止";
this.buttonStop.UseVisualStyleBackColor =
true;
//
// labelMinutes
//
this.labelMinutes.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.labelMinutes.AutoSize =
true;
this.labelMinutes.Location =
new System.Drawing.Point(122, 138);
this.labelMinutes.Name = "labelMinutes";
this.labelMinutes.Size =
new System.Drawing.Size(25, 12);
this.labelMinutes.TabIndex = 4;
this.labelMinutes.Text = "[分]";
//
// Mainform
//
this.AcceptButton =
this.buttonAction;
this.AutoScaleDimensions =
new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton =
this.buttonStop;
this.ClientSize =
new System.Drawing.Size(446, 161);
this.Controls.Add(
this.buttonStop);
this.Controls.Add(
this.labelMemo);
this.Controls.Add(
this.labelMinutes);
this.Controls.Add(
this.labelTime);
this.Controls.Add(
this.textTimeM);
this.Controls.Add(
this.textMemo);
this.Controls.Add(
this.buttonAction);
this.Name = "Mainform";
this.Text = "SingleTimer";
this.ResumeLayout(
false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button buttonAction;
private System.Windows.Forms.TextBox textMemo;
private System.Windows.Forms.TextBox textTimeM;
private System.Windows.Forms.Label labelTime;
private System.Windows.Forms.Label labelMemo;
private System.Windows.Forms.Button buttonStop;
private System.Windows.Forms.Label labelMinutes;
}
}
Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace SingleTimer
{
static class Program
{
/// <summary>
/// アプリケーションのメイン エントリ ポイントです。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(
false);
Application.Run(
new Mainform());
}
}
}