Initialize

This commit is contained in:
Eugen Höglinger 2020-11-26 16:24:24 +01:00
commit 4fa0ba9643
123 changed files with 8497 additions and 0 deletions

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

View File

@ -0,0 +1,29 @@
Microsoft Visual Studio Solution File, Format Version 8.00
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MessageBoxExDemo", "MessageBoxExDemo\MessageBoxExDemo.csproj", "{69E4A5E2-96EF-4412-AE8B-DAF571C00CF2}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MessageBoxExLib", "MessageBoxExLib\MessageBoxExLib.csproj", "{4847D05C-EB58-49D9-B280-D22F8FF01857}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfiguration) = preSolution
Debug = Debug
Release = Release
EndGlobalSection
GlobalSection(ProjectConfiguration) = postSolution
{69E4A5E2-96EF-4412-AE8B-DAF571C00CF2}.Debug.ActiveCfg = Debug|.NET
{69E4A5E2-96EF-4412-AE8B-DAF571C00CF2}.Debug.Build.0 = Debug|.NET
{69E4A5E2-96EF-4412-AE8B-DAF571C00CF2}.Release.ActiveCfg = Release|.NET
{69E4A5E2-96EF-4412-AE8B-DAF571C00CF2}.Release.Build.0 = Release|.NET
{4847D05C-EB58-49D9-B280-D22F8FF01857}.Debug.ActiveCfg = Debug|.NET
{4847D05C-EB58-49D9-B280-D22F8FF01857}.Debug.Build.0 = Debug|.NET
{4847D05C-EB58-49D9-B280-D22F8FF01857}.Release.ActiveCfg = Release|.NET
{4847D05C-EB58-49D9-B280-D22F8FF01857}.Release.Build.0 = Release|.NET
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
EndGlobalSection
GlobalSection(ExtensibilityAddIns) = postSolution
EndGlobalSection
EndGlobal

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1,58 @@
using System.Reflection;
using System.Runtime.CompilerServices;
//
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
//
[assembly: AssemblyTitle("")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
//
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:
[assembly: AssemblyVersion("1.0.*")]
//
// In order to sign your assembly you must specify a key to use. Refer to the
// Microsoft .NET Framework documentation for more information on assembly signing.
//
// Use the attributes below to control which key is used for signing.
//
// Notes:
// (*) If no key is specified, the assembly is not signed.
// (*) KeyName refers to a key that has been installed in the Crypto Service
// Provider (CSP) on your machine. KeyFile refers to a file which contains
// a key.
// (*) If the KeyFile and the KeyName values are both specified, the
// following processing occurs:
// (1) If the KeyName can be found in the CSP, that key is used.
// (2) If the KeyName does not exist and the KeyFile does exist, the key
// in the KeyFile is installed into the CSP and used.
// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility.
// When specifying the KeyFile, the location of the KeyFile should be
// relative to the project output directory which is
// %Project Directory%\obj\<configuration>. For example, if your KeyFile is
// located in the project directory, you would specify the AssemblyKeyFile
// attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]
// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework
// documentation for more information on this.
//
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile("")]
[assembly: AssemblyKeyName("")]

View File

@ -0,0 +1,124 @@
<VisualStudioProject>
<CSHARP
ProjectType = "Local"
ProductVersion = "7.10.3077"
SchemaVersion = "2.0"
ProjectGuid = "{69E4A5E2-96EF-4412-AE8B-DAF571C00CF2}"
>
<Build>
<Settings
ApplicationIcon = "App.ico"
AssemblyKeyContainerName = ""
AssemblyName = "MessageBoxExDemo"
AssemblyOriginatorKeyFile = ""
DefaultClientScript = "JScript"
DefaultHTMLPageLayout = "Grid"
DefaultTargetSchema = "IE50"
DelaySign = "false"
OutputType = "WinExe"
PreBuildEvent = ""
PostBuildEvent = ""
RootNamespace = "MessageBoxExDemo"
RunPostBuildEvent = "OnBuildSuccess"
StartupObject = ""
>
<Config
Name = "Debug"
AllowUnsafeBlocks = "false"
BaseAddress = "285212672"
CheckForOverflowUnderflow = "false"
ConfigurationOverrideFile = ""
DefineConstants = "DEBUG;TRACE"
DocumentationFile = ""
DebugSymbols = "true"
FileAlignment = "4096"
IncrementalBuild = "false"
NoStdLib = "false"
NoWarn = ""
Optimize = "false"
OutputPath = "bin\Debug\"
RegisterForComInterop = "false"
RemoveIntegerChecks = "false"
TreatWarningsAsErrors = "false"
WarningLevel = "4"
/>
<Config
Name = "Release"
AllowUnsafeBlocks = "false"
BaseAddress = "285212672"
CheckForOverflowUnderflow = "false"
ConfigurationOverrideFile = ""
DefineConstants = "TRACE"
DocumentationFile = ""
DebugSymbols = "false"
FileAlignment = "4096"
IncrementalBuild = "false"
NoStdLib = "false"
NoWarn = ""
Optimize = "true"
OutputPath = "bin\Release\"
RegisterForComInterop = "false"
RemoveIntegerChecks = "false"
TreatWarningsAsErrors = "false"
WarningLevel = "4"
/>
</Settings>
<References>
<Reference
Name = "System"
AssemblyName = "System"
HintPath = "..\..\..\..\..\..\WINNT\Microsoft.NET\Framework\v1.1.4322\System.dll"
/>
<Reference
Name = "System.Data"
AssemblyName = "System.Data"
HintPath = "..\..\..\..\..\..\WINNT\Microsoft.NET\Framework\v1.1.4322\System.Data.dll"
/>
<Reference
Name = "System.Drawing"
AssemblyName = "System.Drawing"
HintPath = "..\..\..\..\..\..\WINNT\Microsoft.NET\Framework\v1.1.4322\System.Drawing.dll"
/>
<Reference
Name = "System.Windows.Forms"
AssemblyName = "System.Windows.Forms"
HintPath = "..\..\..\..\..\..\WINNT\Microsoft.NET\Framework\v1.1.4322\System.Windows.Forms.dll"
/>
<Reference
Name = "System.XML"
AssemblyName = "System.Xml"
HintPath = "..\..\..\..\..\..\WINNT\Microsoft.NET\Framework\v1.1.4322\System.XML.dll"
/>
<Reference
Name = "MessageBoxExLib"
Project = "{4847D05C-EB58-49D9-B280-D22F8FF01857}"
Package = "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}"
/>
</References>
</Build>
<Files>
<Include>
<File
RelPath = "App.ico"
BuildAction = "Content"
/>
<File
RelPath = "AssemblyInfo.cs"
SubType = "Code"
BuildAction = "Compile"
/>
<File
RelPath = "MessageBoxExDemoForm.cs"
SubType = "Form"
BuildAction = "Compile"
/>
<File
RelPath = "MessageBoxExDemoForm.resx"
DependentUpon = "MessageBoxExDemoForm.cs"
BuildAction = "EmbeddedResource"
/>
</Include>
</Files>
</CSHARP>
</VisualStudioProject>

View File

@ -0,0 +1,854 @@
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Globalization;
using System.Threading;
using Utils.MessageBoxExLib;
namespace MessageBoxExDemo
{
/// <summary>
///
/// </summary>
public class MessageBoxExDemoForm : System.Windows.Forms.Form
{
#region Fields
private System.Windows.Forms.Button btnShowCustom;
private System.Windows.Forms.GroupBox grpBoxIcon;
private System.Windows.Forms.RadioButton radioButton4;
private System.Windows.Forms.RadioButton radioButton3;
private System.Windows.Forms.RadioButton radioButton2;
private System.Windows.Forms.RadioButton radioButton1;
private System.Windows.Forms.ListView listViewButtons;
private System.Windows.Forms.ColumnHeader columnHeader1;
private System.Windows.Forms.TextBox txtMessage;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.TextBox txtCaption;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.RadioButton radioButton5;
private System.Windows.Forms.TextBox txtSaveResponse;
private System.Windows.Forms.CheckBox chbAllowSaveResponse;
private System.Windows.Forms.TextBox txtResult;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.ListView listViewMessageBoxes;
private System.Windows.Forms.ColumnHeader columnHeader2;
private System.Windows.Forms.Button btnAddMessageBox;
private System.Windows.Forms.TextBox txtName;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.TextBox txtButtonText;
private System.Windows.Forms.Label ButtonText;
private System.Windows.Forms.TextBox txtButtonVal;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.CheckBox chbIsCancel;
private System.Windows.Forms.Label label6;
private System.Windows.Forms.Button btnAddButton;
private System.Windows.Forms.TextBox txtButtonHelp;
private System.Windows.Forms.CheckBox chbUseSavedResponse;
private System.Windows.Forms.CheckBox chbPlayAlert;
private System.Windows.Forms.ToolTip toolTip1;
private System.Windows.Forms.Label label7;
private System.Windows.Forms.Label label8;
private System.Windows.Forms.TextBox txtTimeout;
private System.Windows.Forms.Label label9;
private System.Windows.Forms.ComboBox cmbTimeoutResult;
private System.Windows.Forms.Button button1;
private System.ComponentModel.IContainer components;
#endregion
#region Ctor/Dtor
public MessageBoxExDemoForm()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#endregion
#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.components = new System.ComponentModel.Container();
System.Windows.Forms.ListViewItem listViewItem1 = new System.Windows.Forms.ListViewItem("Ok");
System.Windows.Forms.ListViewItem listViewItem2 = new System.Windows.Forms.ListViewItem("Cancel");
System.Windows.Forms.ListViewItem listViewItem3 = new System.Windows.Forms.ListViewItem("Yes");
System.Windows.Forms.ListViewItem listViewItem4 = new System.Windows.Forms.ListViewItem("No");
System.Windows.Forms.ListViewItem listViewItem5 = new System.Windows.Forms.ListViewItem("Abort");
System.Windows.Forms.ListViewItem listViewItem6 = new System.Windows.Forms.ListViewItem("Retry");
System.Windows.Forms.ListViewItem listViewItem7 = new System.Windows.Forms.ListViewItem("Ignore");
this.btnShowCustom = new System.Windows.Forms.Button();
this.grpBoxIcon = new System.Windows.Forms.GroupBox();
this.radioButton5 = new System.Windows.Forms.RadioButton();
this.radioButton4 = new System.Windows.Forms.RadioButton();
this.radioButton3 = new System.Windows.Forms.RadioButton();
this.radioButton2 = new System.Windows.Forms.RadioButton();
this.radioButton1 = new System.Windows.Forms.RadioButton();
this.listViewButtons = new System.Windows.Forms.ListView();
this.columnHeader1 = new System.Windows.Forms.ColumnHeader();
this.txtMessage = new System.Windows.Forms.TextBox();
this.label2 = new System.Windows.Forms.Label();
this.txtCaption = new System.Windows.Forms.TextBox();
this.label1 = new System.Windows.Forms.Label();
this.chbAllowSaveResponse = new System.Windows.Forms.CheckBox();
this.txtSaveResponse = new System.Windows.Forms.TextBox();
this.txtResult = new System.Windows.Forms.TextBox();
this.label3 = new System.Windows.Forms.Label();
this.listViewMessageBoxes = new System.Windows.Forms.ListView();
this.columnHeader2 = new System.Windows.Forms.ColumnHeader();
this.btnAddMessageBox = new System.Windows.Forms.Button();
this.txtName = new System.Windows.Forms.TextBox();
this.label4 = new System.Windows.Forms.Label();
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.txtButtonHelp = new System.Windows.Forms.TextBox();
this.label6 = new System.Windows.Forms.Label();
this.chbIsCancel = new System.Windows.Forms.CheckBox();
this.txtButtonVal = new System.Windows.Forms.TextBox();
this.label5 = new System.Windows.Forms.Label();
this.txtButtonText = new System.Windows.Forms.TextBox();
this.ButtonText = new System.Windows.Forms.Label();
this.btnAddButton = new System.Windows.Forms.Button();
this.chbUseSavedResponse = new System.Windows.Forms.CheckBox();
this.chbPlayAlert = new System.Windows.Forms.CheckBox();
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
this.txtTimeout = new System.Windows.Forms.TextBox();
this.label7 = new System.Windows.Forms.Label();
this.label8 = new System.Windows.Forms.Label();
this.cmbTimeoutResult = new System.Windows.Forms.ComboBox();
this.label9 = new System.Windows.Forms.Label();
this.button1 = new System.Windows.Forms.Button();
this.grpBoxIcon.SuspendLayout();
this.groupBox1.SuspendLayout();
this.SuspendLayout();
//
// btnShowCustom
//
this.btnShowCustom.Location = new System.Drawing.Point(752, 328);
this.btnShowCustom.Name = "btnShowCustom";
this.btnShowCustom.Size = new System.Drawing.Size(160, 23);
this.btnShowCustom.TabIndex = 3;
this.btnShowCustom.Text = "Show Custom MessageBox";
this.toolTip1.SetToolTip(this.btnShowCustom, "Show the currently selected message box from the list");
this.btnShowCustom.Click += new System.EventHandler(this.btnShowCustom_Click);
//
// grpBoxIcon
//
this.grpBoxIcon.Controls.Add(this.radioButton5);
this.grpBoxIcon.Controls.Add(this.radioButton4);
this.grpBoxIcon.Controls.Add(this.radioButton3);
this.grpBoxIcon.Controls.Add(this.radioButton2);
this.grpBoxIcon.Controls.Add(this.radioButton1);
this.grpBoxIcon.Location = new System.Drawing.Point(448, 216);
this.grpBoxIcon.Name = "grpBoxIcon";
this.grpBoxIcon.Size = new System.Drawing.Size(136, 184);
this.grpBoxIcon.TabIndex = 15;
this.grpBoxIcon.TabStop = false;
this.grpBoxIcon.Text = "Icon";
//
// radioButton5
//
this.radioButton5.Location = new System.Drawing.Point(16, 152);
this.radioButton5.Name = "radioButton5";
this.radioButton5.TabIndex = 4;
this.radioButton5.Text = "None";
//
// radioButton4
//
this.radioButton4.Location = new System.Drawing.Point(16, 120);
this.radioButton4.Name = "radioButton4";
this.radioButton4.TabIndex = 2;
this.radioButton4.Text = "Question";
//
// radioButton3
//
this.radioButton3.Location = new System.Drawing.Point(16, 56);
this.radioButton3.Name = "radioButton3";
this.radioButton3.TabIndex = 1;
this.radioButton3.Text = "Exclamation";
//
// radioButton2
//
this.radioButton2.Location = new System.Drawing.Point(16, 88);
this.radioButton2.Name = "radioButton2";
this.radioButton2.TabIndex = 3;
this.radioButton2.Text = "Hand";
//
// radioButton1
//
this.radioButton1.Checked = true;
this.radioButton1.Location = new System.Drawing.Point(16, 24);
this.radioButton1.Name = "radioButton1";
this.radioButton1.TabIndex = 0;
this.radioButton1.TabStop = true;
this.radioButton1.Text = "Asterisk";
//
// listViewButtons
//
this.listViewButtons.CheckBoxes = true;
this.listViewButtons.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.columnHeader1});
listViewItem1.StateImageIndex = 0;
listViewItem2.StateImageIndex = 0;
listViewItem3.StateImageIndex = 0;
listViewItem4.StateImageIndex = 0;
listViewItem5.StateImageIndex = 0;
listViewItem6.StateImageIndex = 0;
listViewItem7.StateImageIndex = 0;
this.listViewButtons.Items.AddRange(new System.Windows.Forms.ListViewItem[] {
listViewItem1,
listViewItem2,
listViewItem3,
listViewItem4,
listViewItem5,
listViewItem6,
listViewItem7});
this.listViewButtons.Location = new System.Drawing.Point(296, 216);
this.listViewButtons.Name = "listViewButtons";
this.listViewButtons.Size = new System.Drawing.Size(136, 184);
this.listViewButtons.TabIndex = 14;
this.listViewButtons.View = System.Windows.Forms.View.Details;
//
// columnHeader1
//
this.columnHeader1.Text = "Buttons";
this.columnHeader1.Width = 130;
//
// txtMessage
//
this.txtMessage.Location = new System.Drawing.Point(72, 112);
this.txtMessage.Multiline = true;
this.txtMessage.Name = "txtMessage";
this.txtMessage.Size = new System.Drawing.Size(280, 80);
this.txtMessage.TabIndex = 5;
this.txtMessage.Text = "<Message>";
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(16, 112);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(47, 17);
this.label2.TabIndex = 4;
this.label2.Text = "Message";
//
// txtCaption
//
this.txtCaption.Location = new System.Drawing.Point(72, 72);
this.txtCaption.Name = "txtCaption";
this.txtCaption.Size = new System.Drawing.Size(280, 21);
this.txtCaption.TabIndex = 3;
this.txtCaption.Text = "<Caption>";
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(16, 72);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(42, 17);
this.label1.TabIndex = 2;
this.label1.Text = "Caption";
//
// chbAllowSaveResponse
//
this.chbAllowSaveResponse.Location = new System.Drawing.Point(80, 408);
this.chbAllowSaveResponse.Name = "chbAllowSaveResponse";
this.chbAllowSaveResponse.Size = new System.Drawing.Size(144, 24);
this.chbAllowSaveResponse.TabIndex = 16;
this.chbAllowSaveResponse.Text = "Allow Save Response";
//
// txtSaveResponse
//
this.txtSaveResponse.Location = new System.Drawing.Point(82, 432);
this.txtSaveResponse.Multiline = true;
this.txtSaveResponse.Name = "txtSaveResponse";
this.txtSaveResponse.Size = new System.Drawing.Size(272, 80);
this.txtSaveResponse.TabIndex = 17;
this.txtSaveResponse.Text = "<Save Response Text>";
//
// txtResult
//
this.txtResult.Location = new System.Drawing.Point(752, 512);
this.txtResult.Name = "txtResult";
this.txtResult.Size = new System.Drawing.Size(160, 21);
this.txtResult.TabIndex = 7;
this.txtResult.Text = "<Result>";
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(712, 512);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(35, 17);
this.label3.TabIndex = 6;
this.label3.Text = "Result";
this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// listViewMessageBoxes
//
this.listViewMessageBoxes.Activation = System.Windows.Forms.ItemActivation.TwoClick;
this.listViewMessageBoxes.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.columnHeader2});
this.listViewMessageBoxes.Location = new System.Drawing.Point(752, 96);
this.listViewMessageBoxes.MultiSelect = false;
this.listViewMessageBoxes.Name = "listViewMessageBoxes";
this.listViewMessageBoxes.Size = new System.Drawing.Size(192, 224);
this.listViewMessageBoxes.TabIndex = 2;
this.listViewMessageBoxes.View = System.Windows.Forms.View.Details;
this.listViewMessageBoxes.ItemActivate += new System.EventHandler(this.listViewMessageBoxes_ItemActivate);
//
// columnHeader2
//
this.columnHeader2.Text = "MessageBoxes";
this.columnHeader2.Width = 183;
//
// btnAddMessageBox
//
this.btnAddMessageBox.Location = new System.Drawing.Point(608, 192);
this.btnAddMessageBox.Name = "btnAddMessageBox";
this.btnAddMessageBox.Size = new System.Drawing.Size(128, 23);
this.btnAddMessageBox.TabIndex = 1;
this.btnAddMessageBox.Text = "Add MessageBox >>";
this.toolTip1.SetToolTip(this.btnAddMessageBox, "Create a message box with the specified information and add it to the list");
this.btnAddMessageBox.Click += new System.EventHandler(this.btnAddMessageBox_Click);
//
// txtName
//
this.txtName.Location = new System.Drawing.Point(72, 32);
this.txtName.Name = "txtName";
this.txtName.Size = new System.Drawing.Size(280, 21);
this.txtName.TabIndex = 1;
this.txtName.Text = "<Name>";
//
// label4
//
this.label4.AutoSize = true;
this.label4.Location = new System.Drawing.Point(24, 32);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(33, 17);
this.label4.TabIndex = 0;
this.label4.Text = "Name";
//
// groupBox1
//
this.groupBox1.Controls.Add(this.txtButtonHelp);
this.groupBox1.Controls.Add(this.label6);
this.groupBox1.Controls.Add(this.chbIsCancel);
this.groupBox1.Controls.Add(this.txtButtonVal);
this.groupBox1.Controls.Add(this.label5);
this.groupBox1.Controls.Add(this.txtButtonText);
this.groupBox1.Controls.Add(this.ButtonText);
this.groupBox1.Controls.Add(this.grpBoxIcon);
this.groupBox1.Controls.Add(this.listViewButtons);
this.groupBox1.Controls.Add(this.txtMessage);
this.groupBox1.Controls.Add(this.label2);
this.groupBox1.Controls.Add(this.txtCaption);
this.groupBox1.Controls.Add(this.label1);
this.groupBox1.Controls.Add(this.chbAllowSaveResponse);
this.groupBox1.Controls.Add(this.txtSaveResponse);
this.groupBox1.Controls.Add(this.btnAddButton);
this.groupBox1.Controls.Add(this.txtName);
this.groupBox1.Controls.Add(this.label4);
this.groupBox1.Location = new System.Drawing.Point(8, 8);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(592, 528);
this.groupBox1.TabIndex = 0;
this.groupBox1.TabStop = false;
this.groupBox1.Text = "MessageBox";
//
// txtButtonHelp
//
this.txtButtonHelp.Location = new System.Drawing.Point(88, 280);
this.txtButtonHelp.Name = "txtButtonHelp";
this.txtButtonHelp.Size = new System.Drawing.Size(96, 21);
this.txtButtonHelp.TabIndex = 11;
this.txtButtonHelp.Text = "<Help Text>";
//
// label6
//
this.label6.AutoSize = true;
this.label6.Location = new System.Drawing.Point(16, 280);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(52, 17);
this.label6.TabIndex = 10;
this.label6.Text = "Help Text";
//
// chbIsCancel
//
this.chbIsCancel.Location = new System.Drawing.Point(88, 312);
this.chbIsCancel.Name = "chbIsCancel";
this.chbIsCancel.Size = new System.Drawing.Size(72, 24);
this.chbIsCancel.TabIndex = 12;
this.chbIsCancel.Text = "Is Cancel";
//
// txtButtonVal
//
this.txtButtonVal.Location = new System.Drawing.Point(88, 248);
this.txtButtonVal.Name = "txtButtonVal";
this.txtButtonVal.Size = new System.Drawing.Size(96, 21);
this.txtButtonVal.TabIndex = 9;
this.txtButtonVal.Text = "<Button Value>";
//
// label5
//
this.label5.AutoSize = true;
this.label5.Location = new System.Drawing.Point(16, 248);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(68, 17);
this.label5.TabIndex = 8;
this.label5.Text = "Button Value";
//
// txtButtonText
//
this.txtButtonText.Location = new System.Drawing.Point(88, 216);
this.txtButtonText.Name = "txtButtonText";
this.txtButtonText.Size = new System.Drawing.Size(96, 21);
this.txtButtonText.TabIndex = 7;
this.txtButtonText.Text = "<Button Text>";
//
// ButtonText
//
this.ButtonText.AutoSize = true;
this.ButtonText.Location = new System.Drawing.Point(16, 216);
this.ButtonText.Name = "ButtonText";
this.ButtonText.Size = new System.Drawing.Size(59, 17);
this.ButtonText.TabIndex = 6;
this.ButtonText.Text = "ButtonText";
//
// btnAddButton
//
this.btnAddButton.Location = new System.Drawing.Point(192, 216);
this.btnAddButton.Name = "btnAddButton";
this.btnAddButton.Size = new System.Drawing.Size(88, 23);
this.btnAddButton.TabIndex = 13;
this.btnAddButton.Text = "Add Button >>";
this.toolTip1.SetToolTip(this.btnAddButton, "Create a button using the specified information and add it to the list");
this.btnAddButton.Click += new System.EventHandler(this.btnAddButton_Click);
//
// chbUseSavedResponse
//
this.chbUseSavedResponse.Checked = true;
this.chbUseSavedResponse.CheckState = System.Windows.Forms.CheckState.Checked;
this.chbUseSavedResponse.Location = new System.Drawing.Point(752, 352);
this.chbUseSavedResponse.Name = "chbUseSavedResponse";
this.chbUseSavedResponse.Size = new System.Drawing.Size(160, 24);
this.chbUseSavedResponse.TabIndex = 4;
this.chbUseSavedResponse.Text = "Use Saved Response";
//
// chbPlayAlert
//
this.chbPlayAlert.Checked = true;
this.chbPlayAlert.CheckState = System.Windows.Forms.CheckState.Checked;
this.chbPlayAlert.Location = new System.Drawing.Point(752, 384);
this.chbPlayAlert.Name = "chbPlayAlert";
this.chbPlayAlert.Size = new System.Drawing.Size(160, 24);
this.chbPlayAlert.TabIndex = 5;
this.chbPlayAlert.Text = "Play Alert Sound";
//
// txtTimeout
//
this.txtTimeout.Location = new System.Drawing.Point(752, 416);
this.txtTimeout.Name = "txtTimeout";
this.txtTimeout.Size = new System.Drawing.Size(160, 21);
this.txtTimeout.TabIndex = 9;
this.txtTimeout.Text = "0";
//
// label7
//
this.label7.AutoSize = true;
this.label7.Location = new System.Drawing.Point(704, 416);
this.label7.Name = "label7";
this.label7.Size = new System.Drawing.Size(45, 17);
this.label7.TabIndex = 8;
this.label7.Text = "Timeout";
//
// label8
//
this.label8.AutoSize = true;
this.label8.Location = new System.Drawing.Point(912, 416);
this.label8.Name = "label8";
this.label8.Size = new System.Drawing.Size(19, 17);
this.label8.TabIndex = 10;
this.label8.Text = "ms";
//
// cmbTimeoutResult
//
this.cmbTimeoutResult.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbTimeoutResult.Items.AddRange(new object[] {
"Default",
"Cancel",
"Timeout"});
this.cmbTimeoutResult.Location = new System.Drawing.Point(752, 448);
this.cmbTimeoutResult.Name = "cmbTimeoutResult";
this.cmbTimeoutResult.Size = new System.Drawing.Size(160, 21);
this.cmbTimeoutResult.TabIndex = 11;
//
// label9
//
this.label9.AutoSize = true;
this.label9.Location = new System.Drawing.Point(670, 448);
this.label9.Name = "label9";
this.label9.Size = new System.Drawing.Size(79, 17);
this.label9.TabIndex = 12;
this.label9.Text = "Timeout Result";
//
// button1
//
this.button1.Location = new System.Drawing.Point(872, 8);
this.button1.Name = "button1";
this.button1.TabIndex = 13;
this.button1.Text = "Run Tests";
this.button1.Visible = false;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// MessageBoxExDemoForm
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 14);
this.ClientSize = new System.Drawing.Size(960, 550);
this.Controls.Add(this.button1);
this.Controls.Add(this.label9);
this.Controls.Add(this.label8);
this.Controls.Add(this.txtTimeout);
this.Controls.Add(this.label7);
this.Controls.Add(this.chbPlayAlert);
this.Controls.Add(this.txtResult);
this.Controls.Add(this.label3);
this.Controls.Add(this.chbUseSavedResponse);
this.Controls.Add(this.cmbTimeoutResult);
this.Controls.Add(this.groupBox1);
this.Controls.Add(this.btnAddMessageBox);
this.Controls.Add(this.listViewMessageBoxes);
this.Controls.Add(this.btnShowCustom);
this.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
this.Name = "MessageBoxExDemoForm";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "MessageBoxEx Demo";
this.Load += new System.EventHandler(this.MessageBoxExDemoForm_Load);
this.grpBoxIcon.ResumeLayout(false);
this.groupBox1.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
#region Main
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
//Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("fr");
Application.Run(new MessageBoxExDemoForm());
}
#endregion
#region Event Handlers
private void btnShowCustom_Click(object sender, System.EventArgs e)
{
if(listViewMessageBoxes.SelectedItems.Count == 0)
{
MessageBox.Show(this,"Select a message box to show","Select message box",MessageBoxButtons.OK,MessageBoxIcon.Information);
return;
}
MessageBoxEx msgBox = listViewMessageBoxes.SelectedItems[0].Tag as MessageBoxEx;
if(msgBox == null)
return;
msgBox.UseSavedResponse = chbUseSavedResponse.Checked;
msgBox.PlayAlsertSound = chbPlayAlert.Checked;
msgBox.Timeout = Convert.ToInt32(txtTimeout.Text);
msgBox.TimeoutResult = (TimeoutResult)Enum.Parse(typeof(TimeoutResult),cmbTimeoutResult.SelectedItem.ToString());
txtResult.Text = msgBox.Show(this);
}
private void btnAddButton_Click(object sender, System.EventArgs e)
{
MessageBoxExButton button = new MessageBoxExButton();
button.Text = txtButtonText.Text;
button.Value = txtButtonVal.Text;
button.HelpText = txtButtonHelp.Text;
button.IsCancelButton = chbIsCancel.Checked;
ListViewItem item = new ListViewItem();
item.Text = button.Text;
item.Tag = button;
listViewButtons.Items.Add(item);
}
private void btnAddMessageBox_Click(object sender, System.EventArgs e)
{
MessageBoxEx msgBox = null;
try
{
msgBox = CreateMessageBox(txtName.Text);
}
catch(Exception ex)
{
MessageBox.Show(this,"Error occured while creating message box. "+ex.Message,"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
if(msgBox == null)
return;
ListViewItem item = new ListViewItem(txtName.Text);
item.Tag = msgBox;
listViewMessageBoxes.Items.Add(item);
}
private void listViewMessageBoxes_ItemActivate(object sender, System.EventArgs e)
{
btnShowCustom.PerformClick();
}
private void MessageBoxExDemoForm_Load(object sender, System.EventArgs e)
{
cmbTimeoutResult.SelectedIndex = 0;
}
#endregion
#region Methods
private MessageBoxExButton[] GetButtons()
{
ArrayList buttons = new ArrayList();
foreach(ListViewItem item in listViewButtons.Items)
{
if(item.Checked)
{
if(item.Tag == null)
{
//Standard buttons
MessageBoxExButton button = new MessageBoxExButton();
button.Text = item.Text;
button.Value = item.Text;
buttons.Add(button);
}
else
{
//Custom buttons
MessageBoxExButton button = item.Tag as MessageBoxExButton;
if(button != null)
buttons.Add(button);
}
}
}
return (MessageBoxExButton[])buttons.ToArray(typeof(MessageBoxExButton));
}
private MessageBoxExIcon GetIcon()
{
RadioButton selIcon = null;
foreach(Control ctrl in grpBoxIcon.Controls)
{
if(ctrl is RadioButton)
{
if( ((RadioButton)ctrl).Checked )
{
selIcon = ctrl as RadioButton;
break;
}
}
}
return (MessageBoxExIcon)Enum.Parse(typeof(MessageBoxExIcon), selIcon.Text);
}
private MessageBoxEx CreateMessageBox(string name)
{
MessageBoxEx mbox = MessageBoxExManager.CreateMessageBox(name);
mbox.Caption = txtCaption.Text;
mbox.Text = txtMessage.Text;
mbox.AllowSaveResponse = chbAllowSaveResponse.Checked;
mbox.SaveResponseText = txtSaveResponse.Text;
foreach(MessageBoxExButton button in GetButtons())
{
mbox.AddButton(button);
}
mbox.Icon = GetIcon();
return mbox;
}
#region Ignore
private void Test()
{
MessageBoxEx msgBox = MessageBoxExManager.CreateMessageBox("Test");
msgBox.Caption = "Question";
msgBox.Text = "Do you want to save the data?";
msgBox.AddButtons(MessageBoxButtons.YesNo);
msgBox.Icon = MessageBoxExIcon.Question;
msgBox.SaveResponseText = "Don't ask me again";
msgBox.AllowSaveResponse = true;
msgBox.Font = new Font("Tahoma",8);
string result = msgBox.Show();
}
private void Test2()
{
MessageBoxEx msgBox = MessageBoxExManager.CreateMessageBox("Test2");
msgBox.Caption = "Question";
msgBox.Text = "Do you want to save the data?";
MessageBoxExButton btnYes = new MessageBoxExButton();
btnYes.Text = "Yes";
btnYes.Value = "Yes";
btnYes.HelpText = "Save the data";
MessageBoxExButton btnNo = new MessageBoxExButton();
btnNo.Text = "No";
btnNo.Value = "No";
btnNo.HelpText = "Do not save the data";
msgBox.AddButton(btnYes);
msgBox.AddButton(btnNo);
msgBox.Icon = MessageBoxExIcon.Question;
msgBox.SaveResponseText = "Don't ask me again";
msgBox.AllowSaveResponse = true;
msgBox.Font = new Font("Tahoma",8);
string result = msgBox.Show();
}
/// <summary>
/// Test case which exposed the AutoScale bug, this was submitted by Harry Stein
/// </summary>
private void Test3()
{
// as an experiment, I moved these from class members to local members
// to see if it helps -- it didn't -- but it helps show you nothing else
// is going on!
MessageBoxEx m_msgBoxSummary1 = null;
MessageBoxExButton m_btnYes = null;
// Tahoma 8.25 in Ex originally
m_msgBoxSummary1 = MessageBoxExManager.CreateMessageBox("Summary1");
m_btnYes = new MessageBoxExButton();
string m_sPROGRAM_NAME = "Possrv.Debug Merchant Parser";
string m_sVersion = "1.00A";;
m_msgBoxSummary1.Caption = m_sPROGRAM_NAME + " " + m_sVersion;
// fyi: m_sPROGRAM_NAME = "Possrv.Debug Merchant Parser";
// and m_sVersion = "1.00A";
m_msgBoxSummary1.Icon = MessageBoxExIcon.Information;
m_btnYes.Text = "Okay";
m_btnYes.Value = "OK";
m_msgBoxSummary1.AddButton(m_btnYes);
String sResultM =
"Hello this is a reasonably long message with 1234 56789";
m_msgBoxSummary1.Font = new Font("Lucida Console", 8);
m_msgBoxSummary1.Text = sResultM;
String sResult3 = m_msgBoxSummary1.Show(); // first call
sResult3 = m_msgBoxSummary1.Show(); // second call
if(sResult3=="" || (1 + 1 == 2))return; // quiet the compiler
}
private void Test4()
{
MessageBoxEx msgBox = MessageBoxExManager.CreateMessageBox(null);
msgBox.Caption = "Question";
msgBox.Text = "Do you want to save the data?";
msgBox.AddButtons(MessageBoxButtons.YesNo);
msgBox.Icon = MessageBoxExIcon.Question;
//Wait for 30 seconds for the user to respond
msgBox.Timeout = 30000;
msgBox.TimeoutResult = TimeoutResult.Timeout;
string result = msgBox.Show();
if(result == MessageBoxExResult.Timeout)
{
//Take action to handle the case of timeouts
}
}
public void Test5()
{
MessageBoxEx msgBox = MessageBoxExManager.CreateMessageBox(null);
msgBox.Caption = "Question";
msgBox.Text = "Voulez-vous sauver les données ?";
msgBox.AddButtons(MessageBoxButtons.YesNoCancel);
msgBox.Icon = MessageBoxExIcon.Question;
msgBox.Show();
}
public void Test6()
{
MessageBoxEx msgBox = MessageBoxExManager.CreateMessageBox("test");
msgBox.Caption = "Information";
msgBox.AddButtons(MessageBoxButtons.OK);
msgBox.Text = "The following items are defined:\nItem 1\nItem 2\nItem 3\nItem 4\nItem 5\nItem 6\nItem 7\nItem 8\nItem 9\nItem10\n";
msgBox.Show();
msgBox.Text = "Items:\nItem 1\nItem 2\nItem 3\nItem 4\nItem 5\nItem 6\nItem 7\nItem 8\nItem 9\nItem10\n";
msgBox.Show();
}
private void button1_Click(object sender, System.EventArgs e)
{
Test();
Test2();
Test3();
Test4();
Test5();
Test6();
}
#endregion
#endregion
}
}

View File

@ -0,0 +1,502 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 1.3
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">1.3</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1">this is my long string</data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
[base64 mime encoded serialized .NET Framework object]
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
[base64 mime encoded string representing a byte array form of the .NET Framework object]
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used forserialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnShowCustom.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="btnShowCustom.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="btnShowCustom.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="grpBoxIcon.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="grpBoxIcon.GridSize" type="System.Drawing.Size, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>8, 8</value>
</data>
<data name="grpBoxIcon.SnapToGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</data>
<data name="grpBoxIcon.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="grpBoxIcon.DrawGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</data>
<data name="grpBoxIcon.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="radioButton5.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="radioButton5.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="radioButton5.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="radioButton4.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="radioButton4.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="radioButton4.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="radioButton3.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="radioButton3.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="radioButton3.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="radioButton2.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="radioButton2.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="radioButton2.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="radioButton1.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="radioButton1.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="radioButton1.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="listViewButtons.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="listViewButtons.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="listViewButtons.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="columnHeader1.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="columnHeader1.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="txtMessage.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="txtMessage.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="txtMessage.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="label2.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="label2.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="label2.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="txtCaption.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="txtCaption.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="txtCaption.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="label1.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="label1.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="label1.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="chbAllowSaveResponse.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="chbAllowSaveResponse.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="chbAllowSaveResponse.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="txtSaveResponse.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="txtSaveResponse.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="txtSaveResponse.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="txtResult.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="txtResult.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="txtResult.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="label3.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="label3.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="label3.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="listViewMessageBoxes.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="listViewMessageBoxes.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="listViewMessageBoxes.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="columnHeader2.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="columnHeader2.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="btnAddMessageBox.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="btnAddMessageBox.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="btnAddMessageBox.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="txtName.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="txtName.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="txtName.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="label4.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="label4.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="label4.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="groupBox1.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="groupBox1.GridSize" type="System.Drawing.Size, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>8, 8</value>
</data>
<data name="groupBox1.SnapToGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</data>
<data name="groupBox1.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="groupBox1.DrawGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</data>
<data name="groupBox1.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="txtButtonHelp.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="txtButtonHelp.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="txtButtonHelp.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="label6.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="label6.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="label6.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="chbIsCancel.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="chbIsCancel.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="chbIsCancel.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="txtButtonVal.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="txtButtonVal.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="txtButtonVal.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="label5.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="label5.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="label5.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="txtButtonText.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="txtButtonText.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="txtButtonText.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="ButtonText.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="ButtonText.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="ButtonText.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="btnAddButton.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="btnAddButton.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="btnAddButton.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="chbUseSavedResponse.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="chbUseSavedResponse.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="chbUseSavedResponse.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="chbPlayAlert.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="chbPlayAlert.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="chbPlayAlert.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="toolTip1.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="toolTip1.Location" type="System.Drawing.Point, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</data>
<data name="toolTip1.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="txtTimeout.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="txtTimeout.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="txtTimeout.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="label7.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="label7.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="label7.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="label8.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="label8.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="label8.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="cmbTimeoutResult.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="cmbTimeoutResult.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="cmbTimeoutResult.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="label9.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="label9.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="label9.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="button1.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="button1.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="button1.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="$this.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="$this.Language" type="System.Globalization.CultureInfo, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>(Default)</value>
</data>
<data name="$this.TrayLargeIcon" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="$this.Localizable" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="$this.GridSize" type="System.Drawing.Size, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>8, 8</value>
</data>
<data name="$this.DrawGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</data>
<data name="$this.TrayHeight" type="System.Int32, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>80</value>
</data>
<data name="$this.SnapToGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</data>
<data name="$this.Name">
<value>MessageBoxExDemoForm</value>
</data>
<data name="$this.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
</root>

View File

@ -0,0 +1,58 @@
using System.Reflection;
using System.Runtime.CompilerServices;
//
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
//
[assembly: AssemblyTitle("")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
//
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:
[assembly: AssemblyVersion("1.0.*")]
//
// In order to sign your assembly you must specify a key to use. Refer to the
// Microsoft .NET Framework documentation for more information on assembly signing.
//
// Use the attributes below to control which key is used for signing.
//
// Notes:
// (*) If no key is specified, the assembly is not signed.
// (*) KeyName refers to a key that has been installed in the Crypto Service
// Provider (CSP) on your machine. KeyFile refers to a file which contains
// a key.
// (*) If the KeyFile and the KeyName values are both specified, the
// following processing occurs:
// (1) If the KeyName can be found in the CSP, that key is used.
// (2) If the KeyName does not exist and the KeyFile does exist, the key
// in the KeyFile is installed into the CSP and used.
// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility.
// When specifying the KeyFile, the location of the KeyFile should be
// relative to the project output directory which is
// %Project Directory%\obj\<configuration>. For example, if your KeyFile is
// located in the project directory, you would specify the AssemblyKeyFile
// attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]
// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework
// documentation for more information on this.
//
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile("")]
[assembly: AssemblyKeyName("")]

View File

@ -0,0 +1,294 @@
using System;
using System.Drawing;
using System.Windows.Forms;
namespace Utils.MessageBoxExLib
{
/// <summary>
/// An extended MessageBox with lot of customizing capabilities.
/// </summary>
public class MessageBoxEx
{
#region Fields
private MessageBoxExForm _msgBox = new MessageBoxExForm();
private bool _useSavedResponse = true;
private string _name = null;
#endregion
#region Properties
internal string Name
{
get{ return _name; }
set{ _name = value; }
}
/// <summary>
/// Sets the caption of the message box
/// </summary>
public string Caption
{
set{_msgBox.Caption = value;}
}
/// <summary>
/// Sets the text of the message box
/// </summary>
public string Text
{
set{_msgBox.Message = value;}
}
/// <summary>
/// Sets the icon to show in the message box
/// </summary>
public Icon CustomIcon
{
set{_msgBox.CustomIcon = value;}
}
/// <summary>
/// Sets the icon to show in the message box
/// </summary>
public MessageBoxExIcon Icon
{
set{ _msgBox.StandardIcon = (MessageBoxIcon)Enum.Parse(typeof(MessageBoxIcon), value.ToString());}
}
/// <summary>
/// Sets the font for the text of the message box
/// </summary>
public Font Font
{
set{_msgBox.Font = value;}
}
/// <summary>
/// Sets or Gets the ability of the user to save his/her response
/// </summary>
public bool AllowSaveResponse
{
get{ return _msgBox.AllowSaveResponse; }
set{ _msgBox.AllowSaveResponse = value; }
}
/// <summary>
/// Sets the text to show to the user when saving his/her response
/// </summary>
public string SaveResponseText
{
set{_msgBox.SaveResponseText = value; }
}
/// <summary>
/// Sets or Gets wether the saved response if available should be used
/// </summary>
public bool UseSavedResponse
{
get{ return _useSavedResponse; }
set{ _useSavedResponse = value; }
}
/// <summary>
/// Sets or Gets wether an alert sound is played while showing the message box.
/// The sound played depends on the the Icon selected for the message box
/// </summary>
public bool PlayAlsertSound
{
get{ return _msgBox.PlayAlertSound; }
set{ _msgBox.PlayAlertSound = value; }
}
/// <summary>
/// Sets or Gets the time in milliseconds for which the message box is displayed.
/// </summary>
public int Timeout
{
get{ return _msgBox.Timeout; }
set{ _msgBox.Timeout = value; }
}
/// <summary>
/// Controls the result that will be returned when the message box times out.
/// </summary>
public TimeoutResult TimeoutResult
{
get{ return _msgBox.TimeoutResult; }
set{ _msgBox.TimeoutResult = value; }
}
#endregion
#region Methods
/// <summary>
/// Shows the message box
/// </summary>
/// <returns></returns>
public string Show()
{
return Show(null);
}
/// <summary>
/// Shows the messsage box with the specified owner
/// </summary>
/// <param name="owner"></param>
/// <returns></returns>
public string Show(IWin32Window owner)
{
if(_useSavedResponse && this.Name != null)
{
string savedResponse = MessageBoxExManager.GetSavedResponse(this);
if( savedResponse != null)
return savedResponse;
}
if(owner == null)
{
_msgBox.ShowDialog();
}
else
{
_msgBox.ShowDialog(owner);
}
if(this.Name != null)
{
if(_msgBox.AllowSaveResponse && _msgBox.SaveResponse)
MessageBoxExManager.SetSavedResponse(this, _msgBox.Result);
else
MessageBoxExManager.ResetSavedResponse(this.Name);
}
else
{
Dispose();
}
return _msgBox.Result;
}
/// <summary>
/// Add a custom button to the message box
/// </summary>
/// <param name="button">The button to add</param>
public void AddButton(MessageBoxExButton button)
{
if(button == null)
throw new ArgumentNullException("button","A null button cannot be added");
_msgBox.Buttons.Add(button);
if(button.IsCancelButton)
{
_msgBox.CustomCancelButton = button;
}
}
/// <summary>
/// Add a custom button to the message box
/// </summary>
/// <param name="text">The text of the button</param>
/// <param name="val">The return value in case this button is clicked</param>
public void AddButton(string text, string val)
{
if(text == null)
throw new ArgumentNullException("text","Text of a button cannot be null");
if(val == null)
throw new ArgumentNullException("val","Value of a button cannot be null");
MessageBoxExButton button = new MessageBoxExButton();
button.Text = text;
button.Value = val;
AddButton(button);
}
/// <summary>
/// Add a standard button to the message box
/// </summary>
/// <param name="buttons">The standard button to add</param>
public void AddButton(MessageBoxExButtons button)
{
string buttonText = MessageBoxExManager.GetLocalizedString(button.ToString());
if(buttonText == null)
{
buttonText = button.ToString();
}
string buttonVal = button.ToString();
MessageBoxExButton btn = new MessageBoxExButton();
btn.Text = buttonText;
btn.Value = buttonVal;
if(button == MessageBoxExButtons.Cancel)
{
btn.IsCancelButton = true;
}
AddButton(btn);
}
/// <summary>
/// Add standard buttons to the message box.
/// </summary>
/// <param name="buttons">The standard buttons to add</param>
public void AddButtons(MessageBoxButtons buttons)
{
switch(buttons)
{
case MessageBoxButtons.OK:
AddButton(MessageBoxExButtons.Ok);
break;
case MessageBoxButtons.AbortRetryIgnore:
AddButton(MessageBoxExButtons.Abort);
AddButton(MessageBoxExButtons.Retry);
AddButton(MessageBoxExButtons.Ignore);
break;
case MessageBoxButtons.OKCancel:
AddButton(MessageBoxExButtons.Ok);
AddButton(MessageBoxExButtons.Cancel);
break;
case MessageBoxButtons.RetryCancel:
AddButton(MessageBoxExButtons.Retry);
AddButton(MessageBoxExButtons.Cancel);
break;
case MessageBoxButtons.YesNo:
AddButton(MessageBoxExButtons.Yes);
AddButton(MessageBoxExButtons.No);
break;
case MessageBoxButtons.YesNoCancel:
AddButton(MessageBoxExButtons.Yes);
AddButton(MessageBoxExButtons.No);
AddButton(MessageBoxExButtons.Cancel);
break;
}
}
#endregion
#region Ctor
/// <summary>
/// Ctor is internal because this can only be created by MBManager
/// </summary>
internal MessageBoxEx()
{
}
/// <summary>
/// Called by the manager when it is disposed
/// </summary>
internal void Dispose()
{
if(_msgBox != null)
{
_msgBox.Dispose();
}
}
#endregion
}
}

View File

@ -0,0 +1,52 @@
using System;
namespace Utils.MessageBoxExLib
{
/// <summary>
/// Internal DataStructure used to represent a button
/// </summary>
public class MessageBoxExButton
{
private string _text = null;
/// <summary>
/// Gets or Sets the text of the button
/// </summary>
public string Text
{
get{ return _text; }
set{ _text = value; }
}
private string _value = null;
/// <summary>
/// Gets or Sets the return value when this button is clicked
/// </summary>
public string Value
{
get{ return _value; }
set{_value = value; }
}
private string _helpText = null;
/// <summary>
/// Gets or Sets the tooltip that is displayed for this button
/// </summary>
public string HelpText
{
get{ return _helpText; }
set{ _helpText = value; }
}
private bool _isCancelButton = false;
/// <summary>
/// Gets or Sets wether this button is a cancel button. i.e. the button
/// that will be assumed to have been clicked if the user closes the message box
/// without pressing any button.
/// </summary>
public bool IsCancelButton
{
get{ return _isCancelButton; }
set{ _isCancelButton = value; }
}
}
}

View File

@ -0,0 +1,18 @@
using System;
namespace Utils.MessageBoxExLib
{
/// <summary>
/// Standard MessageBoxEx buttons
/// </summary>
public enum MessageBoxExButtons
{
Ok = 0,
Cancel = 1,
Yes = 2,
No = 4,
Abort = 8,
Retry = 16,
Ignore = 32
}
}

View File

@ -0,0 +1,937 @@
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Diagnostics;
using System.Runtime.InteropServices;
namespace Utils.MessageBoxExLib
{
/// <summary>
/// An advanced MessageBox that supports customizations like Font, Icon,
/// Buttons and Saved Responses
/// </summary>
internal class MessageBoxExForm : System.Windows.Forms.Form
{
#region Constants
private const int LEFT_PADDING = 12;
private const int RIGHT_PADDING = 12;
private const int TOP_PADDING = 12;
private const int BOTTOM_PADDING = 12;
private const int BUTTON_LEFT_PADDING = 4;
private const int BUTTON_RIGHT_PADDING = 4;
private const int BUTTON_TOP_PADDING = 4;
private const int BUTTON_BOTTOM_PADDING = 4;
private const int MIN_BUTTON_HEIGHT = 23;
private const int MIN_BUTTON_WIDTH = 74;
private const int ITEM_PADDING = 10;
private const int ICON_MESSAGE_PADDING = 15;
private const int BUTTON_PADDING = 5;
private const int CHECKBOX_WIDTH = 20;
private const int IMAGE_INDEX_EXCLAMATION = 0;
private const int IMAGE_INDEX_QUESTION = 1;
private const int IMAGE_INDEX_STOP = 2;
private const int IMAGE_INDEX_INFORMATION = 3;
#endregion
#region Fields
private System.ComponentModel.IContainer components;
private System.Windows.Forms.CheckBox chbSaveResponse;
private System.Windows.Forms.ImageList imageListIcons;
private System.Windows.Forms.ToolTip buttonToolTip;
private ArrayList _buttons = new ArrayList();
private bool _allowSaveResponse;
private bool _playAlert = true;
private MessageBoxExButton _cancelButton = null;
private Button _defaultButtonControl = null;
private int _maxLayoutWidth;
private int _maxLayoutHeight;
private int _maxWidth;
private int _maxHeight;
private bool _allowCancel = true;
private string _result = null;
/// <summary>
/// Used to determine the alert sound to play
/// </summary>
private MessageBoxIcon _standardIcon = MessageBoxIcon.None;
private Icon _iconImage = null;
private Timer timerTimeout = null;
private int _timeout = 0;
private TimeoutResult _timeoutResult = TimeoutResult.Default;
private System.Windows.Forms.Panel panelIcon;
private System.Windows.Forms.RichTextBox rtbMessage;
/// <summary>
/// Maps MessageBoxEx buttons to Button controls
/// </summary>
private Hashtable _buttonControlsTable = new Hashtable();
#endregion
#region Properties
public string Message
{
set{ rtbMessage.Text = value; }
}
public string Caption
{
set{ this.Text = value; }
}
public Font CustomFont
{
set{ this.Font = value; }
}
public ArrayList Buttons
{
get{ return _buttons; }
}
public bool AllowSaveResponse
{
get{ return _allowSaveResponse; }
set{ _allowSaveResponse = value; }
}
public bool SaveResponse
{
get{ return chbSaveResponse.Checked; }
}
public string SaveResponseText
{
set{ chbSaveResponse.Text = value; }
}
public MessageBoxIcon StandardIcon
{
set{ SetStandardIcon(value); }
}
public Icon CustomIcon
{
set
{
_standardIcon = MessageBoxIcon.None;
_iconImage = value;
}
}
public MessageBoxExButton CustomCancelButton
{
set{ _cancelButton = value; }
}
public string Result
{
get{ return _result; }
}
public bool PlayAlertSound
{
get{ return _playAlert; }
set{ _playAlert = value; }
}
public int Timeout
{
get{ return _timeout; }
set{ _timeout = value; }
}
public TimeoutResult TimeoutResult
{
get{ return _timeoutResult; }
set{ _timeoutResult = value; }
}
#endregion
#region Ctor/Dtor
public MessageBoxExForm()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
_maxWidth = (int)(SystemInformation.WorkingArea.Width * 0.60);
_maxHeight = (int)(SystemInformation.WorkingArea.Height * 0.90);
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#endregion
#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.components = new System.ComponentModel.Container();
System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(MessageBoxExForm));
this.panelIcon = new System.Windows.Forms.Panel();
this.chbSaveResponse = new System.Windows.Forms.CheckBox();
this.imageListIcons = new System.Windows.Forms.ImageList(this.components);
this.buttonToolTip = new System.Windows.Forms.ToolTip(this.components);
this.rtbMessage = new System.Windows.Forms.RichTextBox();
this.SuspendLayout();
//
// panelIcon
//
this.panelIcon.BackColor = System.Drawing.Color.Transparent;
this.panelIcon.Location = new System.Drawing.Point(8, 8);
this.panelIcon.Name = "panelIcon";
this.panelIcon.Size = new System.Drawing.Size(32, 32);
this.panelIcon.TabIndex = 3;
this.panelIcon.Visible = false;
//
// chbSaveResponse
//
this.chbSaveResponse.FlatStyle = System.Windows.Forms.FlatStyle.System;
this.chbSaveResponse.Location = new System.Drawing.Point(56, 56);
this.chbSaveResponse.Name = "chbSaveResponse";
this.chbSaveResponse.Size = new System.Drawing.Size(104, 16);
this.chbSaveResponse.TabIndex = 0;
//
// imageListIcons
//
this.imageListIcons.ColorDepth = System.Windows.Forms.ColorDepth.Depth16Bit;
this.imageListIcons.ImageSize = new System.Drawing.Size(32, 32);
this.imageListIcons.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageListIcons.ImageStream")));
this.imageListIcons.TransparentColor = System.Drawing.Color.Transparent;
//
// rtbMessage
//
this.rtbMessage.BackColor = System.Drawing.SystemColors.Control;
this.rtbMessage.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.rtbMessage.Location = new System.Drawing.Point(200, 8);
this.rtbMessage.Name = "rtbMessage";
this.rtbMessage.ReadOnly = true;
this.rtbMessage.Size = new System.Drawing.Size(100, 48);
this.rtbMessage.TabIndex = 4;
this.rtbMessage.Text = "";
this.rtbMessage.Visible = false;
//
// MessageBoxExForm
//
this.AutoScale = false;
this.AutoScaleBaseSize = new System.Drawing.Size(5, 14);
this.ClientSize = new System.Drawing.Size(322, 224);
this.Controls.Add(this.rtbMessage);
this.Controls.Add(this.chbSaveResponse);
this.Controls.Add(this.panelIcon);
this.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "MessageBoxExForm";
this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
this.ResumeLayout(false);
}
#endregion
#region Overrides
/// <summary>
/// This will get called everytime we call ShowDialog on the form
/// </summary>
/// <param name="e"></param>
protected override void OnLoad(EventArgs e)
{
//Reset result
_result = null;
this.Size = new Size(_maxWidth, _maxHeight);
//This is the rectangle in which all items will be layed out
_maxLayoutWidth = this.ClientSize.Width - LEFT_PADDING - RIGHT_PADDING;
_maxLayoutHeight = this.ClientSize.Height - TOP_PADDING - BOTTOM_PADDING;
AddOkButtonIfNoButtonsPresent();
DisableCloseIfMultipleButtonsAndNoCancelButton();
SetIconSizeAndVisibility();
SetMessageSizeAndVisibility();
SetCheckboxSizeAndVisibility();
SetOptimumSize();
LayoutControls();
CenterForm();
PlayAlert();
SelectDefaultButton();
StartTimerIfTimeoutGreaterThanZero();
base.OnLoad (e);
}
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if((int)keyData == (int)(Keys.Alt | Keys.F4) && !_allowCancel)
{
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
protected override void OnClosing(CancelEventArgs e)
{
if(_result == null)
{
if(_allowCancel)
{
_result = _cancelButton.Value;
}
else
{
e.Cancel = true;
return;
}
}
if(timerTimeout != null)
{
timerTimeout.Stop();
}
base.OnClosing (e);
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint (e);
if(_iconImage != null)
{
e.Graphics.DrawIcon(_iconImage, new Rectangle(panelIcon.Location, new Size(32, 32)));
}
}
#endregion
#region Methods
/// <summary>
/// Measures a string using the Graphics object for this form with
/// the specified font
/// </summary>
/// <param name="str">The string to measure</param>
/// <param name="maxWidth">The maximum width available to display the string</param>
/// <param name="font">The font with which to measure the string</param>
/// <returns></returns>
private Size MeasureString(string str, int maxWidth, Font font)
{
Graphics g = this.CreateGraphics();
SizeF strRectSizeF = g.MeasureString(str, font, maxWidth);
g.Dispose();
return new Size((int)Math.Ceiling(strRectSizeF.Width), (int)Math.Ceiling(strRectSizeF.Height));
}
/// <summary>
/// Measures a string using the Graphics object for this form and the
/// font of this form
/// </summary>
/// <param name="str"></param>
/// <param name="maxWidth"></param>
/// <returns></returns>
private Size MeasureString(string str, int maxWidth)
{
return MeasureString(str, maxWidth, this.Font);
}
/// <summary>
/// Gets the longest button text
/// </summary>
/// <returns></returns>
private string GetLongestButtonText()
{
int maxLen = 0;
string maxStr = null;
foreach(MessageBoxExButton button in _buttons)
{
if(button.Text != null && button.Text.Length > maxLen)
{
maxLen = button.Text.Length;
maxStr = button.Text;
}
}
return maxStr;
}
/// <summary>
/// Sets the size and visibility of the Message
/// </summary>
private void SetMessageSizeAndVisibility()
{
if(rtbMessage.Text == null || rtbMessage.Text.Trim().Length == 0)
{
rtbMessage.Size = Size.Empty;
rtbMessage.Visible = false;
}
else
{
int maxWidth = _maxLayoutWidth;
if(panelIcon.Size.Width != 0)
{
maxWidth = maxWidth - (panelIcon.Size.Width + ICON_MESSAGE_PADDING);
}
//We need to account for scroll bar width and height, otherwise for certains
//kinds of text the scroll bar shows up unnecessarily
maxWidth = maxWidth - SystemInformation.VerticalScrollBarWidth;
Size messageRectSize = MeasureString(rtbMessage.Text, maxWidth);
messageRectSize.Width += SystemInformation.VerticalScrollBarWidth;
messageRectSize.Height = Math.Max(panelIcon.Height, messageRectSize.Height) + SystemInformation.HorizontalScrollBarHeight;
rtbMessage.Size = messageRectSize;
rtbMessage.Visible = true;
}
}
/// <summary>
/// Sets the size and visibility of the Icon
/// </summary>
private void SetIconSizeAndVisibility()
{
if(_iconImage == null)
{
panelIcon.Visible = false;
panelIcon.Size = Size.Empty;
}
else
{
panelIcon.Size = new Size(32,32);
panelIcon.Visible = true;
}
}
/// <summary>
/// Sets the size and visibility of the save response checkbox
/// </summary>
private void SetCheckboxSizeAndVisibility()
{
if(!AllowSaveResponse)
{
chbSaveResponse.Visible = false;
chbSaveResponse.Size = Size.Empty;
}
else
{
Size saveResponseTextSize = MeasureString(chbSaveResponse.Text, _maxLayoutWidth);
saveResponseTextSize.Width += CHECKBOX_WIDTH;
chbSaveResponse.Size = saveResponseTextSize;
chbSaveResponse.Visible= true;
}
}
/// <summary>
/// Calculates the button size based on the text of the longest
/// button text
/// </summary>
/// <returns></returns>
private Size GetButtonSize()
{
string longestButtonText = GetLongestButtonText();
if(longestButtonText == null)
{
//TODO:Handle this case
}
Size buttonTextSize = MeasureString(longestButtonText, _maxLayoutWidth);
Size buttonSize = new Size(buttonTextSize.Width + BUTTON_LEFT_PADDING + BUTTON_RIGHT_PADDING,
buttonTextSize.Height + BUTTON_TOP_PADDING + BUTTON_BOTTOM_PADDING);
if(buttonSize.Width < MIN_BUTTON_WIDTH)
buttonSize.Width = MIN_BUTTON_WIDTH;
if(buttonSize.Height < MIN_BUTTON_HEIGHT)
buttonSize.Height = MIN_BUTTON_HEIGHT;
return buttonSize;
}
/// <summary>
/// Set the icon
/// </summary>
/// <param name="icon"></param>
private void SetStandardIcon(MessageBoxIcon icon)
{
_standardIcon = icon;
switch(icon)
{
case MessageBoxIcon.Asterisk:
_iconImage = SystemIcons.Asterisk;
break;
case MessageBoxIcon.Error:
_iconImage = SystemIcons.Error;
break;
case MessageBoxIcon.Exclamation:
_iconImage = SystemIcons.Exclamation;
break;
// case MessageBoxIcon.Hand:
// _iconImage = SystemIcons.Hand;
// break;
// case MessageBoxIcon.Information:
// _iconImage = SystemIcons.Information;
// break;
case MessageBoxIcon.Question:
_iconImage = SystemIcons.Question;
break;
// case MessageBoxIcon.Stop:
// _iconImage = SystemIcons.Stop;
// break;
// case MessageBoxIcon.Warning:
// _iconImage = SystemIcons.Warning;
// break;
case MessageBoxIcon.None:
_iconImage = null;
break;
}
}
private void AddOkButtonIfNoButtonsPresent()
{
if(_buttons.Count == 0)
{
MessageBoxExButton okButton = new MessageBoxExButton();
okButton.Text = MessageBoxExButtons.Ok.ToString();
okButton.Value = MessageBoxExButtons.Ok.ToString();
_buttons.Add(okButton);
}
}
/// <summary>
/// Centers the form on the screen
/// </summary>
private void CenterForm()
{
int x = (SystemInformation.WorkingArea.Width - this.Width ) / 2;
int y = (SystemInformation.WorkingArea.Height - this.Height ) / 2;
this.Location = new Point(x,y);
}
/// <summary>
/// Sets the optimum size for the form based on the controls that
/// need to be displayed
/// </summary>
private void SetOptimumSize()
{
int ncWidth = this.Width - this.ClientSize.Width;
int ncHeight = this.Height - this.ClientSize.Height;
int iconAndMessageRowWidth = rtbMessage.Width + ICON_MESSAGE_PADDING + panelIcon.Width;
int saveResponseRowWidth = chbSaveResponse.Width + (int)(panelIcon.Width / 2);
int buttonsRowWidth = GetWidthOfAllButtons();
int captionWidth = GetCaptionSize().Width;
int maxItemWidth = Math.Max(saveResponseRowWidth, Math.Max(iconAndMessageRowWidth, buttonsRowWidth));
int requiredWidth = LEFT_PADDING + maxItemWidth + RIGHT_PADDING + ncWidth;
//Since Caption width is not client width, we do the check here
if(requiredWidth < captionWidth)
requiredWidth = captionWidth;
int requiredHeight = TOP_PADDING + Math.Max(rtbMessage.Height,panelIcon.Height) + ITEM_PADDING + chbSaveResponse.Height + ITEM_PADDING + GetButtonSize().Height + BOTTOM_PADDING + ncHeight;
//Fix the bug where if the message text is huge then the buttons are overwritten.
//Incase the required height is more than the max height then adjust that in the
//message height
if(requiredHeight > _maxHeight)
{
rtbMessage.Height -= requiredHeight - _maxHeight;
}
int height = Math.Min(requiredHeight, _maxHeight);
int width = Math.Min(requiredWidth, _maxWidth);
this.Size = new Size(width, height);
}
/// <summary>
/// Returns the width that will be occupied by all buttons including
/// the inter-button padding
/// </summary>
private int GetWidthOfAllButtons()
{
Size buttonSize = GetButtonSize();
int allButtonsWidth = buttonSize.Width*_buttons.Count + BUTTON_PADDING*(_buttons.Count-1);
return allButtonsWidth;
}
/// <summary>
/// Gets the width of the caption
/// </summary>
private Size GetCaptionSize()
{
Font captionFont = GetCaptionFont();
if(captionFont == null)
{
//some error occured while determining system font
captionFont = new Font("Tahoma",11);
}
int availableWidth = _maxWidth - SystemInformation.CaptionButtonSize.Width - SystemInformation.Border3DSize.Width * 2 ;
Size captionSize = MeasureString(this.Text, availableWidth, captionFont);
captionSize.Width += SystemInformation.CaptionButtonSize.Width + SystemInformation.Border3DSize.Width * 2;
return captionSize;
}
/// <summary>
/// Layout all the controls
/// </summary>
private void LayoutControls()
{
panelIcon.Location = new Point(LEFT_PADDING, TOP_PADDING);
rtbMessage.Location = new Point(LEFT_PADDING + panelIcon.Width + ICON_MESSAGE_PADDING * (panelIcon.Width == 0 ? 0 : 1) , TOP_PADDING);
chbSaveResponse.Location = new Point(LEFT_PADDING + (int)(panelIcon.Width / 2),
TOP_PADDING + Math.Max(panelIcon.Height, rtbMessage.Height) + ITEM_PADDING);
Size buttonSize = GetButtonSize();
int allButtonsWidth = GetWidthOfAllButtons();
int firstButtonX = ((int)(this.ClientSize.Width - allButtonsWidth) / 2);
int firstButtonY = this.ClientSize.Height - BOTTOM_PADDING - buttonSize.Height;
Point nextButtonLocation = new Point(firstButtonX,firstButtonY);
bool foundDefaultButton = false;
foreach(MessageBoxExButton button in _buttons)
{
Button buttonCtrl = GetButton(button, buttonSize, nextButtonLocation);
if(!foundDefaultButton)
{
_defaultButtonControl = buttonCtrl;
foundDefaultButton = true;
}
nextButtonLocation.X += buttonSize.Width + BUTTON_PADDING;
}
}
/// <summary>
/// Gets the button control for the specified MessageBoxExButton, if the
/// control has not been created this method creates the control
/// </summary>
/// <param name="button"></param>
/// <param name="size"></param>
/// <param name="location"></param>
/// <returns></returns>
private Button GetButton(MessageBoxExButton button, Size size, Point location)
{
Button buttonCtrl = null;
if(_buttonControlsTable.ContainsKey(button))
{
buttonCtrl = _buttonControlsTable[button] as Button;
buttonCtrl.Size = size;
buttonCtrl.Location = location;
}
else
{
buttonCtrl = CreateButton(button, size, location);
_buttonControlsTable[button] = buttonCtrl;
this.Controls.Add(buttonCtrl);
}
return buttonCtrl;
}
/// <summary>
/// Creates a button control based on info from MessageBoxExButton
/// </summary>
/// <param name="button"></param>
/// <param name="size"></param>
/// <param name="location"></param>
/// <returns></returns>
private Button CreateButton(MessageBoxExButton button, Size size, Point location)
{
Button buttonCtrl = new Button();
buttonCtrl.Size = size;
buttonCtrl.Text = button.Text;
buttonCtrl.TextAlign = ContentAlignment.MiddleCenter;
buttonCtrl.FlatStyle = FlatStyle.System;
if(button.HelpText != null && button.HelpText.Trim().Length != 0)
{
buttonToolTip.SetToolTip(buttonCtrl, button.HelpText);
}
buttonCtrl.Location = location;
buttonCtrl.Click += new EventHandler(OnButtonClicked);
buttonCtrl.Tag = button.Value;
return buttonCtrl;
}
private void DisableCloseIfMultipleButtonsAndNoCancelButton()
{
if(_buttons.Count > 1)
{
if(_cancelButton != null)
return;
//See if standard cancel button is present
foreach(MessageBoxExButton button in _buttons)
{
if(button.Text == MessageBoxExButtons.Cancel.ToString() && button.Value == MessageBoxExButtons.Cancel.ToString())
{
_cancelButton = button;
return;
}
}
//Standard cancel button is not present, Disable
//close button
DisableCloseButton(this);
_allowCancel = false;
}
else if(_buttons.Count == 1)
{
_cancelButton = _buttons[0] as MessageBoxExButton;
}
else
{
//This condition should never get called
_allowCancel = false;
}
}
/// <summary>
/// Plays the alert sound based on the icon set for the message box
/// </summary>
private void PlayAlert()
{
if(_playAlert)
{
if(_standardIcon != MessageBoxIcon.None)
{
MessageBeep((uint)_standardIcon);
}
else
{
MessageBeep(0 /*MB_OK*/);
}
}
}
private void SelectDefaultButton()
{
if(_defaultButtonControl != null)
{
_defaultButtonControl.Select();
}
}
private void StartTimerIfTimeoutGreaterThanZero()
{
if(_timeout > 0)
{
if(timerTimeout == null)
{
timerTimeout = new Timer(this.components);
timerTimeout.Tick += new EventHandler(timerTimeout_Tick);
}
if(!timerTimeout.Enabled)
{
timerTimeout.Interval = _timeout;
timerTimeout.Start();
}
}
}
private void SetResultAndClose(string result)
{
_result = result;
this.DialogResult = DialogResult.OK;
}
#endregion
#region Event Handlers
private void OnButtonClicked(object sender, EventArgs e)
{
Button btn = sender as Button;
if(btn == null || btn.Tag == null)
return;
string result = btn.Tag as string;
SetResultAndClose(result);
}
private void timerTimeout_Tick(object sender, EventArgs e)
{
timerTimeout.Stop();
switch(_timeoutResult)
{
case TimeoutResult.Default:
_defaultButtonControl.PerformClick();
break;
case TimeoutResult.Cancel:
if(_cancelButton != null)
{
SetResultAndClose(_cancelButton.Value);
}
else
{
_defaultButtonControl.PerformClick();
}
break;
case TimeoutResult.Timeout:
SetResultAndClose(MessageBoxExResult.Timeout);
break;
}
}
#endregion
#region P/Invoke - SystemParametersInfo, GetSystemMenu, EnableMenuItem, MessageBeep
private Font GetCaptionFont()
{
NONCLIENTMETRICS ncm = new NONCLIENTMETRICS();
ncm.cbSize = Marshal.SizeOf(typeof(NONCLIENTMETRICS));
try
{
bool result = SystemParametersInfo(SPI_GETNONCLIENTMETRICS, ncm.cbSize, ref ncm, 0);
if(result)
{
return Font.FromLogFont(ncm.lfCaptionFont);
}
else
{
int lastError = Marshal.GetLastWin32Error();
return null;
}
}
catch(Exception /*ex*/)
{
//System.Console.WriteLine(ex.Message);
}
return null;
}
private const int SPI_GETNONCLIENTMETRICS = 41;
private const int LF_FACESIZE = 32;
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]
private struct LOGFONT
{
public int lfHeight;
public int lfWidth;
public int lfEscapement;
public int lfOrientation;
public int lfWeight;
public byte lfItalic;
public byte lfUnderline;
public byte lfStrikeOut;
public byte lfCharSet;
public byte lfOutPrecision;
public byte lfClipPrecision;
public byte lfQuality;
public byte lfPitchAndFamily;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string lfFaceSize;
}
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]
private struct NONCLIENTMETRICS
{
public int cbSize;
public int iBorderWidth;
public int iScrollWidth;
public int iScrollHeight;
public int iCaptionWidth;
public int iCaptionHeight;
public LOGFONT lfCaptionFont;
public int iSmCaptionWidth;
public int iSmCaptionHeight;
public LOGFONT lfSmCaptionFont;
public int iMenuWidth;
public int iMenuHeight;
public LOGFONT lfMenuFont;
public LOGFONT lfStatusFont;
public LOGFONT lfMessageFont;
}
[DllImport("user32.dll", SetLastError=true, CharSet=CharSet.Auto)]
private static extern bool SystemParametersInfo(int uiAction, int uiParam,
ref NONCLIENTMETRICS ncMetrics, int fWinIni);
[DllImport("user32.dll", CharSet=CharSet.Auto)]
private static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);
[DllImport("user32.dll", CharSet=CharSet.Auto)]
private static extern bool EnableMenuItem(IntPtr hMenu, uint uIDEnableItem,
uint uEnable);
private const int SC_CLOSE = 0xF060;
private const int MF_BYCOMMAND = 0x0;
private const int MF_GRAYED = 0x1;
private const int MF_ENABLED = 0x0;
private void DisableCloseButton(Form form)
{
try
{
EnableMenuItem(GetSystemMenu(form.Handle, false), SC_CLOSE, MF_BYCOMMAND | MF_GRAYED);
}
catch(Exception /*ex*/)
{
//System.Console.WriteLine(ex.Message);
}
}
[DllImport("user32.dll", CharSet=CharSet.Auto)]
private static extern bool MessageBeep(uint type);
#endregion
}
}

View File

@ -0,0 +1,387 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 1.3
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">1.3</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1">this is my long string</data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
[base64 mime encoded serialized .NET Framework object]
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
[base64 mime encoded string representing a byte array form of the .NET Framework object]
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used forserialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="panelIcon.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="panelIcon.SnapToGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</data>
<data name="panelIcon.DrawGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</data>
<data name="panelIcon.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="panelIcon.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="panelIcon.GridSize" type="System.Drawing.Size, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>8, 8</value>
</data>
<data name="chbSaveResponse.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="chbSaveResponse.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="chbSaveResponse.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="imageListIcons.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="imageListIcons.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="imageListIcons.Location" type="System.Drawing.Point, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</data>
<data name="imageListIcons.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFpTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0xLjAuNTAw
MC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZT
eXN0ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMA
AADELQAAAk1TRnQBSQFMAgEBBAEAAQUBAAEEAQABIAEAASABAAT/AREBEAj/AUIBTQE2BwABNgMAASgD
AAGAAwABQAMAAQEBAAEQBgABQP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/
AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wA8AAEQAUIBEAFCARABQgEQAUIBEAFCARABQgEQAUIBEAFCARAB
QgEQAUIBEAFCARABQgEQAUIBEAFCARABQgEQAUIBEAFCARABQgEQAUIBEAFCARABQgEQAUIBEAFCARAB
QgEQAUIqAAEQAUIBEAFCMAABEAFCARABQgEQAUIBEAFCARABQgEQAUIBEAFCARABQjwAARABQgEQAUIe
AAEQAUIBEAFCARABQgEQAUIBEAFCARABQgEQAUIBEAFCARABQgEQAUIBEAFCARABQgEQAUIBEAFCARAB
QgEQAUIBEAFCARABQgEQAUIBEAFCARABQgEQAUIBEAFCARABQgEQAUIBEAFCARABQiYAARABQgEQAUIB
EAFCKgABEAFCARABQgEQAUIBEAFCARABQgEQAUIBEAFCARABQgEQAUIBEAFCARABQgEQAUIBEAFCARAB
QjQAARABQgEQAUIBEAFCGwABQjAAARABQgEQAUIBEAFCARABQgEQAUImAAEQAUIBEAFCKAABEAFCARAB
QgEAAUABAAFAAQABQAEAAUABAAFAAQABQAEAAUABAAFAARABQgEQAUIBEAFCARABQgEQAUIBEAFCNAAB
EAFCARABQhkAAUIB4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B
4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8BGAFjAgABEAFCARAB
QgEQAUIBEAFCIgAB/wF/AgABEAFCARABQiQAARABQgEAAUABAAFAAQABQAEAAXwBAAF8AQABfAEAAXwB
AAF8AQABfAEAAXwBAAF8AQABQAEAAUABAAFAARABQgEQAUIBEAFCARABQgEQAUIsAAH/AX8CAAEQAUIB
EAFCFwABQgHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B
4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/ARgBYwIAARAB
QgEQAUIBEAFCIAAB/wF/Af8BfwIAARABQgEQAUIiAAEQAUIBAAFAAQABfAEAAXwBAAF8AQABfAEAAXwB
AAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAFAARABQgEQAUIBEAFCARABQgEQAUIo
AAH/AX8B/wF/AgABEAFCARABQhcAAUIB4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B
4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B
4AF/AeABfwHgAX8CAAEQAUIBEAFCARABQhoAARABQgIAAf8BfwH/AX8B/wF/AgABEAFCARABQiEAAUAB
AAFAAQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwB
AAF8AQABfAEAAUABAAFAARABQgEQAUIBEAFCARABQiAAARABQgIAAf8BfwH/AX8B/wF/AgABEAFCARAB
QhcAAUIB4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8BGAFjBAAB
GAFjAeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8CAAEQAUIBEAFCFgAB
EAFCARABQgEQAUIBEAFCAgAB/wF/Af8BfwH/AX8CAAEQAUIBEAFCARABQgEQAUIBEAFCGQABQAEAAXwB
AAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwB
AAF8AQABfAEAAXwBAAF8AQABQAEQAUIBEAFCARABQhoAARABQgEQAUIBEAFCARABQgIAAf8BfwH/AX8B
/wF/AgABEAFCARABQgEQAUIBEAFCARABQhEAAUIB4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeAB
fwHgAX8B4AF/AeABfwHgAX8IAAHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B
GAFjAgABEAFCARABQhIAARABQgEQAUIBEAFCBgABGAFjAf8BfwH/AX8B/wF/AgABEAFCARABQgEQAUIB
EAFCARABQgEQAUIBEAFCEwABQAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwB
AAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAFAARABQgEQAUIB
EAFCFAABEAFCARABQgEQAUIGAAEYAWMB/wF/Af8BfwH/AX8CAAEQAUIBEAFCARABQgEQAUIBEAFCARAB
QgEQAUIPAAFCAeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8IAAHgAX8B
4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8CAAEQAUIBEAFCEgABEAFCBgABGAFjAf8B
fwH/AX8B/wF/Af8BfwH/AX8B/wF/ARgBYwYAARABQgEQAUIBEAFCARABQgEQAUIRAAFAAQABfAEAAXwB
AAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwB
AAF8AQABfAEAAXwBAAF8AQABfAEAAUABEAFCARABQgEQAUIBEAFCEAABEAFCBgABGAFjAf8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/ARgBYwYAARABQgEQAUIBEAFCARABQgEQAUINAAFCAeABfwHgAX8B4AF/AeAB
fwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8BGAFjBAABGAFjAeABfwHgAX8B4AF/AeABfwHgAX8B
4AF/AeABfwHgAX8B4AF/ARgBYwIAARABQgEQAUIUAAEYAWMB/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8BGAFjBAABEAFCARABQgEQAUIBEAFCDQABQAEAAXwBAAF8AQAB
fAEAAXwBAAF8AQABfAH/AX8BAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8Af8B
fwEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAUABEAFCARABQgEQAUISAAEYAWMB/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8BGAFjBAABEAFCARABQgEQAUIBEAFCDQAB
QgHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeAB
fwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AgABEAFCARABQhIAARgBYwH/AX8B/wF/Af8B
fwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8BGAFjAgAB
EAFCARABQgEQAUIBEAFCCQABQAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAH/AX8B/wF/Af8BfwEAAXwB
AAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8Af8BfwH/AX8B/wF/AQABfAEAAXwBAAF8AQABfAEAAXwB
AAF8AQABQAEQAUIBEAFCDgABGAFjAf8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8B
fwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwEYAWMCAAEQAUIBEAFCARABQgEQAUILAAFCAeABfwHgAX8B
4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8CAAHgAX8B4AF/AeABfwHgAX8B4AF/AeAB
fwHgAX8B4AF/AeABfwHgAX8BGAFjAgABEAFCARABQhAAAf8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8B
fwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8CAAEQAUIB
EAFCARABQgEQAUIHAAFAAQABfAEAAXwBAAF8AQABfAEAAXwB/wF/Af8BfwH/AX8B/wF/Af8BfwEAAXwB
AAF8AQABfAEAAXwBAAF8AQABfAH/AX8B/wF/Af8BfwH/AX8B/wF/AQABfAEAAXwBAAF8AQABfAEAAXwB
AAFAARABQgEQAUIBEAFCCgAB/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8B
fwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwIAARABQgEQAUIBEAFCARABQgsAAUIB
4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8BGAFjAgABGAFjAeABfwHgAX8B4AF/AeAB
fwHgAX8B4AF/AeABfwHgAX8B4AF/AgABEAFCARABQhAAAf8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8B
fwH/AX8B/wF/ARgBYwEfAQABHwEAARgBYwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8B
fwIAARABQgEQAUIBEAFCARABQgUAAUABAAF8AQABfAEAAXwBAAF8AQABfAEAAXwB/wF/Af8BfwH/AX8B
/wF/Af8BfwEAAXwBAAF8AQABfAEAAXwB/wF/Af8BfwH/AX8B/wF/Af8BfwEAAXwBAAF8AQABfAEAAXwB
AAF8AQABfAEAAUABEAFCARABQgEQAUIIAAH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8B
fwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8CAAEQAUIB
EAFCARABQgEQAUIJAAFCAeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AQABQgMAAUIB
4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwEYAWMCAAEQAUIBEAFCDAABEAFCAf8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwEfAQABHwEAAR8BAAEfAQAB/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/AgABEAFCARABQgEQAUIDAAFAAQABfAEAAXwBAAF8AQAB
fAEAAXwBAAF8AQABfAEAAXwB/wF/Af8BfwH/AX8B/wF/Af8BfwEAAXwBAAF8Af8BfwH/AX8B/wF/Af8B
fwH/AX8BAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAUABEAFCARABQgQAARABQgH/AX8B
/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/AR8BAAEfAQABHwEAAR8BAAEfAQABHwEAAR8BAAEfAQAB
HwEAAf8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwIAARABQgEQAUIBEAFCCwABQgHgAX8B4AF/AeAB
fwHgAX8B4AF/AeABfwHgAX8B4AF/BgAB4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwIAARAB
QgEQAUIMAAEQAUIBGAFjAf8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwEfAQAB
HwEAAR8BAAEfAQAB/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/ARgBYwIAARAB
QgEQAUIBEAFCAQABQAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAH/AX8B/wF/Af8B
fwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8BAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQAB
fAEAAXwBAAFAARABQgEQAUICAAEQAUIBGAFjAf8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwEfAQABHwEAAR8BAAEfAQABHwEAAf8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B
/wF/ARgBYwIAARABQgEQAUIBEAFCCQABQgHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8BGAFjBgAB
GAFjAeABfwHgAX8B4AF/AeABfwHgAX8B4AF/ARgBYwIAARABQgEQAUIMAAEQAUIB/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwEYAWMBHwEAAR8BAAEYAWMB/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwIAARABQgEQAUIBEAFCAQABQAEAAXwBAAF8AQAB
fAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwB/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8B
fwEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAFAARABQgEQAUICAAEQAUIB
/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwEfAQABHwEAAR8BAAEfAQAB
HwEAAf8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwIAARABQgEQAUIBEAFCCwAB
QgHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwEAAUIHAAFCAeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AgAB
EAFCARABQgwAARABQgEYAWMB/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8B
fwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8B
fwEYAWMCAAEQAUIBEAFCAQABQAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwB
AAF8Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwB
AAF8AQABfAEAAXwBAAFAARABQgEQAUIBEAFCARgBYwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/AR8BAAEfAQABHwEAAR8BAAEfAQAB/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/ARgBYwIAARABQgEQAUILAAFCAeABfwHgAX8B4AF/AeABfwHgAX8B4AF/CgAB
4AF/AeABfwHgAX8B4AF/AeABfwEYAWMCAAEQAUIBEAFCDAABEAFCAf8BfwH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwEfAQABHwEAAf8BfwH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwIAARABQgEQAUIBAAFAAQABfAEAAXwBAAF8AQAB
fAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwB/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8BAAF8AQAB
fAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAUABEAFCARABQgEQAUIB/wF/Af8B
fwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8BHwEAAR8BAAEfAQABHwEAAR8B
AAH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/AgABEAFCARABQg0AAUIB
4AF/AeABfwHgAX8B4AF/AeABfwoAAeABfwHgAX8B4AF/AeABfwHgAX8CAAEQAUIBEAFCDgABEAFCAf8B
fwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwEfAQABHwEAARgB
YwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwIAARABQgEQAUIB
AAFAAQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAUAB
EAFCARABQgEQAUIB/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B
HwEAAR8BAAEfAQABHwEAAR8BAAH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B
/wF/AgABEAFCARABQg0AAUIB4AF/AeABfwHgAX8B4AF/AeABfwoAAeABfwHgAX8B4AF/AeABfwEYAWMC
AAEQAUIBEAFCDgABEAFCAf8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwEfAQABHwEAAR8BAAH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwIAARABQgEQAUIBAAFAAQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8Af8B
fwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwEAAXwBAAF8AQABfAEAAXwBAAF8AQAB
fAEAAXwBAAF8AQABfAEAAUABEAFCAgABEAFCAf8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/AR8BAAEfAQABHwEAAR8BAAEfAQAB/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/Af8BfwIAARABQgEQAUIPAAFCAeABfwHgAX8B4AF/AeABfwoAAeABfwHgAX8B
4AF/AeABfwIAARABQgEQAUIQAAEQAUIB/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/ARgBYwEfAQABHwEAAR8BAAH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/AgABEAFCARABQgEAAUABAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQAB
fAH/AX8B/wF/Af8BfwH/AX8B/wF/AQABfAEAAXwB/wF/Af8BfwH/AX8B/wF/Af8BfwEAAXwBAAF8AQAB
fAEAAXwBAAF8AQABfAEAAXwBAAF8AQABQAEQAUICAAEQAUIB/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8BHwEAAR8BAAEfAQABHwEAAR8BAAH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/AgABEAFCARABQg8AAUIB4AF/AeABfwHgAX8B4AF/CgAB
4AF/AeABfwHgAX8BGAFjAgABEAFCARABQhAAARABQgH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwEYAWMBHwEAAR8BAAEYAWMB/wF/AR8BAAEfAQABHwEAAR8BAAH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8CAAEQAUIFAAFAAQABfAEAAXwBAAF8AQABfAEAAXwBAAF8Af8B
fwH/AX8B/wF/Af8BfwH/AX8BAAF8AQABfAEAAXwBAAF8Af8BfwH/AX8B/wF/Af8BfwH/AX8BAAF8AQAB
fAEAAXwBAAF8AQABfAEAAXwBAAFAARABQgEQAUICAAEQAUIB/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/AR8BAAEfAQABHwEAAR8BAAEfAQABHwEAAR8BAAH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/AgABEAFCEwABQgHgAX8B4AF/AeABfwEYAWMGAAEYAWMB
4AF/AeABfwHgAX8CAAEQAUIBEAFCEgABEAFCARgBYwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B
/wF/AR8BAAEfAQABHwEAAR8BAAH/AX8BGAFjAR8BAAEfAQABHwEAAR8BAAH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/ARgBYwIAARABQgUAAUABAAF8AQABfAEAAXwBAAF8AQABfAH/AX8B/wF/Af8B
fwH/AX8B/wF/AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8Af8BfwH/AX8B/wF/Af8BfwH/AX8BAAF8AQAB
fAEAAXwBAAF8AQABfAEAAUABEAFCBAABEAFCARgBYwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/ARgBYwIAARABQhMAAUIB4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeAB
fwHgAX8B4AF/ARgBYwIAARABQgEQAUIUAAEQAUIB/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8B
fwEfAQABHwEAAR8BAAEfAQAB/wF/Af8BfwEfAQABHwEAAR8BAAEfAQAB/wF/Af8BfwH/AX8B/wF/Af8B
fwH/AX8B/wF/Af8BfwIAARABQgcAAUABAAF8AQABfAEAAXwBAAF8AQABfAEAAXwB/wF/Af8BfwH/AX8B
AAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAH/AX8B/wF/Af8BfwEAAXwBAAF8AQABfAEAAXwB
AAF8AQABfAEAAUAIAAEQAUIB/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8B
fwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8B
fwIAARABQhcAAUIB4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8CAAEQAUIBEAFCFgAB
EAFCARgBYwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8BHwEAAR8BAAH/AX8B/wF/Af8BfwH/AX8B
HwEAAR8BAAEfAQABHwEAAf8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwEYAWMNAAFAAQABfAEAAXwB
AAF8AQABfAEAAXwBAAF8Af8BfwEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwB
/wF/AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABQAEQAUIIAAEQAUIBGAFjAf8BfwH/AX8B/wF/Af8B
fwH/AX8B/wF/Af8BfwH/AX8B/wF/ARgBYwEfAQABHwEAAR8BAAEfAQABGAFjAf8BfwH/AX8B/wF/Af8B
fwH/AX8B/wF/Af8BfwH/AX8B/wF/ARgBYxsAAUIB4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeAB
fwEYAWMCAAEQAUIBEAFCGAABEAFCAf8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwEYAWMBHwEAARgB
YwH/AX8B/wF/AR8BAAEfAQABHwEAAR8BAAEYAWMB/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/EQAB
QAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQAB
fAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAFAARABQgwAARABQgH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/Af8BfwEfAQABHwEAAR8BAAEfAQABHwEAAR8BAAH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/Af8Bfx8AAUIB4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AgABEAFCARAB
QhwAARABQgH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8BGAFjAR8BAAEfAQABHwEAAR8BAAEfAQAB
HwEAARgBYwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8TAAFAAQABfAEAAXwBAAF8AQABfAEAAXwB
AAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwB
AAF8AQABfAEAAUAQAAEQAUIB/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwEfAQABHwEAAR8B
AAEfAQABHwEAAR8BAAH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/IQABQgHgAX8B4AF/AeAB
fwHgAX8B4AF/AeABfwEYAWMCAAEQAUIBEAFCHgABEAFCAf8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8B
fwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8XAAFAAQAB
fAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQAB
fAEAAXwBAAF8AQABfAEAAXwBAAFAFAABEAFCAf8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwEYAWMB
HwEAAR8BAAEfAQABHwEAARgBYwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8lAAFCAeABfwHgAX8B
4AF/AeABfwHgAX8CAAEQAUIBEAFCIgABEAFCARgBYwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8BGAFjARABQhkAAUABAAFAAQABfAEAAXwB
AAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAUAB
AAFAGAABEAFCARgBYwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8B
fwH/AX8B/wF/Af8BfwH/AX8BGAFjARABQiUAAUIB4AF/AeABfwHgAX8B4AF/ARgBYwIAARABQiYAARAB
QgEQAUIBGAFjAf8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/ARgB
YwEQAUIBEAFCHwABQAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQAB
fAEAAXwBAAF8AQABQB4AARABQgEQAUIBGAFjAf8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/ARgBYwEQAUIBEAFCKQABQgHgAX8B4AF/ARgBYzAAARABQgEQAUIBEAFCARgB
YwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwEYAWMBEAFCARABQgEQAUIlAAFAAQABQAEAAUABAAF8AQAB
fAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAUABAAFAAQABQCQAARABQgEQAUIBEAFCARgBYwH/AX8B
/wF/Af8BfwH/AX8B/wF/Af8BfwEYAWMBEAFCARABQgEQAUIvAAFCAQABQgEAAUI2AAEQAUIBEAFCARAB
QgEQAUIBEAFCARABQgEQAUIBEAFCMQABQAEAAUABAAFAAQABQAEAAUABAAFAAQABQAEAAUAwAAEQAUIB
EAFCARABQgEQAUIBEAFCARABQgEQAUIBEAFCGgABQgFNAT4HAAE+AwABKAMAAYADAAFAAwABAQEAAQEG
AAEEFgAD//8A/wADAAH4AgABAwL/AecC/wH4AQcD/wHnAf8B8AIAAQEC/wHHAv8BwAEAA/8BxwH/AcAD
AAL/AYcC/wGAAQABfwL/AYcB/wGAAwAC/wEHAf8B/gIAAR8C/wEHAf8EAAH/Af4BBwH/AfwCAAEPAf8B
/gEHAf8EAAH/AfgBBwH/AfgCAAEHAf8B+AEHAf8DAAEBAf8BwAEAAf8B8AIAAQcB/wHAAQAB/wMAAQEB
/wIAAT8B4AIAAQMB/wIAAT8BgAIAAQMB/gIAAR8B4AIAAQEB/gIAAR8BgAIAAQMB/AIAAQ8BwAIAAQEB
/AIAAQ8BwAIAAQcB+AIAAQcBgAIAAQEB+AIAAQcBwAIAAQcB8AIAAQMBgAMAAfACAAEDAeACAAEPAeAC
AAEBAYADAAHgAgABAQHgAgABDwHAAgABAQQAAcACAAEBAfACAAEfAYAHAAGAAwAB8AIAAR8BgAcAAYAD
AAH4AgABPwwAAfgCAAE/DAAB/AIAAX8MAAH8AgABfwcAAQEEAAH+AgAB/wcAAQEEAAH+AgAB/wMAAQEB
gAIAAQEDAAEBAf8BAAEBAf8DAAEBAYACAAEDAwABAQH/AQABAQH/AYACAAEDAYACAAEHAYACAAEDAf8B
gAEDAf8BgAIAAQcBwAIAAQcBgAIAAQcB/wGAAQMB/wHAAgABDwHgAgABDwHAAgABDwH/AcABBwH/AeAC
AAEfAeACAAEfAeACAAEfAf8BwAEHAf8B8AIAAT8B8AIAAT8B8AIAAT8B/wHgAQ8B/wH4AgABfwH4AgAB
fwH4AgABfwH/AeABHwH/AfwCAAH/Af4BAAEBAf8B/AIAAv8B8AF/Av8BAAEDAv8BAAEDAv8BAAEDAv8B
+AP/AeABHwL/AeABHwL/AeABHwH/FgAL
</value>
</data>
<data name="buttonToolTip.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="buttonToolTip.Location" type="System.Drawing.Point, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>142, 17</value>
</data>
<data name="buttonToolTip.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="rtbMessage.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="rtbMessage.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="rtbMessage.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="$this.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="$this.Language" type="System.Globalization.CultureInfo, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>(Default)</value>
</data>
<data name="$this.TrayLargeIcon" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="$this.Localizable" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="$this.GridSize" type="System.Drawing.Size, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>8, 8</value>
</data>
<data name="$this.DrawGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</data>
<data name="$this.TrayHeight" type="System.Int32, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>80</value>
</data>
<data name="$this.Name">
<value>MessageBoxExForm</value>
</data>
<data name="$this.SnapToGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</data>
<data name="$this.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
</root>

View File

@ -0,0 +1,20 @@
using System;
namespace Utils.MessageBoxExLib
{
/// <summary>
/// Standard MessageBoxEx icons
/// </summary>
public enum MessageBoxExIcon
{
None,
Asterisk,
Error,
Exclamation,
Hand,
Information,
Question,
Stop,
Warning
}
}

View File

@ -0,0 +1,166 @@
<VisualStudioProject>
<CSHARP
ProjectType = "Local"
ProductVersion = "7.10.3077"
SchemaVersion = "2.0"
ProjectGuid = "{4847D05C-EB58-49D9-B280-D22F8FF01857}"
>
<Build>
<Settings
ApplicationIcon = ""
AssemblyKeyContainerName = ""
AssemblyName = "MessageBoxExLib"
AssemblyOriginatorKeyFile = ""
DefaultClientScript = "JScript"
DefaultHTMLPageLayout = "Grid"
DefaultTargetSchema = "IE50"
DelaySign = "false"
OutputType = "Library"
PreBuildEvent = ""
PostBuildEvent = ""
RootNamespace = "Utils.MessageBoxExLib"
RunPostBuildEvent = "OnBuildSuccess"
StartupObject = ""
>
<Config
Name = "Debug"
AllowUnsafeBlocks = "false"
BaseAddress = "285212672"
CheckForOverflowUnderflow = "false"
ConfigurationOverrideFile = ""
DefineConstants = "DEBUG;TRACE"
DocumentationFile = ""
DebugSymbols = "true"
FileAlignment = "4096"
IncrementalBuild = "false"
NoStdLib = "false"
NoWarn = ""
Optimize = "false"
OutputPath = "bin\Debug\"
RegisterForComInterop = "false"
RemoveIntegerChecks = "false"
TreatWarningsAsErrors = "false"
WarningLevel = "4"
/>
<Config
Name = "Release"
AllowUnsafeBlocks = "false"
BaseAddress = "285212672"
CheckForOverflowUnderflow = "false"
ConfigurationOverrideFile = ""
DefineConstants = "TRACE"
DocumentationFile = ""
DebugSymbols = "false"
FileAlignment = "4096"
IncrementalBuild = "false"
NoStdLib = "false"
NoWarn = ""
Optimize = "true"
OutputPath = "bin\Release\"
RegisterForComInterop = "false"
RemoveIntegerChecks = "false"
TreatWarningsAsErrors = "false"
WarningLevel = "4"
/>
</Settings>
<References>
<Reference
Name = "System"
AssemblyName = "System"
HintPath = "..\..\..\..\..\..\WINNT\Microsoft.NET\Framework\v1.1.4322\System.dll"
/>
<Reference
Name = "System.Data"
AssemblyName = "System.Data"
HintPath = "..\..\..\..\..\..\WINNT\Microsoft.NET\Framework\v1.1.4322\System.Data.dll"
/>
<Reference
Name = "System.XML"
AssemblyName = "System.Xml"
HintPath = "..\..\..\..\..\..\WINNT\Microsoft.NET\Framework\v1.1.4322\System.XML.dll"
/>
<Reference
Name = "System.Drawing"
AssemblyName = "System.Drawing"
HintPath = "..\..\..\..\..\..\WINNT\Microsoft.NET\Framework\v1.1.4322\System.Drawing.dll"
/>
<Reference
Name = "System.Windows.Forms"
AssemblyName = "System.Windows.Forms"
HintPath = "..\..\..\..\..\..\WINNT\Microsoft.NET\Framework\v1.1.4322\System.Windows.Forms.dll"
/>
</References>
</Build>
<Files>
<Include>
<File
RelPath = "AssemblyInfo.cs"
SubType = "Code"
BuildAction = "Compile"
/>
<File
RelPath = "MessageBoxEx.cs"
SubType = "Code"
BuildAction = "Compile"
/>
<File
RelPath = "MessageBoxExButton.cs"
SubType = "Code"
BuildAction = "Compile"
/>
<File
RelPath = "MessageBoxExButtons.cs"
SubType = "Code"
BuildAction = "Compile"
/>
<File
RelPath = "MessageBoxExForm.cs"
SubType = "Form"
BuildAction = "Compile"
/>
<File
RelPath = "MessageBoxExForm.resx"
DependentUpon = "MessageBoxExForm.cs"
BuildAction = "EmbeddedResource"
/>
<File
RelPath = "MessageBoxExIcon.cs"
SubType = "Code"
BuildAction = "Compile"
/>
<File
RelPath = "MessageBoxExManager.cs"
SubType = "Code"
BuildAction = "Compile"
/>
<File
RelPath = "MessageBoxExResult.cs"
SubType = "Code"
BuildAction = "Compile"
/>
<File
RelPath = "Notes.txt"
BuildAction = "Content"
/>
<File
RelPath = "TimeoutResult.cs"
SubType = "Code"
BuildAction = "Compile"
/>
<File
RelPath = "Resources\StandardButtonsText.de.resx"
BuildAction = "EmbeddedResource"
/>
<File
RelPath = "Resources\StandardButtonsText.fr.resx"
BuildAction = "EmbeddedResource"
/>
<File
RelPath = "Resources\StandardButtonsText.resx"
BuildAction = "EmbeddedResource"
/>
</Include>
</Files>
</CSHARP>
</VisualStudioProject>

View File

@ -0,0 +1,205 @@
using System;
using System.IO;
using System.Collections;
using System.Resources;
using System.Reflection;
namespace Utils.MessageBoxExLib
{
/// <summary>
/// Manages a collection of MessageBoxes. Basically manages the
/// saved response handling for messageBoxes.
/// </summary>
public class MessageBoxExManager
{
#region Fields
private static Hashtable _messageBoxes = new Hashtable();
private static Hashtable _savedResponses = new Hashtable();
private static Hashtable _standardButtonsText = new Hashtable();
#endregion
#region Static ctor
static MessageBoxExManager()
{
try
{
Assembly current = typeof(MessageBoxExManager).Assembly;
string[] resources = current.GetManifestResourceNames();
ResourceManager rm = new ResourceManager("Utils.MessageBoxExLib.Resources.StandardButtonsText", typeof(MessageBoxExManager).Assembly);
_standardButtonsText[MessageBoxExButtons.Ok.ToString()] = rm.GetString("Ok");
_standardButtonsText[MessageBoxExButtons.Cancel.ToString()] = rm.GetString("Cancel");
_standardButtonsText[MessageBoxExButtons.Yes.ToString()] = rm.GetString("Yes");
_standardButtonsText[MessageBoxExButtons.No.ToString()] = rm.GetString("No");
_standardButtonsText[MessageBoxExButtons.Abort.ToString()] = rm.GetString("Abort");
_standardButtonsText[MessageBoxExButtons.Retry.ToString()] = rm.GetString("Retry");
_standardButtonsText[MessageBoxExButtons.Ignore.ToString()] = rm.GetString("Ignore");
}
catch(Exception ex)
{
System.Diagnostics.Debug.Assert(false, "Unable to load resources for MessageBoxEx", ex.ToString());
//Load default resources
_standardButtonsText[MessageBoxExButtons.Ok.ToString()] = "Ok";
_standardButtonsText[MessageBoxExButtons.Cancel.ToString()] = "Cancel";
_standardButtonsText[MessageBoxExButtons.Yes.ToString()] = "Yes";
_standardButtonsText[MessageBoxExButtons.No.ToString()] = "No";
_standardButtonsText[MessageBoxExButtons.Abort.ToString()] = "Abort";
_standardButtonsText[MessageBoxExButtons.Retry.ToString()] = "Retry";
_standardButtonsText[MessageBoxExButtons.Ignore.ToString()] = "Ignore";
}
}
#endregion
#region Methods
/// <summary>
/// Creates a new message box with the specified name. If null is specified
/// in the message name then the message box is not managed by the Manager and
/// will be disposed automatically after a call to Show()
/// </summary>
/// <param name="name">The name of the message box</param>
/// <returns>A new message box</returns>
public static MessageBoxEx CreateMessageBox(string name)
{
if(name != null && _messageBoxes.ContainsKey(name))
{
string err = string.Format("A MessageBox with the name {0} already exists.",name);
throw new ArgumentException(err,"name");
}
MessageBoxEx msgBox = new MessageBoxEx();
msgBox.Name = name;
if(msgBox.Name != null)
{
_messageBoxes[name] = msgBox;
}
return msgBox;
}
/// <summary>
/// Gets the message box with the specified name
/// </summary>
/// <param name="name">The name of the message box to retrieve</param>
/// <returns>The message box with the specified name or null if a message box
/// with that name does not exist</returns>
public static MessageBoxEx GetMessageBox(string name)
{
if(_messageBoxes.Contains(name))
{
return _messageBoxes[name] as MessageBoxEx;
}
else
{
return null;
}
}
/// <summary>
/// Deletes the message box with the specified name
/// </summary>
/// <param name="name">The name of the message box to delete</param>
public static void DeleteMessageBox(string name)
{
if(name == null)
return;
if(_messageBoxes.Contains(name))
{
MessageBoxEx msgBox = _messageBoxes[name] as MessageBoxEx;
msgBox.Dispose();
_messageBoxes.Remove(name);
}
}
public static void WriteSavedResponses(Stream stream)
{
throw new NotImplementedException("This feature has not yet been implemented");
}
public static void ReadSavedResponses(Stream stream)
{
throw new NotImplementedException("This feature has not yet been implemented");
}
/// <summary>
/// Reset the saved response for the message box with the specified name.
/// </summary>
/// <param name="messageBoxName">The name of the message box whose response is to be reset.</param>
public static void ResetSavedResponse(string messageBoxName)
{
if(messageBoxName == null)
return;
if(_savedResponses.ContainsKey(messageBoxName))
{
_savedResponses.Remove(messageBoxName);
}
}
/// <summary>
/// Resets the saved responses for all message boxes that are managed by the manager.
/// </summary>
public static void ResetAllSavedResponses()
{
_savedResponses.Clear();
}
#endregion
#region Internal Methods
/// <summary>
/// Set the saved response for the specified message box
/// </summary>
/// <param name="msgBox">The message box whose response is to be set</param>
/// <param name="response">The response to save for the message box</param>
internal static void SetSavedResponse(MessageBoxEx msgBox, string response)
{
if(msgBox.Name == null)
return;
_savedResponses[msgBox.Name] = response;
}
/// <summary>
/// Gets the saved response for the specified message box
/// </summary>
/// <param name="msgBox">The message box whose saved response is to be retrieved</param>
/// <returns>The saved response if exists, null otherwise</returns>
internal static string GetSavedResponse(MessageBoxEx msgBox)
{
string msgBoxName = msgBox.Name;
if(msgBoxName == null)
{
return null;
}
if(_savedResponses.ContainsKey(msgBoxName))
{
return _savedResponses[msgBox.Name].ToString();
}
else
{
return null;
}
}
/// <summary>
/// Returns the localized string for standard button texts like,
/// "Ok", "Cancel" etc.
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
internal static string GetLocalizedString(string key)
{
if(_standardButtonsText.ContainsKey(key))
{
return (string)_standardButtonsText[key];
}
else
{
return null;
}
}
#endregion
}
}

View File

@ -0,0 +1,19 @@
using System;
namespace Utils.MessageBoxExLib
{
/// <summary>
/// Standard MessageBoxEx results
/// </summary>
public struct MessageBoxExResult
{
public const string Ok = "Ok";
public const string Cancel = "Cancel";
public const string Yes = "Yes";
public const string No = "No";
public const string Abort = "Abort";
public const string Retry = "Retry";
public const string Ignore = "Ignore";
public const string Timeout = "Timeout";
}
}

View File

@ -0,0 +1,19 @@
Purpose
This library provides an advanced framework for message boxes.
Some salient features are -
1. Ability to associate text with buttons, thus you can specify a
text for each button that tells the user what will happen when the button
is pressed. This is currently shown as a simple tooltip.
2. Ability to specify an option that allows the user to always use the same response
for the specified messagebox.
3. Ability to save/load user preferences for various messageboxes. (Not implemented in this release)
4. Ability to customize buttons, icon, sounds.
5. Ability to specify a Timeout for the message box.
6. Standard button texts are localized based on current culture.

View File

@ -0,0 +1,63 @@
<?xml version="1.0" encoding="utf-8" ?>
<root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="ResMimeType">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="Version">
<value>1.0.0.0</value>
</resheader>
<resheader name="Reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="Writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Ok">
<value>O.K.</value>
</data>
<data name="Cancel">
<value>Löschen</value>
</data>
<data name="Yes">
<value>Ja</value>
</data>
<data name="No">
<value>Nein</value>
</data>
<data name="Abort">
<value>Abbruch</value>
</data>
<data name="Retry">
<value>Wiederholung</value>
</data>
<data name="Ignore">
<value>Ignorieren</value>
</data>
</root>

View File

@ -0,0 +1,63 @@
<?xml version="1.0" encoding="utf-8" ?>
<root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="ResMimeType">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="Version">
<value>1.0.0.0</value>
</resheader>
<resheader name="Reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="Writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Ok">
<value>Ok</value>
</data>
<data name="Cancel">
<value>Annuler</value>
</data>
<data name="Yes">
<value>Oui</value>
</data>
<data name="No">
<value>Non</value>
</data>
<data name="Abort">
<value>Arrêt</value>
</data>
<data name="Retry">
<value>Nouvelle</value>
</data>
<data name="Ignore">
<value>Ignorez</value>
</data>
</root>

View File

@ -0,0 +1,63 @@
<?xml version="1.0" encoding="utf-8" ?>
<root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="ResMimeType">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="Version">
<value>1.0.0.0</value>
</resheader>
<resheader name="Reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="Writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Ok">
<value>Ok</value>
</data>
<data name="Cancel">
<value>Cancel</value>
</data>
<data name="Yes">
<value>Yes</value>
</data>
<data name="No">
<value>No</value>
</data>
<data name="Abort">
<value>Abort</value>
</data>
<data name="Retry">
<value>Retry</value>
</data>
<data name="Ignore">
<value>Ignore</value>
</data>
</root>

View File

@ -0,0 +1,29 @@
using System;
namespace Utils.MessageBoxExLib
{
/// <summary>
/// Enumerates the kind of results that can be returned when a
/// message box times out
/// </summary>
public enum TimeoutResult
{
/// <summary>
/// On timeout the value associated with the default button is set as the result.
/// This is the default action on timeout.
/// </summary>
Default,
/// <summary>
/// On timeout the value associated with the cancel button is set as the result. If
/// the messagebox does not have a cancel button then the value associated with
/// the default button is set as the result.
/// </summary>
Cancel,
/// <summary>
/// On timeout MessageBoxExResult.Timeout is set as the result.
/// </summary>
Timeout
}
}

View File

@ -0,0 +1,30 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.30406.217
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MessageBoxExDemo", "MessageBoxExDemo\MessageBoxExDemo.csproj", "{69E4A5E2-96EF-4412-AE8B-DAF571C00CF2}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MessageBoxExLib", "MessageBoxExLib\MessageBoxExLib.csproj", "{4847D05C-EB58-49D9-B280-D22F8FF01857}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{69E4A5E2-96EF-4412-AE8B-DAF571C00CF2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{69E4A5E2-96EF-4412-AE8B-DAF571C00CF2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{69E4A5E2-96EF-4412-AE8B-DAF571C00CF2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{69E4A5E2-96EF-4412-AE8B-DAF571C00CF2}.Release|Any CPU.Build.0 = Release|Any CPU
{4847D05C-EB58-49D9-B280-D22F8FF01857}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4847D05C-EB58-49D9-B280-D22F8FF01857}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4847D05C-EB58-49D9-B280-D22F8FF01857}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4847D05C-EB58-49D9-B280-D22F8FF01857}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {45569CD2-DCFC-4016-8A6C-EF6C8B7B4730}
EndGlobalSection
EndGlobal

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1,58 @@
using System.Reflection;
using System.Runtime.CompilerServices;
//
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
//
[assembly: AssemblyTitle("")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
//
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:
[assembly: AssemblyVersion("1.0.*")]
//
// In order to sign your assembly you must specify a key to use. Refer to the
// Microsoft .NET Framework documentation for more information on assembly signing.
//
// Use the attributes below to control which key is used for signing.
//
// Notes:
// (*) If no key is specified, the assembly is not signed.
// (*) KeyName refers to a key that has been installed in the Crypto Service
// Provider (CSP) on your machine. KeyFile refers to a file which contains
// a key.
// (*) If the KeyFile and the KeyName values are both specified, the
// following processing occurs:
// (1) If the KeyName can be found in the CSP, that key is used.
// (2) If the KeyName does not exist and the KeyFile does exist, the key
// in the KeyFile is installed into the CSP and used.
// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility.
// When specifying the KeyFile, the location of the KeyFile should be
// relative to the project output directory which is
// %Project Directory%\obj\<configuration>. For example, if your KeyFile is
// located in the project directory, you would specify the AssemblyKeyFile
// attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]
// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework
// documentation for more information on this.
//
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile("")]
[assembly: AssemblyKeyName("")]

View File

@ -0,0 +1,116 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
<PropertyGroup>
<ProjectType>Local</ProjectType>
<ProductVersion>7.10.3077</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{69E4A5E2-96EF-4412-AE8B-DAF571C00CF2}</ProjectGuid>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ApplicationIcon>App.ico</ApplicationIcon>
<AssemblyKeyContainerName />
<AssemblyName>MessageBoxExDemo</AssemblyName>
<AssemblyOriginatorKeyFile />
<DefaultClientScript>JScript</DefaultClientScript>
<DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>
<DefaultTargetSchema>IE50</DefaultTargetSchema>
<DelaySign>false</DelaySign>
<OutputType>WinExe</OutputType>
<RootNamespace>MessageBoxExDemo</RootNamespace>
<RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
<StartupObject />
<FileUpgradeFlags>
</FileUpgradeFlags>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
<OldToolsVersion>0.0</OldToolsVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<OutputPath>bin\Debug\</OutputPath>
<AllowUnsafeBlocks>false</AllowUnsafeBlocks>
<BaseAddress>285212672</BaseAddress>
<CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
<ConfigurationOverrideFile />
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DocumentationFile />
<DebugSymbols>true</DebugSymbols>
<FileAlignment>4096</FileAlignment>
<NoStdLib>false</NoStdLib>
<NoWarn />
<Optimize>false</Optimize>
<RegisterForComInterop>false</RegisterForComInterop>
<RemoveIntegerChecks>false</RemoveIntegerChecks>
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
<WarningLevel>4</WarningLevel>
<DebugType>full</DebugType>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<OutputPath>bin\Release\</OutputPath>
<AllowUnsafeBlocks>false</AllowUnsafeBlocks>
<BaseAddress>285212672</BaseAddress>
<CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
<ConfigurationOverrideFile />
<DefineConstants>TRACE</DefineConstants>
<DocumentationFile />
<DebugSymbols>false</DebugSymbols>
<FileAlignment>4096</FileAlignment>
<NoStdLib>false</NoStdLib>
<NoWarn />
<Optimize>true</Optimize>
<RegisterForComInterop>false</RegisterForComInterop>
<RemoveIntegerChecks>false</RemoveIntegerChecks>
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
<WarningLevel>4</WarningLevel>
<DebugType>none</DebugType>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\MessageBoxExLib\MessageBoxExLib.csproj">
<Name>MessageBoxExLib</Name>
<Project>{4847D05C-EB58-49D9-B280-D22F8FF01857}</Project>
<Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package>
</ProjectReference>
<Reference Include="System">
<Name>System</Name>
</Reference>
<Reference Include="System.Data">
<Name>System.Data</Name>
</Reference>
<Reference Include="System.Drawing">
<Name>System.Drawing</Name>
</Reference>
<Reference Include="System.Windows.Forms">
<Name>System.Windows.Forms</Name>
</Reference>
<Reference Include="System.Xml">
<Name>System.XML</Name>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="AssemblyInfo.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="MessageBoxExDemoForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Content Include="App.ico" />
<EmbeddedResource Include="MessageBoxExDemoForm.resx">
<DependentUpon>MessageBoxExDemoForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<PreBuildEvent />
<PostBuildEvent />
</PropertyGroup>
</Project>

View File

@ -0,0 +1,999 @@
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Globalization;
using System.Threading;
using Utils.MessageBoxExLib;
namespace MessageBoxExDemo
{
/// <summary>
///
/// </summary>
public class MessageBoxExDemoForm : System.Windows.Forms.Form
{
#region Fields
private System.Windows.Forms.Button btnShowCustom;
private System.Windows.Forms.GroupBox grpBoxIcon;
private System.Windows.Forms.RadioButton radioButton4;
private System.Windows.Forms.RadioButton radioButton3;
private System.Windows.Forms.RadioButton radioButton2;
private System.Windows.Forms.RadioButton radioButton1;
private System.Windows.Forms.ListView listViewButtons;
private System.Windows.Forms.ColumnHeader columnHeader1;
private System.Windows.Forms.TextBox txtMessage;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.TextBox txtCaption;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.RadioButton radioButton5;
private System.Windows.Forms.TextBox txtSaveResponse;
private System.Windows.Forms.CheckBox chbAllowSaveResponse;
private System.Windows.Forms.TextBox txtResult;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.ListView listViewMessageBoxes;
private System.Windows.Forms.ColumnHeader columnHeader2;
private System.Windows.Forms.Button btnAddMessageBox;
private System.Windows.Forms.TextBox txtName;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.TextBox txtButtonText;
private System.Windows.Forms.Label ButtonText;
private System.Windows.Forms.TextBox txtButtonVal;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.CheckBox chbIsCancel;
private System.Windows.Forms.Label label6;
private System.Windows.Forms.Button btnAddButton;
private System.Windows.Forms.TextBox txtButtonHelp;
private System.Windows.Forms.CheckBox chbUseSavedResponse;
private System.Windows.Forms.CheckBox chbPlayAlert;
private System.Windows.Forms.ToolTip toolTip1;
private System.Windows.Forms.Label label7;
private System.Windows.Forms.Label label8;
private System.Windows.Forms.TextBox txtTimeout;
private System.Windows.Forms.Label label9;
private System.Windows.Forms.ComboBox cmbTimeoutResult;
private System.Windows.Forms.Button button1;
private PictureBox pictureBoxAsterix;
private PictureBox pictureBoxExclamation;
private PictureBox pictureBoxHand;
private PictureBox pictureBoxQuestion;
private Button buttonTestValuesManually;
private System.ComponentModel.IContainer components;
#endregion
#region Ctor/Dtor
public MessageBoxExDemoForm()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#endregion
#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.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MessageBoxExDemoForm));
System.Windows.Forms.ListViewItem listViewItem1 = new System.Windows.Forms.ListViewItem("Ok");
System.Windows.Forms.ListViewItem listViewItem2 = new System.Windows.Forms.ListViewItem("Cancel");
System.Windows.Forms.ListViewItem listViewItem3 = new System.Windows.Forms.ListViewItem("Yes");
System.Windows.Forms.ListViewItem listViewItem4 = new System.Windows.Forms.ListViewItem("No");
System.Windows.Forms.ListViewItem listViewItem5 = new System.Windows.Forms.ListViewItem("Abort");
System.Windows.Forms.ListViewItem listViewItem6 = new System.Windows.Forms.ListViewItem("Retry");
System.Windows.Forms.ListViewItem listViewItem7 = new System.Windows.Forms.ListViewItem("Ignore");
this.btnShowCustom = new System.Windows.Forms.Button();
this.grpBoxIcon = new System.Windows.Forms.GroupBox();
this.pictureBoxQuestion = new System.Windows.Forms.PictureBox();
this.pictureBoxHand = new System.Windows.Forms.PictureBox();
this.pictureBoxExclamation = new System.Windows.Forms.PictureBox();
this.pictureBoxAsterix = new System.Windows.Forms.PictureBox();
this.radioButton5 = new System.Windows.Forms.RadioButton();
this.radioButton4 = new System.Windows.Forms.RadioButton();
this.radioButton3 = new System.Windows.Forms.RadioButton();
this.radioButton2 = new System.Windows.Forms.RadioButton();
this.radioButton1 = new System.Windows.Forms.RadioButton();
this.listViewButtons = new System.Windows.Forms.ListView();
this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.txtMessage = new System.Windows.Forms.TextBox();
this.label2 = new System.Windows.Forms.Label();
this.txtCaption = new System.Windows.Forms.TextBox();
this.label1 = new System.Windows.Forms.Label();
this.chbAllowSaveResponse = new System.Windows.Forms.CheckBox();
this.txtSaveResponse = new System.Windows.Forms.TextBox();
this.txtResult = new System.Windows.Forms.TextBox();
this.label3 = new System.Windows.Forms.Label();
this.listViewMessageBoxes = new System.Windows.Forms.ListView();
this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.btnAddMessageBox = new System.Windows.Forms.Button();
this.txtName = new System.Windows.Forms.TextBox();
this.label4 = new System.Windows.Forms.Label();
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.txtButtonHelp = new System.Windows.Forms.TextBox();
this.label6 = new System.Windows.Forms.Label();
this.chbIsCancel = new System.Windows.Forms.CheckBox();
this.txtButtonVal = new System.Windows.Forms.TextBox();
this.label5 = new System.Windows.Forms.Label();
this.txtButtonText = new System.Windows.Forms.TextBox();
this.ButtonText = new System.Windows.Forms.Label();
this.btnAddButton = new System.Windows.Forms.Button();
this.chbUseSavedResponse = new System.Windows.Forms.CheckBox();
this.chbPlayAlert = new System.Windows.Forms.CheckBox();
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
this.txtTimeout = new System.Windows.Forms.TextBox();
this.label7 = new System.Windows.Forms.Label();
this.label8 = new System.Windows.Forms.Label();
this.cmbTimeoutResult = new System.Windows.Forms.ComboBox();
this.label9 = new System.Windows.Forms.Label();
this.button1 = new System.Windows.Forms.Button();
this.buttonTestValuesManually = new System.Windows.Forms.Button();
this.grpBoxIcon.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBoxQuestion)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBoxHand)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBoxExclamation)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBoxAsterix)).BeginInit();
this.groupBox1.SuspendLayout();
this.SuspendLayout();
//
// btnShowCustom
//
this.btnShowCustom.Location = new System.Drawing.Point(752, 328);
this.btnShowCustom.Name = "btnShowCustom";
this.btnShowCustom.Size = new System.Drawing.Size(160, 23);
this.btnShowCustom.TabIndex = 3;
this.btnShowCustom.Text = "Show Custom MessageBox";
this.toolTip1.SetToolTip(this.btnShowCustom, "Show the currently selected message box from the list");
this.btnShowCustom.Click += new System.EventHandler(this.btnShowCustom_Click);
//
// grpBoxIcon
//
this.grpBoxIcon.Controls.Add(this.pictureBoxQuestion);
this.grpBoxIcon.Controls.Add(this.pictureBoxHand);
this.grpBoxIcon.Controls.Add(this.pictureBoxExclamation);
this.grpBoxIcon.Controls.Add(this.pictureBoxAsterix);
this.grpBoxIcon.Controls.Add(this.radioButton5);
this.grpBoxIcon.Controls.Add(this.radioButton4);
this.grpBoxIcon.Controls.Add(this.radioButton3);
this.grpBoxIcon.Controls.Add(this.radioButton2);
this.grpBoxIcon.Controls.Add(this.radioButton1);
this.grpBoxIcon.Location = new System.Drawing.Point(448, 216);
this.grpBoxIcon.Name = "grpBoxIcon";
this.grpBoxIcon.Size = new System.Drawing.Size(136, 184);
this.grpBoxIcon.TabIndex = 15;
this.grpBoxIcon.TabStop = false;
this.grpBoxIcon.Text = "Icon";
//
// pictureBoxQuestion
//
this.pictureBoxQuestion.Image = ((System.Drawing.Image)(resources.GetObject("pictureBoxQuestion.Image")));
this.pictureBoxQuestion.Location = new System.Drawing.Point(98, 115);
this.pictureBoxQuestion.Name = "pictureBoxQuestion";
this.pictureBoxQuestion.Size = new System.Drawing.Size(32, 32);
this.pictureBoxQuestion.TabIndex = 18;
this.pictureBoxQuestion.TabStop = false;
//
// pictureBoxHand
//
this.pictureBoxHand.Image = ((System.Drawing.Image)(resources.GetObject("pictureBoxHand.Image")));
this.pictureBoxHand.Location = new System.Drawing.Point(98, 82);
this.pictureBoxHand.Name = "pictureBoxHand";
this.pictureBoxHand.Size = new System.Drawing.Size(32, 32);
this.pictureBoxHand.TabIndex = 18;
this.pictureBoxHand.TabStop = false;
//
// pictureBoxExclamation
//
this.pictureBoxExclamation.Image = ((System.Drawing.Image)(resources.GetObject("pictureBoxExclamation.Image")));
this.pictureBoxExclamation.Location = new System.Drawing.Point(98, 50);
this.pictureBoxExclamation.Name = "pictureBoxExclamation";
this.pictureBoxExclamation.Size = new System.Drawing.Size(32, 32);
this.pictureBoxExclamation.TabIndex = 18;
this.pictureBoxExclamation.TabStop = false;
//
// pictureBoxAsterix
//
this.pictureBoxAsterix.Image = ((System.Drawing.Image)(resources.GetObject("pictureBoxAsterix.Image")));
this.pictureBoxAsterix.Location = new System.Drawing.Point(98, 18);
this.pictureBoxAsterix.Name = "pictureBoxAsterix";
this.pictureBoxAsterix.Size = new System.Drawing.Size(32, 32);
this.pictureBoxAsterix.TabIndex = 18;
this.pictureBoxAsterix.TabStop = false;
//
// radioButton5
//
this.radioButton5.Location = new System.Drawing.Point(16, 152);
this.radioButton5.Name = "radioButton5";
this.radioButton5.Size = new System.Drawing.Size(104, 24);
this.radioButton5.TabIndex = 4;
this.radioButton5.Text = "None";
//
// radioButton4
//
this.radioButton4.Location = new System.Drawing.Point(16, 120);
this.radioButton4.Name = "radioButton4";
this.radioButton4.Size = new System.Drawing.Size(104, 24);
this.radioButton4.TabIndex = 2;
this.radioButton4.Text = "Question";
//
// radioButton3
//
this.radioButton3.Location = new System.Drawing.Point(16, 56);
this.radioButton3.Name = "radioButton3";
this.radioButton3.Size = new System.Drawing.Size(104, 24);
this.radioButton3.TabIndex = 1;
this.radioButton3.Text = "Exclamation";
//
// radioButton2
//
this.radioButton2.Location = new System.Drawing.Point(16, 88);
this.radioButton2.Name = "radioButton2";
this.radioButton2.Size = new System.Drawing.Size(104, 24);
this.radioButton2.TabIndex = 3;
this.radioButton2.Text = "Hand";
//
// radioButton1
//
this.radioButton1.Checked = true;
this.radioButton1.Location = new System.Drawing.Point(16, 24);
this.radioButton1.Name = "radioButton1";
this.radioButton1.Size = new System.Drawing.Size(104, 24);
this.radioButton1.TabIndex = 0;
this.radioButton1.TabStop = true;
this.radioButton1.Text = "Asterisk";
//
// listViewButtons
//
this.listViewButtons.CheckBoxes = true;
this.listViewButtons.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.columnHeader1});
this.listViewButtons.HideSelection = false;
listViewItem1.StateImageIndex = 0;
listViewItem2.StateImageIndex = 0;
listViewItem3.StateImageIndex = 0;
listViewItem4.StateImageIndex = 0;
listViewItem5.StateImageIndex = 0;
listViewItem6.StateImageIndex = 0;
listViewItem7.StateImageIndex = 0;
this.listViewButtons.Items.AddRange(new System.Windows.Forms.ListViewItem[] {
listViewItem1,
listViewItem2,
listViewItem3,
listViewItem4,
listViewItem5,
listViewItem6,
listViewItem7});
this.listViewButtons.Location = new System.Drawing.Point(296, 216);
this.listViewButtons.Name = "listViewButtons";
this.listViewButtons.Size = new System.Drawing.Size(136, 184);
this.listViewButtons.TabIndex = 14;
this.listViewButtons.UseCompatibleStateImageBehavior = false;
this.listViewButtons.View = System.Windows.Forms.View.Details;
//
// columnHeader1
//
this.columnHeader1.Text = "Buttons";
this.columnHeader1.Width = 130;
//
// txtMessage
//
this.txtMessage.Location = new System.Drawing.Point(72, 112);
this.txtMessage.Multiline = true;
this.txtMessage.Name = "txtMessage";
this.txtMessage.Size = new System.Drawing.Size(280, 80);
this.txtMessage.TabIndex = 5;
this.txtMessage.Text = "<Message>";
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(16, 112);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(49, 13);
this.label2.TabIndex = 4;
this.label2.Text = "Message";
//
// txtCaption
//
this.txtCaption.Location = new System.Drawing.Point(72, 72);
this.txtCaption.Name = "txtCaption";
this.txtCaption.Size = new System.Drawing.Size(280, 21);
this.txtCaption.TabIndex = 3;
this.txtCaption.Text = "<Caption>";
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(16, 72);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(44, 13);
this.label1.TabIndex = 2;
this.label1.Text = "Caption";
//
// chbAllowSaveResponse
//
this.chbAllowSaveResponse.Location = new System.Drawing.Point(80, 408);
this.chbAllowSaveResponse.Name = "chbAllowSaveResponse";
this.chbAllowSaveResponse.Size = new System.Drawing.Size(144, 24);
this.chbAllowSaveResponse.TabIndex = 16;
this.chbAllowSaveResponse.Text = "Allow Save Response";
//
// txtSaveResponse
//
this.txtSaveResponse.Location = new System.Drawing.Point(82, 432);
this.txtSaveResponse.Multiline = true;
this.txtSaveResponse.Name = "txtSaveResponse";
this.txtSaveResponse.Size = new System.Drawing.Size(272, 80);
this.txtSaveResponse.TabIndex = 17;
this.txtSaveResponse.Text = "<Save Response Text>";
//
// txtResult
//
this.txtResult.Location = new System.Drawing.Point(752, 512);
this.txtResult.Name = "txtResult";
this.txtResult.Size = new System.Drawing.Size(160, 21);
this.txtResult.TabIndex = 7;
this.txtResult.Text = "<Result>";
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(712, 512);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(37, 13);
this.label3.TabIndex = 6;
this.label3.Text = "Result";
this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// listViewMessageBoxes
//
this.listViewMessageBoxes.Activation = System.Windows.Forms.ItemActivation.TwoClick;
this.listViewMessageBoxes.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.columnHeader2});
this.listViewMessageBoxes.HideSelection = false;
this.listViewMessageBoxes.Location = new System.Drawing.Point(752, 96);
this.listViewMessageBoxes.MultiSelect = false;
this.listViewMessageBoxes.Name = "listViewMessageBoxes";
this.listViewMessageBoxes.Size = new System.Drawing.Size(192, 224);
this.listViewMessageBoxes.TabIndex = 2;
this.listViewMessageBoxes.UseCompatibleStateImageBehavior = false;
this.listViewMessageBoxes.View = System.Windows.Forms.View.Details;
this.listViewMessageBoxes.ItemActivate += new System.EventHandler(this.listViewMessageBoxes_ItemActivate);
//
// columnHeader2
//
this.columnHeader2.Text = "MessageBoxes";
this.columnHeader2.Width = 183;
//
// btnAddMessageBox
//
this.btnAddMessageBox.Location = new System.Drawing.Point(608, 192);
this.btnAddMessageBox.Name = "btnAddMessageBox";
this.btnAddMessageBox.Size = new System.Drawing.Size(128, 23);
this.btnAddMessageBox.TabIndex = 1;
this.btnAddMessageBox.Text = "Add MessageBox >>";
this.toolTip1.SetToolTip(this.btnAddMessageBox, "Create a message box with the specified information and add it to the list");
this.btnAddMessageBox.Click += new System.EventHandler(this.btnAddMessageBox_Click);
//
// txtName
//
this.txtName.Location = new System.Drawing.Point(72, 32);
this.txtName.Name = "txtName";
this.txtName.Size = new System.Drawing.Size(280, 21);
this.txtName.TabIndex = 1;
this.txtName.Text = "<Name>";
//
// label4
//
this.label4.AutoSize = true;
this.label4.Location = new System.Drawing.Point(24, 32);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(34, 13);
this.label4.TabIndex = 0;
this.label4.Text = "Name";
//
// groupBox1
//
this.groupBox1.Controls.Add(this.txtButtonHelp);
this.groupBox1.Controls.Add(this.label6);
this.groupBox1.Controls.Add(this.chbIsCancel);
this.groupBox1.Controls.Add(this.txtButtonVal);
this.groupBox1.Controls.Add(this.label5);
this.groupBox1.Controls.Add(this.txtButtonText);
this.groupBox1.Controls.Add(this.ButtonText);
this.groupBox1.Controls.Add(this.grpBoxIcon);
this.groupBox1.Controls.Add(this.listViewButtons);
this.groupBox1.Controls.Add(this.txtMessage);
this.groupBox1.Controls.Add(this.label2);
this.groupBox1.Controls.Add(this.txtCaption);
this.groupBox1.Controls.Add(this.label1);
this.groupBox1.Controls.Add(this.chbAllowSaveResponse);
this.groupBox1.Controls.Add(this.txtSaveResponse);
this.groupBox1.Controls.Add(this.btnAddButton);
this.groupBox1.Controls.Add(this.txtName);
this.groupBox1.Controls.Add(this.label4);
this.groupBox1.Location = new System.Drawing.Point(8, 8);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(592, 528);
this.groupBox1.TabIndex = 0;
this.groupBox1.TabStop = false;
this.groupBox1.Text = "MessageBox";
//
// txtButtonHelp
//
this.txtButtonHelp.Location = new System.Drawing.Point(88, 280);
this.txtButtonHelp.Name = "txtButtonHelp";
this.txtButtonHelp.Size = new System.Drawing.Size(96, 21);
this.txtButtonHelp.TabIndex = 11;
this.txtButtonHelp.Text = "<Help Text>";
//
// label6
//
this.label6.AutoSize = true;
this.label6.Location = new System.Drawing.Point(16, 280);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(53, 13);
this.label6.TabIndex = 10;
this.label6.Text = "Help Text";
//
// chbIsCancel
//
this.chbIsCancel.Location = new System.Drawing.Point(88, 312);
this.chbIsCancel.Name = "chbIsCancel";
this.chbIsCancel.Size = new System.Drawing.Size(72, 24);
this.chbIsCancel.TabIndex = 12;
this.chbIsCancel.Text = "Is Cancel";
//
// txtButtonVal
//
this.txtButtonVal.Location = new System.Drawing.Point(88, 248);
this.txtButtonVal.Name = "txtButtonVal";
this.txtButtonVal.Size = new System.Drawing.Size(96, 21);
this.txtButtonVal.TabIndex = 9;
this.txtButtonVal.Text = "<Button Value>";
//
// label5
//
this.label5.AutoSize = true;
this.label5.Location = new System.Drawing.Point(16, 248);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(68, 13);
this.label5.TabIndex = 8;
this.label5.Text = "Button Value";
//
// txtButtonText
//
this.txtButtonText.Location = new System.Drawing.Point(88, 216);
this.txtButtonText.Name = "txtButtonText";
this.txtButtonText.Size = new System.Drawing.Size(96, 21);
this.txtButtonText.TabIndex = 7;
this.txtButtonText.Text = "<Button Text>";
//
// ButtonText
//
this.ButtonText.AutoSize = true;
this.ButtonText.Location = new System.Drawing.Point(16, 216);
this.ButtonText.Name = "ButtonText";
this.ButtonText.Size = new System.Drawing.Size(61, 13);
this.ButtonText.TabIndex = 6;
this.ButtonText.Text = "ButtonText";
//
// btnAddButton
//
this.btnAddButton.Location = new System.Drawing.Point(192, 216);
this.btnAddButton.Name = "btnAddButton";
this.btnAddButton.Size = new System.Drawing.Size(88, 23);
this.btnAddButton.TabIndex = 13;
this.btnAddButton.Text = "Add Button >>";
this.toolTip1.SetToolTip(this.btnAddButton, "Create a button using the specified information and add it to the list");
this.btnAddButton.Click += new System.EventHandler(this.btnAddButton_Click);
//
// chbUseSavedResponse
//
this.chbUseSavedResponse.Checked = true;
this.chbUseSavedResponse.CheckState = System.Windows.Forms.CheckState.Checked;
this.chbUseSavedResponse.Location = new System.Drawing.Point(752, 352);
this.chbUseSavedResponse.Name = "chbUseSavedResponse";
this.chbUseSavedResponse.Size = new System.Drawing.Size(160, 24);
this.chbUseSavedResponse.TabIndex = 4;
this.chbUseSavedResponse.Text = "Use Saved Response";
//
// chbPlayAlert
//
this.chbPlayAlert.Checked = true;
this.chbPlayAlert.CheckState = System.Windows.Forms.CheckState.Checked;
this.chbPlayAlert.Location = new System.Drawing.Point(752, 384);
this.chbPlayAlert.Name = "chbPlayAlert";
this.chbPlayAlert.Size = new System.Drawing.Size(160, 24);
this.chbPlayAlert.TabIndex = 5;
this.chbPlayAlert.Text = "Play Alert Sound";
//
// txtTimeout
//
this.txtTimeout.Location = new System.Drawing.Point(752, 416);
this.txtTimeout.Name = "txtTimeout";
this.txtTimeout.Size = new System.Drawing.Size(160, 21);
this.txtTimeout.TabIndex = 9;
this.txtTimeout.Text = "0";
//
// label7
//
this.label7.AutoSize = true;
this.label7.Location = new System.Drawing.Point(704, 416);
this.label7.Name = "label7";
this.label7.Size = new System.Drawing.Size(45, 13);
this.label7.TabIndex = 8;
this.label7.Text = "Timeout";
//
// label8
//
this.label8.AutoSize = true;
this.label8.Location = new System.Drawing.Point(912, 416);
this.label8.Name = "label8";
this.label8.Size = new System.Drawing.Size(20, 13);
this.label8.TabIndex = 10;
this.label8.Text = "ms";
//
// cmbTimeoutResult
//
this.cmbTimeoutResult.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbTimeoutResult.Items.AddRange(new object[] {
"Default",
"Cancel",
"Timeout"});
this.cmbTimeoutResult.Location = new System.Drawing.Point(752, 448);
this.cmbTimeoutResult.Name = "cmbTimeoutResult";
this.cmbTimeoutResult.Size = new System.Drawing.Size(160, 21);
this.cmbTimeoutResult.TabIndex = 11;
//
// label9
//
this.label9.AutoSize = true;
this.label9.Location = new System.Drawing.Point(670, 448);
this.label9.Name = "label9";
this.label9.Size = new System.Drawing.Size(78, 13);
this.label9.TabIndex = 12;
this.label9.Text = "Timeout Result";
//
// button1
//
this.button1.Location = new System.Drawing.Point(872, 8);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(75, 23);
this.button1.TabIndex = 13;
this.button1.Text = "Run Tests";
this.button1.Visible = false;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// buttonTestValuesManually
//
this.buttonTestValuesManually.Location = new System.Drawing.Point(823, 37);
this.buttonTestValuesManually.Name = "buttonTestValuesManually";
this.buttonTestValuesManually.Size = new System.Drawing.Size(120, 23);
this.buttonTestValuesManually.TabIndex = 14;
this.buttonTestValuesManually.Text = "Test Values manually";
this.buttonTestValuesManually.UseVisualStyleBackColor = true;
this.buttonTestValuesManually.Click += new System.EventHandler(this.buttonTestValuesManually_Click);
//
// MessageBoxExDemoForm
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 14);
this.ClientSize = new System.Drawing.Size(960, 550);
this.Controls.Add(this.buttonTestValuesManually);
this.Controls.Add(this.button1);
this.Controls.Add(this.label9);
this.Controls.Add(this.label8);
this.Controls.Add(this.txtTimeout);
this.Controls.Add(this.label7);
this.Controls.Add(this.chbPlayAlert);
this.Controls.Add(this.txtResult);
this.Controls.Add(this.label3);
this.Controls.Add(this.chbUseSavedResponse);
this.Controls.Add(this.cmbTimeoutResult);
this.Controls.Add(this.groupBox1);
this.Controls.Add(this.btnAddMessageBox);
this.Controls.Add(this.listViewMessageBoxes);
this.Controls.Add(this.btnShowCustom);
this.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.Name = "MessageBoxExDemoForm";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "MessageBoxEx Demo";
this.Load += new System.EventHandler(this.MessageBoxExDemoForm_Load);
this.grpBoxIcon.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.pictureBoxQuestion)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBoxHand)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBoxExclamation)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBoxAsterix)).EndInit();
this.groupBox1.ResumeLayout(false);
this.groupBox1.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
#region Main
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
//Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("fr");
Application.Run(new MessageBoxExDemoForm());
}
#endregion
#region Event Handlers
private void btnShowCustom_Click(object sender, System.EventArgs e)
{
if(listViewMessageBoxes.SelectedItems.Count == 0)
{
MessageBox.Show(this,"Select a message box to show","Select message box",MessageBoxButtons.OK,MessageBoxIcon.Information);
return;
}
MessageBoxEx msgBox = listViewMessageBoxes.SelectedItems[0].Tag as MessageBoxEx;
if(msgBox == null)
return;
msgBox.UseSavedResponse = chbUseSavedResponse.Checked;
msgBox.PlayAlsertSound = chbPlayAlert.Checked;
msgBox.Timeout = Convert.ToInt32(txtTimeout.Text);
msgBox.TimeoutResult = (TimeoutResult)Enum.Parse(typeof(TimeoutResult),cmbTimeoutResult.SelectedItem.ToString());
txtResult.Text = msgBox.Show(this);
}
private void btnAddButton_Click(object sender, System.EventArgs e)
{
MessageBoxExButton button = new MessageBoxExButton();
button.Text = txtButtonText.Text;
button.Value = txtButtonVal.Text;
button.HelpText = txtButtonHelp.Text;
button.IsCancelButton = chbIsCancel.Checked;
ListViewItem item = new ListViewItem();
item.Text = button.Text;
item.Tag = button;
listViewButtons.Items.Add(item);
}
private void btnAddMessageBox_Click(object sender, System.EventArgs e)
{
MessageBoxEx msgBox = null;
try
{
msgBox = CreateMessageBox(txtName.Text);
}
catch(Exception ex)
{
MessageBox.Show(this,"Error occured while creating message box. "+ex.Message,"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
if(msgBox == null)
return;
ListViewItem item = new ListViewItem(txtName.Text);
item.Tag = msgBox;
listViewMessageBoxes.Items.Add(item);
}
private void listViewMessageBoxes_ItemActivate(object sender, System.EventArgs e)
{
btnShowCustom.PerformClick();
}
private void MessageBoxExDemoForm_Load(object sender, System.EventArgs e)
{
cmbTimeoutResult.SelectedIndex = 0;
}
#endregion
#region Methods
private MessageBoxExButton[] GetButtons()
{
ArrayList buttons = new ArrayList();
foreach(ListViewItem item in listViewButtons.Items)
{
if(item.Checked)
{
if(item.Tag == null)
{
//Standard buttons
MessageBoxExButton button = new MessageBoxExButton();
button.Text = item.Text;
button.Value = item.Text;
buttons.Add(button);
}
else
{
//Custom buttons
MessageBoxExButton button = item.Tag as MessageBoxExButton;
if(button != null)
buttons.Add(button);
}
}
}
return (MessageBoxExButton[])buttons.ToArray(typeof(MessageBoxExButton));
}
private MessageBoxExIcon GetIcon()
{
RadioButton selIcon = null;
foreach(Control ctrl in grpBoxIcon.Controls)
{
if(ctrl is RadioButton)
{
if( ((RadioButton)ctrl).Checked )
{
selIcon = ctrl as RadioButton;
break;
}
}
}
return (MessageBoxExIcon)Enum.Parse(typeof(MessageBoxExIcon), selIcon.Text);
}
private MessageBoxEx CreateMessageBox(string name)
{
MessageBoxEx mbox = MessageBoxExManager.CreateMessageBox(name);
mbox.Caption = txtCaption.Text;
mbox.Text = txtMessage.Text;
mbox.AllowSaveResponse = chbAllowSaveResponse.Checked;
mbox.SaveResponseText = txtSaveResponse.Text;
foreach(MessageBoxExButton button in GetButtons())
{
mbox.AddButton(button);
}
mbox.Icon = GetIcon();
return mbox;
}
#region Ignore
private void Test()
{
MessageBoxEx msgBox = MessageBoxExManager.CreateMessageBox("Test");
msgBox.Caption = "Question";
msgBox.Text = "Do you want to save the data?";
msgBox.AddButtons(MessageBoxButtons.YesNo);
msgBox.Icon = MessageBoxExIcon.Question;
msgBox.SaveResponseText = "Don't ask me again";
msgBox.AllowSaveResponse = true;
msgBox.Font = new Font("Tahoma",8);
string result = msgBox.Show();
}
private void Test2()
{
MessageBoxEx msgBox = MessageBoxExManager.CreateMessageBox("Test2");
msgBox.Caption = "Question";
msgBox.Text = "Do you want to save the data?";
MessageBoxExButton btnYes = new MessageBoxExButton();
btnYes.Text = "Yes";
btnYes.Value = "Yes";
btnYes.HelpText = "Save the data";
MessageBoxExButton btnNo = new MessageBoxExButton();
btnNo.Text = "No";
btnNo.Value = "No";
btnNo.HelpText = "Do not save the data";
msgBox.AddButton(btnYes);
msgBox.AddButton(btnNo);
msgBox.Icon = MessageBoxExIcon.Question;
msgBox.SaveResponseText = "Don't ask me again";
msgBox.AllowSaveResponse = true;
msgBox.Font = new Font("Tahoma",8);
string result = msgBox.Show();
}
/// <summary>
/// Test case which exposed the AutoScale bug, this was submitted by Harry Stein
/// </summary>
private void Test3()
{
// as an experiment, I moved these from class members to local members
// to see if it helps -- it didn't -- but it helps show you nothing else
// is going on!
MessageBoxEx m_msgBoxSummary1 = null;
MessageBoxExButton m_btnYes = null;
// Tahoma 8.25 in Ex originally
m_msgBoxSummary1 = MessageBoxExManager.CreateMessageBox("Summary1");
m_btnYes = new MessageBoxExButton();
string m_sPROGRAM_NAME = "Possrv.Debug Merchant Parser";
string m_sVersion = "1.00A";;
m_msgBoxSummary1.Caption = m_sPROGRAM_NAME + " " + m_sVersion;
// fyi: m_sPROGRAM_NAME = "Possrv.Debug Merchant Parser";
// and m_sVersion = "1.00A";
m_msgBoxSummary1.Icon = MessageBoxExIcon.Information;
m_btnYes.Text = "Okay";
m_btnYes.Value = "OK";
m_msgBoxSummary1.AddButton(m_btnYes);
String sResultM =
"Hello this is a reasonably long message with 1234 56789";
m_msgBoxSummary1.Font = new Font("Lucida Console", 8);
m_msgBoxSummary1.Text = sResultM;
String sResult3 = m_msgBoxSummary1.Show(); // first call
sResult3 = m_msgBoxSummary1.Show(); // second call
if(sResult3=="" || (1 + 1 == 2))return; // quiet the compiler
}
private void Test4()
{
MessageBoxEx msgBox = MessageBoxExManager.CreateMessageBox(null);
msgBox.Caption = "Question";
msgBox.Text = "Do you want to save the data?";
msgBox.AddButtons(MessageBoxButtons.YesNo);
msgBox.Icon = MessageBoxExIcon.Question;
//Wait for 30 seconds for the user to respond
msgBox.Timeout = 30000;
msgBox.TimeoutResult = TimeoutResult.Timeout;
string result = msgBox.Show();
if(result == MessageBoxExResult.Timeout)
{
//Take action to handle the case of timeouts
}
}
public void Test5()
{
MessageBoxEx msgBox = MessageBoxExManager.CreateMessageBox(null);
msgBox.Caption = "Question";
msgBox.Text = "Voulez-vous sauver les données ?";
msgBox.AddButtons(MessageBoxButtons.YesNoCancel);
msgBox.Icon = MessageBoxExIcon.Question;
msgBox.Show();
}
public void Test6()
{
MessageBoxEx msgBox = MessageBoxExManager.CreateMessageBox("test");
msgBox.Caption = "Information";
msgBox.AddButtons(MessageBoxButtons.OK);
msgBox.Text = "The following items are defined:\nItem 1\nItem 2\nItem 3\nItem 4\nItem 5\nItem 6\nItem 7\nItem 8\nItem 9\nItem10\n";
msgBox.Show();
msgBox.Text = "Items:\nItem 1\nItem 2\nItem 3\nItem 4\nItem 5\nItem 6\nItem 7\nItem 8\nItem 9\nItem10\n";
msgBox.Show();
}
private void button1_Click(object sender, System.EventArgs e)
{
Test();
Test2();
Test3();
Test4();
Test5();
Test6();
}
#endregion
#endregion
#region Manual Test
private void buttonTestValuesManually_Click(object sender, EventArgs e)
{
string result = StandardMessageBox();
result = CustomerMessageBox();
}
private string StandardMessageBox()
{
MessageBoxEx msgBox = MessageBoxExManager.CreateMessageBox("Test2"); //ATTENTION: Name must be unique
msgBox.Caption = "Question";
msgBox.Text = "Do you want to save the data?";
MessageBoxExButton btnYes = new MessageBoxExButton();
btnYes.Text = "Yes";
btnYes.Value = "Yes";
btnYes.HelpText = "Save the data";
MessageBoxExButton btnNo = new MessageBoxExButton();
btnNo.Text = "No";
btnNo.Value = "No";
btnNo.HelpText = "Do not save the data";
msgBox.AddButton(btnYes);
msgBox.AddButton(btnNo);
//Use a standard icon
msgBox.Icon = MessageBoxExIcon.Asterisk;
msgBox.SaveResponseText = "Don't ask me again";
msgBox.AllowSaveResponse = true;
msgBox.UseSavedResponse = false;
msgBox.Timeout = 0;
msgBox.TimeoutResult = default;
msgBox.Font = new Font("Tahoma", 8);
return msgBox.Show(); //Returns the result
}
private string CustomerMessageBox()
{
MessageBoxEx msgBox = MessageBoxExManager.CreateMessageBox("Test3"); //ATTENTION: Name must be unique
msgBox.Caption = "Question";
msgBox.Text = "Do you want to save the data?";
MessageBoxExButton btnYes = new MessageBoxExButton();
btnYes.Text = "Yes";
btnYes.Value = "Yes";
btnYes.HelpText = "Save the data";
MessageBoxExButton btnNo = new MessageBoxExButton();
btnNo.Text = "No";
btnNo.Value = "No";
btnNo.HelpText = "Do not save the data";
msgBox.AddButton(btnYes);
msgBox.AddButton(btnNo);
//Use a customer icon
using (var bmp = Bitmap.FromFile(@"H:\Programmieren\Git-Repository\VisualStudio\2017\_TEST\Test_CustomerMessageBox\Daten\Icons\Customer\Icons\Telephone.ico") as Bitmap)
Icon = Icon.FromHandle(bmp.GetHicon());
msgBox.CustomIcon = Icon;
msgBox.SaveResponseText = "Don't ask me again";
msgBox.AllowSaveResponse = true;
msgBox.UseSavedResponse = false;
msgBox.Timeout = 0;
msgBox.TimeoutResult = default;
msgBox.Font = new Font("Tahoma", 8);
return msgBox.Show(); //Returns the result
}
#endregion
}
}

View File

@ -0,0 +1,301 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="pictureBoxQuestion.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
/3LA6N8D9eMTPOW8/wAAAABJRU5ErkJggg==
</value>
</data>
<data name="pictureBoxHand.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
AABJRU5ErkJggg==
</value>
</data>
<data name="pictureBoxExclamation.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
XUWkEIU5ZQAAAABJRU5ErkJggg==
</value>
</data>
<data name="pictureBoxAsterix.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
</value>
</data>
</root>

View File

@ -0,0 +1,63 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Dieser Code wurde von einem Tool generiert.
// Laufzeitversion:4.0.30319.42000
//
// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
// der Code erneut generiert wird.
// </auto-generated>
//------------------------------------------------------------------------------
namespace MessageBoxExDemo.Properties {
using System;
/// <summary>
/// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw.
/// </summary>
// Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert
// -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert.
// Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen
// mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("MessageBoxExDemo.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle
/// Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.0", FrameworkDisplayName = ".NET Framework 4")]

View File

@ -0,0 +1 @@
1dcf4d3d01a45986e56aa5fbf9b81fd62a2d7718

View File

@ -0,0 +1,14 @@
H:\Programmieren\Git-Repository\VisualStudio\2017\_TEST\Test_CustomerMessageBox\Daten\MessageBoxExDemo\MessageBoxExDemo\bin\Debug\MessageBoxExDemo.exe
H:\Programmieren\Git-Repository\VisualStudio\2017\_TEST\Test_CustomerMessageBox\Daten\MessageBoxExDemo\MessageBoxExDemo\bin\Debug\MessageBoxExDemo.pdb
H:\Programmieren\Git-Repository\VisualStudio\2017\_TEST\Test_CustomerMessageBox\Daten\MessageBoxExDemo\MessageBoxExDemo\bin\Debug\MessageBoxExLib.dll
H:\Programmieren\Git-Repository\VisualStudio\2017\_TEST\Test_CustomerMessageBox\Daten\MessageBoxExDemo\MessageBoxExDemo\bin\Debug\MessageBoxExLib.pdb
H:\Programmieren\Git-Repository\VisualStudio\2017\_TEST\Test_CustomerMessageBox\Daten\MessageBoxExDemo\MessageBoxExDemo\bin\Debug\de\MessageBoxExLib.resources.dll
H:\Programmieren\Git-Repository\VisualStudio\2017\_TEST\Test_CustomerMessageBox\Daten\MessageBoxExDemo\MessageBoxExDemo\bin\Debug\fr\MessageBoxExLib.resources.dll
H:\Programmieren\Git-Repository\VisualStudio\2017\_TEST\Test_CustomerMessageBox\Daten\MessageBoxExDemo\MessageBoxExDemo\obj\Debug\MessageBoxExDemo.csprojAssemblyReference.cache
H:\Programmieren\Git-Repository\VisualStudio\2017\_TEST\Test_CustomerMessageBox\Daten\MessageBoxExDemo\MessageBoxExDemo\obj\Debug\MessageBoxExDemo.MessageBoxExDemoForm.resources
H:\Programmieren\Git-Repository\VisualStudio\2017\_TEST\Test_CustomerMessageBox\Daten\MessageBoxExDemo\MessageBoxExDemo\obj\Debug\MessageBoxExDemo.csproj.GenerateResource.cache
H:\Programmieren\Git-Repository\VisualStudio\2017\_TEST\Test_CustomerMessageBox\Daten\MessageBoxExDemo\MessageBoxExDemo\obj\Debug\MessageBoxExDemo.csproj.CoreCompileInputs.cache
H:\Programmieren\Git-Repository\VisualStudio\2017\_TEST\Test_CustomerMessageBox\Daten\MessageBoxExDemo\MessageBoxExDemo\obj\Debug\MessageBoxExDemo.csproj.CopyComplete
H:\Programmieren\Git-Repository\VisualStudio\2017\_TEST\Test_CustomerMessageBox\Daten\MessageBoxExDemo\MessageBoxExDemo\obj\Debug\MessageBoxExDemo.exe
H:\Programmieren\Git-Repository\VisualStudio\2017\_TEST\Test_CustomerMessageBox\Daten\MessageBoxExDemo\MessageBoxExDemo\obj\Debug\MessageBoxExDemo.pdb
H:\Programmieren\Git-Repository\VisualStudio\2017\_TEST\Test_CustomerMessageBox\Daten\MessageBoxExDemo\MessageBoxExDemo\obj\Debug\MessageBoxExDemo.Properties.Resources.resources

View File

@ -0,0 +1,58 @@
using System.Reflection;
using System.Runtime.CompilerServices;
//
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
//
[assembly: AssemblyTitle("")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
//
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:
[assembly: AssemblyVersion("1.0.*")]
//
// In order to sign your assembly you must specify a key to use. Refer to the
// Microsoft .NET Framework documentation for more information on assembly signing.
//
// Use the attributes below to control which key is used for signing.
//
// Notes:
// (*) If no key is specified, the assembly is not signed.
// (*) KeyName refers to a key that has been installed in the Crypto Service
// Provider (CSP) on your machine. KeyFile refers to a file which contains
// a key.
// (*) If the KeyFile and the KeyName values are both specified, the
// following processing occurs:
// (1) If the KeyName can be found in the CSP, that key is used.
// (2) If the KeyName does not exist and the KeyFile does exist, the key
// in the KeyFile is installed into the CSP and used.
// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility.
// When specifying the KeyFile, the location of the KeyFile should be
// relative to the project output directory which is
// %Project Directory%\obj\<configuration>. For example, if your KeyFile is
// located in the project directory, you would specify the AssemblyKeyFile
// attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]
// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework
// documentation for more information on this.
//
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile("")]
[assembly: AssemblyKeyName("")]

View File

@ -0,0 +1,294 @@
using System;
using System.Drawing;
using System.Windows.Forms;
namespace Utils.MessageBoxExLib
{
/// <summary>
/// An extended MessageBox with lot of customizing capabilities.
/// </summary>
public class MessageBoxEx
{
#region Fields
private MessageBoxExForm _msgBox = new MessageBoxExForm();
private bool _useSavedResponse = true;
private string _name = null;
#endregion
#region Properties
internal string Name
{
get{ return _name; }
set{ _name = value; }
}
/// <summary>
/// Sets the caption of the message box
/// </summary>
public string Caption
{
set{_msgBox.Caption = value;}
}
/// <summary>
/// Sets the text of the message box
/// </summary>
public string Text
{
set{_msgBox.Message = value;}
}
/// <summary>
/// Sets the icon to show in the message box
/// </summary>
public Icon CustomIcon
{
set{_msgBox.CustomIcon = value;}
}
/// <summary>
/// Sets the icon to show in the message box
/// </summary>
public MessageBoxExIcon Icon
{
set{ _msgBox.StandardIcon = (MessageBoxIcon)Enum.Parse(typeof(MessageBoxIcon), value.ToString());}
}
/// <summary>
/// Sets the font for the text of the message box
/// </summary>
public Font Font
{
set{_msgBox.Font = value;}
}
/// <summary>
/// Sets or Gets the ability of the user to save his/her response
/// </summary>
public bool AllowSaveResponse
{
get{ return _msgBox.AllowSaveResponse; }
set{ _msgBox.AllowSaveResponse = value; }
}
/// <summary>
/// Sets the text to show to the user when saving his/her response
/// </summary>
public string SaveResponseText
{
set{_msgBox.SaveResponseText = value; }
}
/// <summary>
/// Sets or Gets wether the saved response if available should be used
/// </summary>
public bool UseSavedResponse
{
get{ return _useSavedResponse; }
set{ _useSavedResponse = value; }
}
/// <summary>
/// Sets or Gets wether an alert sound is played while showing the message box.
/// The sound played depends on the the Icon selected for the message box
/// </summary>
public bool PlayAlsertSound
{
get{ return _msgBox.PlayAlertSound; }
set{ _msgBox.PlayAlertSound = value; }
}
/// <summary>
/// Sets or Gets the time in milliseconds for which the message box is displayed.
/// </summary>
public int Timeout
{
get{ return _msgBox.Timeout; }
set{ _msgBox.Timeout = value; }
}
/// <summary>
/// Controls the result that will be returned when the message box times out.
/// </summary>
public TimeoutResult TimeoutResult
{
get{ return _msgBox.TimeoutResult; }
set{ _msgBox.TimeoutResult = value; }
}
#endregion
#region Methods
/// <summary>
/// Shows the message box
/// </summary>
/// <returns></returns>
public string Show()
{
return Show(null);
}
/// <summary>
/// Shows the messsage box with the specified owner
/// </summary>
/// <param name="owner"></param>
/// <returns></returns>
public string Show(IWin32Window owner)
{
if(_useSavedResponse && this.Name != null)
{
string savedResponse = MessageBoxExManager.GetSavedResponse(this);
if( savedResponse != null)
return savedResponse;
}
if(owner == null)
{
_msgBox.ShowDialog();
}
else
{
_msgBox.ShowDialog(owner);
}
if(this.Name != null)
{
if(_msgBox.AllowSaveResponse && _msgBox.SaveResponse)
MessageBoxExManager.SetSavedResponse(this, _msgBox.Result);
else
MessageBoxExManager.ResetSavedResponse(this.Name);
}
else
{
Dispose();
}
return _msgBox.Result;
}
/// <summary>
/// Add a custom button to the message box
/// </summary>
/// <param name="button">The button to add</param>
public void AddButton(MessageBoxExButton button)
{
if(button == null)
throw new ArgumentNullException("button","A null button cannot be added");
_msgBox.Buttons.Add(button);
if(button.IsCancelButton)
{
_msgBox.CustomCancelButton = button;
}
}
/// <summary>
/// Add a custom button to the message box
/// </summary>
/// <param name="text">The text of the button</param>
/// <param name="val">The return value in case this button is clicked</param>
public void AddButton(string text, string val)
{
if(text == null)
throw new ArgumentNullException("text","Text of a button cannot be null");
if(val == null)
throw new ArgumentNullException("val","Value of a button cannot be null");
MessageBoxExButton button = new MessageBoxExButton();
button.Text = text;
button.Value = val;
AddButton(button);
}
/// <summary>
/// Add a standard button to the message box
/// </summary>
/// <param name="buttons">The standard button to add</param>
public void AddButton(MessageBoxExButtons button)
{
string buttonText = MessageBoxExManager.GetLocalizedString(button.ToString());
if(buttonText == null)
{
buttonText = button.ToString();
}
string buttonVal = button.ToString();
MessageBoxExButton btn = new MessageBoxExButton();
btn.Text = buttonText;
btn.Value = buttonVal;
if(button == MessageBoxExButtons.Cancel)
{
btn.IsCancelButton = true;
}
AddButton(btn);
}
/// <summary>
/// Add standard buttons to the message box.
/// </summary>
/// <param name="buttons">The standard buttons to add</param>
public void AddButtons(MessageBoxButtons buttons)
{
switch(buttons)
{
case MessageBoxButtons.OK:
AddButton(MessageBoxExButtons.Ok);
break;
case MessageBoxButtons.AbortRetryIgnore:
AddButton(MessageBoxExButtons.Abort);
AddButton(MessageBoxExButtons.Retry);
AddButton(MessageBoxExButtons.Ignore);
break;
case MessageBoxButtons.OKCancel:
AddButton(MessageBoxExButtons.Ok);
AddButton(MessageBoxExButtons.Cancel);
break;
case MessageBoxButtons.RetryCancel:
AddButton(MessageBoxExButtons.Retry);
AddButton(MessageBoxExButtons.Cancel);
break;
case MessageBoxButtons.YesNo:
AddButton(MessageBoxExButtons.Yes);
AddButton(MessageBoxExButtons.No);
break;
case MessageBoxButtons.YesNoCancel:
AddButton(MessageBoxExButtons.Yes);
AddButton(MessageBoxExButtons.No);
AddButton(MessageBoxExButtons.Cancel);
break;
}
}
#endregion
#region Ctor
/// <summary>
/// Ctor is internal because this can only be created by MBManager
/// </summary>
internal MessageBoxEx()
{
}
/// <summary>
/// Called by the manager when it is disposed
/// </summary>
internal void Dispose()
{
if(_msgBox != null)
{
_msgBox.Dispose();
}
}
#endregion
}
}

View File

@ -0,0 +1,52 @@
using System;
namespace Utils.MessageBoxExLib
{
/// <summary>
/// Internal DataStructure used to represent a button
/// </summary>
public class MessageBoxExButton
{
private string _text = null;
/// <summary>
/// Gets or Sets the text of the button
/// </summary>
public string Text
{
get{ return _text; }
set{ _text = value; }
}
private string _value = null;
/// <summary>
/// Gets or Sets the return value when this button is clicked
/// </summary>
public string Value
{
get{ return _value; }
set{_value = value; }
}
private string _helpText = null;
/// <summary>
/// Gets or Sets the tooltip that is displayed for this button
/// </summary>
public string HelpText
{
get{ return _helpText; }
set{ _helpText = value; }
}
private bool _isCancelButton = false;
/// <summary>
/// Gets or Sets wether this button is a cancel button. i.e. the button
/// that will be assumed to have been clicked if the user closes the message box
/// without pressing any button.
/// </summary>
public bool IsCancelButton
{
get{ return _isCancelButton; }
set{ _isCancelButton = value; }
}
}
}

View File

@ -0,0 +1,18 @@
using System;
namespace Utils.MessageBoxExLib
{
/// <summary>
/// Standard MessageBoxEx buttons
/// </summary>
public enum MessageBoxExButtons
{
Ok = 0,
Cancel = 1,
Yes = 2,
No = 4,
Abort = 8,
Retry = 16,
Ignore = 32
}
}

View File

@ -0,0 +1,937 @@
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Diagnostics;
using System.Runtime.InteropServices;
namespace Utils.MessageBoxExLib
{
/// <summary>
/// An advanced MessageBox that supports customizations like Font, Icon,
/// Buttons and Saved Responses
/// </summary>
internal class MessageBoxExForm : System.Windows.Forms.Form
{
#region Constants
private const int LEFT_PADDING = 12;
private const int RIGHT_PADDING = 12;
private const int TOP_PADDING = 12;
private const int BOTTOM_PADDING = 12;
private const int BUTTON_LEFT_PADDING = 4;
private const int BUTTON_RIGHT_PADDING = 4;
private const int BUTTON_TOP_PADDING = 4;
private const int BUTTON_BOTTOM_PADDING = 4;
private const int MIN_BUTTON_HEIGHT = 23;
private const int MIN_BUTTON_WIDTH = 74;
private const int ITEM_PADDING = 10;
private const int ICON_MESSAGE_PADDING = 15;
private const int BUTTON_PADDING = 5;
private const int CHECKBOX_WIDTH = 20;
private const int IMAGE_INDEX_EXCLAMATION = 0;
private const int IMAGE_INDEX_QUESTION = 1;
private const int IMAGE_INDEX_STOP = 2;
private const int IMAGE_INDEX_INFORMATION = 3;
#endregion
#region Fields
private System.ComponentModel.IContainer components;
private System.Windows.Forms.CheckBox chbSaveResponse;
private System.Windows.Forms.ImageList imageListIcons;
private System.Windows.Forms.ToolTip buttonToolTip;
private ArrayList _buttons = new ArrayList();
private bool _allowSaveResponse;
private bool _playAlert = true;
private MessageBoxExButton _cancelButton = null;
private Button _defaultButtonControl = null;
private int _maxLayoutWidth;
private int _maxLayoutHeight;
private int _maxWidth;
private int _maxHeight;
private bool _allowCancel = true;
private string _result = null;
/// <summary>
/// Used to determine the alert sound to play
/// </summary>
private MessageBoxIcon _standardIcon = MessageBoxIcon.None;
private Icon _iconImage = null;
private Timer timerTimeout = null;
private int _timeout = 0;
private TimeoutResult _timeoutResult = TimeoutResult.Default;
private System.Windows.Forms.Panel panelIcon;
private System.Windows.Forms.RichTextBox rtbMessage;
/// <summary>
/// Maps MessageBoxEx buttons to Button controls
/// </summary>
private Hashtable _buttonControlsTable = new Hashtable();
#endregion
#region Properties
public string Message
{
set{ rtbMessage.Text = value; }
}
public string Caption
{
set{ this.Text = value; }
}
public Font CustomFont
{
set{ this.Font = value; }
}
public ArrayList Buttons
{
get{ return _buttons; }
}
public bool AllowSaveResponse
{
get{ return _allowSaveResponse; }
set{ _allowSaveResponse = value; }
}
public bool SaveResponse
{
get{ return chbSaveResponse.Checked; }
}
public string SaveResponseText
{
set{ chbSaveResponse.Text = value; }
}
public MessageBoxIcon StandardIcon
{
set{ SetStandardIcon(value); }
}
public Icon CustomIcon
{
set
{
_standardIcon = MessageBoxIcon.None;
_iconImage = value;
}
}
public MessageBoxExButton CustomCancelButton
{
set{ _cancelButton = value; }
}
public string Result
{
get{ return _result; }
}
public bool PlayAlertSound
{
get{ return _playAlert; }
set{ _playAlert = value; }
}
public int Timeout
{
get{ return _timeout; }
set{ _timeout = value; }
}
public TimeoutResult TimeoutResult
{
get{ return _timeoutResult; }
set{ _timeoutResult = value; }
}
#endregion
#region Ctor/Dtor
public MessageBoxExForm()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
_maxWidth = (int)(SystemInformation.WorkingArea.Width * 0.60);
_maxHeight = (int)(SystemInformation.WorkingArea.Height * 0.90);
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#endregion
#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.components = new System.ComponentModel.Container();
System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(MessageBoxExForm));
this.panelIcon = new System.Windows.Forms.Panel();
this.chbSaveResponse = new System.Windows.Forms.CheckBox();
this.imageListIcons = new System.Windows.Forms.ImageList(this.components);
this.buttonToolTip = new System.Windows.Forms.ToolTip(this.components);
this.rtbMessage = new System.Windows.Forms.RichTextBox();
this.SuspendLayout();
//
// panelIcon
//
this.panelIcon.BackColor = System.Drawing.Color.Transparent;
this.panelIcon.Location = new System.Drawing.Point(8, 8);
this.panelIcon.Name = "panelIcon";
this.panelIcon.Size = new System.Drawing.Size(32, 32);
this.panelIcon.TabIndex = 3;
this.panelIcon.Visible = false;
//
// chbSaveResponse
//
this.chbSaveResponse.FlatStyle = System.Windows.Forms.FlatStyle.System;
this.chbSaveResponse.Location = new System.Drawing.Point(56, 56);
this.chbSaveResponse.Name = "chbSaveResponse";
this.chbSaveResponse.Size = new System.Drawing.Size(104, 16);
this.chbSaveResponse.TabIndex = 0;
//
// imageListIcons
//
this.imageListIcons.ColorDepth = System.Windows.Forms.ColorDepth.Depth16Bit;
this.imageListIcons.ImageSize = new System.Drawing.Size(32, 32);
this.imageListIcons.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageListIcons.ImageStream")));
this.imageListIcons.TransparentColor = System.Drawing.Color.Transparent;
//
// rtbMessage
//
this.rtbMessage.BackColor = System.Drawing.SystemColors.Control;
this.rtbMessage.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.rtbMessage.Location = new System.Drawing.Point(200, 8);
this.rtbMessage.Name = "rtbMessage";
this.rtbMessage.ReadOnly = true;
this.rtbMessage.Size = new System.Drawing.Size(100, 48);
this.rtbMessage.TabIndex = 4;
this.rtbMessage.Text = "";
this.rtbMessage.Visible = false;
//
// MessageBoxExForm
//
this.AutoScale = false;
this.AutoScaleBaseSize = new System.Drawing.Size(5, 14);
this.ClientSize = new System.Drawing.Size(322, 224);
this.Controls.Add(this.rtbMessage);
this.Controls.Add(this.chbSaveResponse);
this.Controls.Add(this.panelIcon);
this.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "MessageBoxExForm";
this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
this.ResumeLayout(false);
}
#endregion
#region Overrides
/// <summary>
/// This will get called everytime we call ShowDialog on the form
/// </summary>
/// <param name="e"></param>
protected override void OnLoad(EventArgs e)
{
//Reset result
_result = null;
this.Size = new Size(_maxWidth, _maxHeight);
//This is the rectangle in which all items will be layed out
_maxLayoutWidth = this.ClientSize.Width - LEFT_PADDING - RIGHT_PADDING;
_maxLayoutHeight = this.ClientSize.Height - TOP_PADDING - BOTTOM_PADDING;
AddOkButtonIfNoButtonsPresent();
DisableCloseIfMultipleButtonsAndNoCancelButton();
SetIconSizeAndVisibility();
SetMessageSizeAndVisibility();
SetCheckboxSizeAndVisibility();
SetOptimumSize();
LayoutControls();
CenterForm();
PlayAlert();
SelectDefaultButton();
StartTimerIfTimeoutGreaterThanZero();
base.OnLoad (e);
}
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if((int)keyData == (int)(Keys.Alt | Keys.F4) && !_allowCancel)
{
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
protected override void OnClosing(CancelEventArgs e)
{
if(_result == null)
{
if(_allowCancel)
{
_result = _cancelButton.Value;
}
else
{
e.Cancel = true;
return;
}
}
if(timerTimeout != null)
{
timerTimeout.Stop();
}
base.OnClosing (e);
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint (e);
if(_iconImage != null)
{
e.Graphics.DrawIcon(_iconImage, new Rectangle(panelIcon.Location, new Size(32, 32)));
}
}
#endregion
#region Methods
/// <summary>
/// Measures a string using the Graphics object for this form with
/// the specified font
/// </summary>
/// <param name="str">The string to measure</param>
/// <param name="maxWidth">The maximum width available to display the string</param>
/// <param name="font">The font with which to measure the string</param>
/// <returns></returns>
private Size MeasureString(string str, int maxWidth, Font font)
{
Graphics g = this.CreateGraphics();
SizeF strRectSizeF = g.MeasureString(str, font, maxWidth);
g.Dispose();
return new Size((int)Math.Ceiling(strRectSizeF.Width), (int)Math.Ceiling(strRectSizeF.Height));
}
/// <summary>
/// Measures a string using the Graphics object for this form and the
/// font of this form
/// </summary>
/// <param name="str"></param>
/// <param name="maxWidth"></param>
/// <returns></returns>
private Size MeasureString(string str, int maxWidth)
{
return MeasureString(str, maxWidth, this.Font);
}
/// <summary>
/// Gets the longest button text
/// </summary>
/// <returns></returns>
private string GetLongestButtonText()
{
int maxLen = 0;
string maxStr = null;
foreach(MessageBoxExButton button in _buttons)
{
if(button.Text != null && button.Text.Length > maxLen)
{
maxLen = button.Text.Length;
maxStr = button.Text;
}
}
return maxStr;
}
/// <summary>
/// Sets the size and visibility of the Message
/// </summary>
private void SetMessageSizeAndVisibility()
{
if(rtbMessage.Text == null || rtbMessage.Text.Trim().Length == 0)
{
rtbMessage.Size = Size.Empty;
rtbMessage.Visible = false;
}
else
{
int maxWidth = _maxLayoutWidth;
if(panelIcon.Size.Width != 0)
{
maxWidth = maxWidth - (panelIcon.Size.Width + ICON_MESSAGE_PADDING);
}
//We need to account for scroll bar width and height, otherwise for certains
//kinds of text the scroll bar shows up unnecessarily
maxWidth = maxWidth - SystemInformation.VerticalScrollBarWidth;
Size messageRectSize = MeasureString(rtbMessage.Text, maxWidth);
messageRectSize.Width += SystemInformation.VerticalScrollBarWidth;
messageRectSize.Height = Math.Max(panelIcon.Height, messageRectSize.Height) + SystemInformation.HorizontalScrollBarHeight;
rtbMessage.Size = messageRectSize;
rtbMessage.Visible = true;
}
}
/// <summary>
/// Sets the size and visibility of the Icon
/// </summary>
private void SetIconSizeAndVisibility()
{
if(_iconImage == null)
{
panelIcon.Visible = false;
panelIcon.Size = Size.Empty;
}
else
{
panelIcon.Size = new Size(32,32);
panelIcon.Visible = true;
}
}
/// <summary>
/// Sets the size and visibility of the save response checkbox
/// </summary>
private void SetCheckboxSizeAndVisibility()
{
if(!AllowSaveResponse)
{
chbSaveResponse.Visible = false;
chbSaveResponse.Size = Size.Empty;
}
else
{
Size saveResponseTextSize = MeasureString(chbSaveResponse.Text, _maxLayoutWidth);
saveResponseTextSize.Width += CHECKBOX_WIDTH;
chbSaveResponse.Size = saveResponseTextSize;
chbSaveResponse.Visible= true;
}
}
/// <summary>
/// Calculates the button size based on the text of the longest
/// button text
/// </summary>
/// <returns></returns>
private Size GetButtonSize()
{
string longestButtonText = GetLongestButtonText();
if(longestButtonText == null)
{
//TODO:Handle this case
}
Size buttonTextSize = MeasureString(longestButtonText, _maxLayoutWidth);
Size buttonSize = new Size(buttonTextSize.Width + BUTTON_LEFT_PADDING + BUTTON_RIGHT_PADDING,
buttonTextSize.Height + BUTTON_TOP_PADDING + BUTTON_BOTTOM_PADDING);
if(buttonSize.Width < MIN_BUTTON_WIDTH)
buttonSize.Width = MIN_BUTTON_WIDTH;
if(buttonSize.Height < MIN_BUTTON_HEIGHT)
buttonSize.Height = MIN_BUTTON_HEIGHT;
return buttonSize;
}
/// <summary>
/// Set the icon
/// </summary>
/// <param name="icon"></param>
private void SetStandardIcon(MessageBoxIcon icon)
{
_standardIcon = icon;
switch(icon)
{
case MessageBoxIcon.Asterisk:
_iconImage = SystemIcons.Asterisk;
break;
case MessageBoxIcon.Error:
_iconImage = SystemIcons.Error;
break;
case MessageBoxIcon.Exclamation:
_iconImage = SystemIcons.Exclamation;
break;
// case MessageBoxIcon.Hand:
// _iconImage = SystemIcons.Hand;
// break;
// case MessageBoxIcon.Information:
// _iconImage = SystemIcons.Information;
// break;
case MessageBoxIcon.Question:
_iconImage = SystemIcons.Question;
break;
// case MessageBoxIcon.Stop:
// _iconImage = SystemIcons.Stop;
// break;
// case MessageBoxIcon.Warning:
// _iconImage = SystemIcons.Warning;
// break;
case MessageBoxIcon.None:
_iconImage = null;
break;
}
}
private void AddOkButtonIfNoButtonsPresent()
{
if(_buttons.Count == 0)
{
MessageBoxExButton okButton = new MessageBoxExButton();
okButton.Text = MessageBoxExButtons.Ok.ToString();
okButton.Value = MessageBoxExButtons.Ok.ToString();
_buttons.Add(okButton);
}
}
/// <summary>
/// Centers the form on the screen
/// </summary>
private void CenterForm()
{
int x = (SystemInformation.WorkingArea.Width - this.Width ) / 2;
int y = (SystemInformation.WorkingArea.Height - this.Height ) / 2;
this.Location = new Point(x,y);
}
/// <summary>
/// Sets the optimum size for the form based on the controls that
/// need to be displayed
/// </summary>
private void SetOptimumSize()
{
int ncWidth = this.Width - this.ClientSize.Width;
int ncHeight = this.Height - this.ClientSize.Height;
int iconAndMessageRowWidth = rtbMessage.Width + ICON_MESSAGE_PADDING + panelIcon.Width;
int saveResponseRowWidth = chbSaveResponse.Width + (int)(panelIcon.Width / 2);
int buttonsRowWidth = GetWidthOfAllButtons();
int captionWidth = GetCaptionSize().Width;
int maxItemWidth = Math.Max(saveResponseRowWidth, Math.Max(iconAndMessageRowWidth, buttonsRowWidth));
int requiredWidth = LEFT_PADDING + maxItemWidth + RIGHT_PADDING + ncWidth;
//Since Caption width is not client width, we do the check here
if(requiredWidth < captionWidth)
requiredWidth = captionWidth;
int requiredHeight = TOP_PADDING + Math.Max(rtbMessage.Height,panelIcon.Height) + ITEM_PADDING + chbSaveResponse.Height + ITEM_PADDING + GetButtonSize().Height + BOTTOM_PADDING + ncHeight;
//Fix the bug where if the message text is huge then the buttons are overwritten.
//Incase the required height is more than the max height then adjust that in the
//message height
if(requiredHeight > _maxHeight)
{
rtbMessage.Height -= requiredHeight - _maxHeight;
}
int height = Math.Min(requiredHeight, _maxHeight);
int width = Math.Min(requiredWidth, _maxWidth);
this.Size = new Size(width, height);
}
/// <summary>
/// Returns the width that will be occupied by all buttons including
/// the inter-button padding
/// </summary>
private int GetWidthOfAllButtons()
{
Size buttonSize = GetButtonSize();
int allButtonsWidth = buttonSize.Width*_buttons.Count + BUTTON_PADDING*(_buttons.Count-1);
return allButtonsWidth;
}
/// <summary>
/// Gets the width of the caption
/// </summary>
private Size GetCaptionSize()
{
Font captionFont = GetCaptionFont();
if(captionFont == null)
{
//some error occured while determining system font
captionFont = new Font("Tahoma",11);
}
int availableWidth = _maxWidth - SystemInformation.CaptionButtonSize.Width - SystemInformation.Border3DSize.Width * 2 ;
Size captionSize = MeasureString(this.Text, availableWidth, captionFont);
captionSize.Width += SystemInformation.CaptionButtonSize.Width + SystemInformation.Border3DSize.Width * 2;
return captionSize;
}
/// <summary>
/// Layout all the controls
/// </summary>
private void LayoutControls()
{
panelIcon.Location = new Point(LEFT_PADDING, TOP_PADDING);
rtbMessage.Location = new Point(LEFT_PADDING + panelIcon.Width + ICON_MESSAGE_PADDING * (panelIcon.Width == 0 ? 0 : 1) , TOP_PADDING);
chbSaveResponse.Location = new Point(LEFT_PADDING + (int)(panelIcon.Width / 2),
TOP_PADDING + Math.Max(panelIcon.Height, rtbMessage.Height) + ITEM_PADDING);
Size buttonSize = GetButtonSize();
int allButtonsWidth = GetWidthOfAllButtons();
int firstButtonX = ((int)(this.ClientSize.Width - allButtonsWidth) / 2);
int firstButtonY = this.ClientSize.Height - BOTTOM_PADDING - buttonSize.Height;
Point nextButtonLocation = new Point(firstButtonX,firstButtonY);
bool foundDefaultButton = false;
foreach(MessageBoxExButton button in _buttons)
{
Button buttonCtrl = GetButton(button, buttonSize, nextButtonLocation);
if(!foundDefaultButton)
{
_defaultButtonControl = buttonCtrl;
foundDefaultButton = true;
}
nextButtonLocation.X += buttonSize.Width + BUTTON_PADDING;
}
}
/// <summary>
/// Gets the button control for the specified MessageBoxExButton, if the
/// control has not been created this method creates the control
/// </summary>
/// <param name="button"></param>
/// <param name="size"></param>
/// <param name="location"></param>
/// <returns></returns>
private Button GetButton(MessageBoxExButton button, Size size, Point location)
{
Button buttonCtrl = null;
if(_buttonControlsTable.ContainsKey(button))
{
buttonCtrl = _buttonControlsTable[button] as Button;
buttonCtrl.Size = size;
buttonCtrl.Location = location;
}
else
{
buttonCtrl = CreateButton(button, size, location);
_buttonControlsTable[button] = buttonCtrl;
this.Controls.Add(buttonCtrl);
}
return buttonCtrl;
}
/// <summary>
/// Creates a button control based on info from MessageBoxExButton
/// </summary>
/// <param name="button"></param>
/// <param name="size"></param>
/// <param name="location"></param>
/// <returns></returns>
private Button CreateButton(MessageBoxExButton button, Size size, Point location)
{
Button buttonCtrl = new Button();
buttonCtrl.Size = size;
buttonCtrl.Text = button.Text;
buttonCtrl.TextAlign = ContentAlignment.MiddleCenter;
buttonCtrl.FlatStyle = FlatStyle.System;
if(button.HelpText != null && button.HelpText.Trim().Length != 0)
{
buttonToolTip.SetToolTip(buttonCtrl, button.HelpText);
}
buttonCtrl.Location = location;
buttonCtrl.Click += new EventHandler(OnButtonClicked);
buttonCtrl.Tag = button.Value;
return buttonCtrl;
}
private void DisableCloseIfMultipleButtonsAndNoCancelButton()
{
if(_buttons.Count > 1)
{
if(_cancelButton != null)
return;
//See if standard cancel button is present
foreach(MessageBoxExButton button in _buttons)
{
if(button.Text == MessageBoxExButtons.Cancel.ToString() && button.Value == MessageBoxExButtons.Cancel.ToString())
{
_cancelButton = button;
return;
}
}
//Standard cancel button is not present, Disable
//close button
DisableCloseButton(this);
_allowCancel = false;
}
else if(_buttons.Count == 1)
{
_cancelButton = _buttons[0] as MessageBoxExButton;
}
else
{
//This condition should never get called
_allowCancel = false;
}
}
/// <summary>
/// Plays the alert sound based on the icon set for the message box
/// </summary>
private void PlayAlert()
{
if(_playAlert)
{
if(_standardIcon != MessageBoxIcon.None)
{
MessageBeep((uint)_standardIcon);
}
else
{
MessageBeep(0 /*MB_OK*/);
}
}
}
private void SelectDefaultButton()
{
if(_defaultButtonControl != null)
{
_defaultButtonControl.Select();
}
}
private void StartTimerIfTimeoutGreaterThanZero()
{
if(_timeout > 0)
{
if(timerTimeout == null)
{
timerTimeout = new Timer(this.components);
timerTimeout.Tick += new EventHandler(timerTimeout_Tick);
}
if(!timerTimeout.Enabled)
{
timerTimeout.Interval = _timeout;
timerTimeout.Start();
}
}
}
private void SetResultAndClose(string result)
{
_result = result;
this.DialogResult = DialogResult.OK;
}
#endregion
#region Event Handlers
private void OnButtonClicked(object sender, EventArgs e)
{
Button btn = sender as Button;
if(btn == null || btn.Tag == null)
return;
string result = btn.Tag as string;
SetResultAndClose(result);
}
private void timerTimeout_Tick(object sender, EventArgs e)
{
timerTimeout.Stop();
switch(_timeoutResult)
{
case TimeoutResult.Default:
_defaultButtonControl.PerformClick();
break;
case TimeoutResult.Cancel:
if(_cancelButton != null)
{
SetResultAndClose(_cancelButton.Value);
}
else
{
_defaultButtonControl.PerformClick();
}
break;
case TimeoutResult.Timeout:
SetResultAndClose(MessageBoxExResult.Timeout);
break;
}
}
#endregion
#region P/Invoke - SystemParametersInfo, GetSystemMenu, EnableMenuItem, MessageBeep
private Font GetCaptionFont()
{
NONCLIENTMETRICS ncm = new NONCLIENTMETRICS();
ncm.cbSize = Marshal.SizeOf(typeof(NONCLIENTMETRICS));
try
{
bool result = SystemParametersInfo(SPI_GETNONCLIENTMETRICS, ncm.cbSize, ref ncm, 0);
if(result)
{
return Font.FromLogFont(ncm.lfCaptionFont);
}
else
{
int lastError = Marshal.GetLastWin32Error();
return null;
}
}
catch(Exception /*ex*/)
{
//System.Console.WriteLine(ex.Message);
}
return null;
}
private const int SPI_GETNONCLIENTMETRICS = 41;
private const int LF_FACESIZE = 32;
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]
private struct LOGFONT
{
public int lfHeight;
public int lfWidth;
public int lfEscapement;
public int lfOrientation;
public int lfWeight;
public byte lfItalic;
public byte lfUnderline;
public byte lfStrikeOut;
public byte lfCharSet;
public byte lfOutPrecision;
public byte lfClipPrecision;
public byte lfQuality;
public byte lfPitchAndFamily;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string lfFaceSize;
}
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]
private struct NONCLIENTMETRICS
{
public int cbSize;
public int iBorderWidth;
public int iScrollWidth;
public int iScrollHeight;
public int iCaptionWidth;
public int iCaptionHeight;
public LOGFONT lfCaptionFont;
public int iSmCaptionWidth;
public int iSmCaptionHeight;
public LOGFONT lfSmCaptionFont;
public int iMenuWidth;
public int iMenuHeight;
public LOGFONT lfMenuFont;
public LOGFONT lfStatusFont;
public LOGFONT lfMessageFont;
}
[DllImport("user32.dll", SetLastError=true, CharSet=CharSet.Auto)]
private static extern bool SystemParametersInfo(int uiAction, int uiParam,
ref NONCLIENTMETRICS ncMetrics, int fWinIni);
[DllImport("user32.dll", CharSet=CharSet.Auto)]
private static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);
[DllImport("user32.dll", CharSet=CharSet.Auto)]
private static extern bool EnableMenuItem(IntPtr hMenu, uint uIDEnableItem,
uint uEnable);
private const int SC_CLOSE = 0xF060;
private const int MF_BYCOMMAND = 0x0;
private const int MF_GRAYED = 0x1;
private const int MF_ENABLED = 0x0;
private void DisableCloseButton(Form form)
{
try
{
EnableMenuItem(GetSystemMenu(form.Handle, false), SC_CLOSE, MF_BYCOMMAND | MF_GRAYED);
}
catch(Exception /*ex*/)
{
//System.Console.WriteLine(ex.Message);
}
}
[DllImport("user32.dll", CharSet=CharSet.Auto)]
private static extern bool MessageBeep(uint type);
#endregion
}
}

View File

@ -0,0 +1,387 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 1.3
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">1.3</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1">this is my long string</data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
[base64 mime encoded serialized .NET Framework object]
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
[base64 mime encoded string representing a byte array form of the .NET Framework object]
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used forserialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="panelIcon.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="panelIcon.SnapToGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</data>
<data name="panelIcon.DrawGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</data>
<data name="panelIcon.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="panelIcon.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="panelIcon.GridSize" type="System.Drawing.Size, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>8, 8</value>
</data>
<data name="chbSaveResponse.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="chbSaveResponse.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="chbSaveResponse.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="imageListIcons.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="imageListIcons.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="imageListIcons.Location" type="System.Drawing.Point, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</data>
<data name="imageListIcons.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFpTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0xLjAuNTAw
MC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZT
eXN0ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMA
AADELQAAAk1TRnQBSQFMAgEBBAEAAQUBAAEEAQABIAEAASABAAT/AREBEAj/AUIBTQE2BwABNgMAASgD
AAGAAwABQAMAAQEBAAEQBgABQP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/
AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wA8AAEQAUIBEAFCARABQgEQAUIBEAFCARABQgEQAUIBEAFCARAB
QgEQAUIBEAFCARABQgEQAUIBEAFCARABQgEQAUIBEAFCARABQgEQAUIBEAFCARABQgEQAUIBEAFCARAB
QgEQAUIqAAEQAUIBEAFCMAABEAFCARABQgEQAUIBEAFCARABQgEQAUIBEAFCARABQjwAARABQgEQAUIe
AAEQAUIBEAFCARABQgEQAUIBEAFCARABQgEQAUIBEAFCARABQgEQAUIBEAFCARABQgEQAUIBEAFCARAB
QgEQAUIBEAFCARABQgEQAUIBEAFCARABQgEQAUIBEAFCARABQgEQAUIBEAFCARABQiYAARABQgEQAUIB
EAFCKgABEAFCARABQgEQAUIBEAFCARABQgEQAUIBEAFCARABQgEQAUIBEAFCARABQgEQAUIBEAFCARAB
QjQAARABQgEQAUIBEAFCGwABQjAAARABQgEQAUIBEAFCARABQgEQAUImAAEQAUIBEAFCKAABEAFCARAB
QgEAAUABAAFAAQABQAEAAUABAAFAAQABQAEAAUABAAFAARABQgEQAUIBEAFCARABQgEQAUIBEAFCNAAB
EAFCARABQhkAAUIB4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B
4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8BGAFjAgABEAFCARAB
QgEQAUIBEAFCIgAB/wF/AgABEAFCARABQiQAARABQgEAAUABAAFAAQABQAEAAXwBAAF8AQABfAEAAXwB
AAF8AQABfAEAAXwBAAF8AQABQAEAAUABAAFAARABQgEQAUIBEAFCARABQgEQAUIsAAH/AX8CAAEQAUIB
EAFCFwABQgHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B
4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/ARgBYwIAARAB
QgEQAUIBEAFCIAAB/wF/Af8BfwIAARABQgEQAUIiAAEQAUIBAAFAAQABfAEAAXwBAAF8AQABfAEAAXwB
AAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAFAARABQgEQAUIBEAFCARABQgEQAUIo
AAH/AX8B/wF/AgABEAFCARABQhcAAUIB4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B
4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B
4AF/AeABfwHgAX8CAAEQAUIBEAFCARABQhoAARABQgIAAf8BfwH/AX8B/wF/AgABEAFCARABQiEAAUAB
AAFAAQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwB
AAF8AQABfAEAAUABAAFAARABQgEQAUIBEAFCARABQiAAARABQgIAAf8BfwH/AX8B/wF/AgABEAFCARAB
QhcAAUIB4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8BGAFjBAAB
GAFjAeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8CAAEQAUIBEAFCFgAB
EAFCARABQgEQAUIBEAFCAgAB/wF/Af8BfwH/AX8CAAEQAUIBEAFCARABQgEQAUIBEAFCGQABQAEAAXwB
AAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwB
AAF8AQABfAEAAXwBAAF8AQABQAEQAUIBEAFCARABQhoAARABQgEQAUIBEAFCARABQgIAAf8BfwH/AX8B
/wF/AgABEAFCARABQgEQAUIBEAFCARABQhEAAUIB4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeAB
fwHgAX8B4AF/AeABfwHgAX8IAAHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B
GAFjAgABEAFCARABQhIAARABQgEQAUIBEAFCBgABGAFjAf8BfwH/AX8B/wF/AgABEAFCARABQgEQAUIB
EAFCARABQgEQAUIBEAFCEwABQAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwB
AAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAFAARABQgEQAUIB
EAFCFAABEAFCARABQgEQAUIGAAEYAWMB/wF/Af8BfwH/AX8CAAEQAUIBEAFCARABQgEQAUIBEAFCARAB
QgEQAUIPAAFCAeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8IAAHgAX8B
4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8CAAEQAUIBEAFCEgABEAFCBgABGAFjAf8B
fwH/AX8B/wF/Af8BfwH/AX8B/wF/ARgBYwYAARABQgEQAUIBEAFCARABQgEQAUIRAAFAAQABfAEAAXwB
AAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwB
AAF8AQABfAEAAXwBAAF8AQABfAEAAUABEAFCARABQgEQAUIBEAFCEAABEAFCBgABGAFjAf8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/ARgBYwYAARABQgEQAUIBEAFCARABQgEQAUINAAFCAeABfwHgAX8B4AF/AeAB
fwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8BGAFjBAABGAFjAeABfwHgAX8B4AF/AeABfwHgAX8B
4AF/AeABfwHgAX8B4AF/ARgBYwIAARABQgEQAUIUAAEYAWMB/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8BGAFjBAABEAFCARABQgEQAUIBEAFCDQABQAEAAXwBAAF8AQAB
fAEAAXwBAAF8AQABfAH/AX8BAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8Af8B
fwEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAUABEAFCARABQgEQAUISAAEYAWMB/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8BGAFjBAABEAFCARABQgEQAUIBEAFCDQAB
QgHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeAB
fwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AgABEAFCARABQhIAARgBYwH/AX8B/wF/Af8B
fwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8BGAFjAgAB
EAFCARABQgEQAUIBEAFCCQABQAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAH/AX8B/wF/Af8BfwEAAXwB
AAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8Af8BfwH/AX8B/wF/AQABfAEAAXwBAAF8AQABfAEAAXwB
AAF8AQABQAEQAUIBEAFCDgABGAFjAf8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8B
fwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwEYAWMCAAEQAUIBEAFCARABQgEQAUILAAFCAeABfwHgAX8B
4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8CAAHgAX8B4AF/AeABfwHgAX8B4AF/AeAB
fwHgAX8B4AF/AeABfwHgAX8BGAFjAgABEAFCARABQhAAAf8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8B
fwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8CAAEQAUIB
EAFCARABQgEQAUIHAAFAAQABfAEAAXwBAAF8AQABfAEAAXwB/wF/Af8BfwH/AX8B/wF/Af8BfwEAAXwB
AAF8AQABfAEAAXwBAAF8AQABfAH/AX8B/wF/Af8BfwH/AX8B/wF/AQABfAEAAXwBAAF8AQABfAEAAXwB
AAFAARABQgEQAUIBEAFCCgAB/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8B
fwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwIAARABQgEQAUIBEAFCARABQgsAAUIB
4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8BGAFjAgABGAFjAeABfwHgAX8B4AF/AeAB
fwHgAX8B4AF/AeABfwHgAX8B4AF/AgABEAFCARABQhAAAf8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8B
fwH/AX8B/wF/ARgBYwEfAQABHwEAARgBYwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8B
fwIAARABQgEQAUIBEAFCARABQgUAAUABAAF8AQABfAEAAXwBAAF8AQABfAEAAXwB/wF/Af8BfwH/AX8B
/wF/Af8BfwEAAXwBAAF8AQABfAEAAXwB/wF/Af8BfwH/AX8B/wF/Af8BfwEAAXwBAAF8AQABfAEAAXwB
AAF8AQABfAEAAUABEAFCARABQgEQAUIIAAH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8B
fwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8CAAEQAUIB
EAFCARABQgEQAUIJAAFCAeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AQABQgMAAUIB
4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwEYAWMCAAEQAUIBEAFCDAABEAFCAf8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwEfAQABHwEAAR8BAAEfAQAB/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/AgABEAFCARABQgEQAUIDAAFAAQABfAEAAXwBAAF8AQAB
fAEAAXwBAAF8AQABfAEAAXwB/wF/Af8BfwH/AX8B/wF/Af8BfwEAAXwBAAF8Af8BfwH/AX8B/wF/Af8B
fwH/AX8BAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAUABEAFCARABQgQAARABQgH/AX8B
/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/AR8BAAEfAQABHwEAAR8BAAEfAQABHwEAAR8BAAEfAQAB
HwEAAf8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwIAARABQgEQAUIBEAFCCwABQgHgAX8B4AF/AeAB
fwHgAX8B4AF/AeABfwHgAX8B4AF/BgAB4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwIAARAB
QgEQAUIMAAEQAUIBGAFjAf8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwEfAQAB
HwEAAR8BAAEfAQAB/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/ARgBYwIAARAB
QgEQAUIBEAFCAQABQAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAH/AX8B/wF/Af8B
fwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8BAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQAB
fAEAAXwBAAFAARABQgEQAUICAAEQAUIBGAFjAf8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwEfAQABHwEAAR8BAAEfAQABHwEAAf8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B
/wF/ARgBYwIAARABQgEQAUIBEAFCCQABQgHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8BGAFjBgAB
GAFjAeABfwHgAX8B4AF/AeABfwHgAX8B4AF/ARgBYwIAARABQgEQAUIMAAEQAUIB/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwEYAWMBHwEAAR8BAAEYAWMB/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwIAARABQgEQAUIBEAFCAQABQAEAAXwBAAF8AQAB
fAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwB/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8B
fwEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAFAARABQgEQAUICAAEQAUIB
/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwEfAQABHwEAAR8BAAEfAQAB
HwEAAf8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwIAARABQgEQAUIBEAFCCwAB
QgHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwEAAUIHAAFCAeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AgAB
EAFCARABQgwAARABQgEYAWMB/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8B
fwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8B
fwEYAWMCAAEQAUIBEAFCAQABQAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwB
AAF8Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwB
AAF8AQABfAEAAXwBAAFAARABQgEQAUIBEAFCARgBYwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/AR8BAAEfAQABHwEAAR8BAAEfAQAB/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/ARgBYwIAARABQgEQAUILAAFCAeABfwHgAX8B4AF/AeABfwHgAX8B4AF/CgAB
4AF/AeABfwHgAX8B4AF/AeABfwEYAWMCAAEQAUIBEAFCDAABEAFCAf8BfwH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwEfAQABHwEAAf8BfwH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwIAARABQgEQAUIBAAFAAQABfAEAAXwBAAF8AQAB
fAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwB/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8BAAF8AQAB
fAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAUABEAFCARABQgEQAUIB/wF/Af8B
fwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8BHwEAAR8BAAEfAQABHwEAAR8B
AAH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/AgABEAFCARABQg0AAUIB
4AF/AeABfwHgAX8B4AF/AeABfwoAAeABfwHgAX8B4AF/AeABfwHgAX8CAAEQAUIBEAFCDgABEAFCAf8B
fwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwEfAQABHwEAARgB
YwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwIAARABQgEQAUIB
AAFAAQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAUAB
EAFCARABQgEQAUIB/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B
HwEAAR8BAAEfAQABHwEAAR8BAAH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B
/wF/AgABEAFCARABQg0AAUIB4AF/AeABfwHgAX8B4AF/AeABfwoAAeABfwHgAX8B4AF/AeABfwEYAWMC
AAEQAUIBEAFCDgABEAFCAf8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwEfAQABHwEAAR8BAAH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwIAARABQgEQAUIBAAFAAQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8Af8B
fwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwEAAXwBAAF8AQABfAEAAXwBAAF8AQAB
fAEAAXwBAAF8AQABfAEAAUABEAFCAgABEAFCAf8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/AR8BAAEfAQABHwEAAR8BAAEfAQAB/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/Af8BfwIAARABQgEQAUIPAAFCAeABfwHgAX8B4AF/AeABfwoAAeABfwHgAX8B
4AF/AeABfwIAARABQgEQAUIQAAEQAUIB/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/ARgBYwEfAQABHwEAAR8BAAH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/AgABEAFCARABQgEAAUABAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQAB
fAH/AX8B/wF/Af8BfwH/AX8B/wF/AQABfAEAAXwB/wF/Af8BfwH/AX8B/wF/Af8BfwEAAXwBAAF8AQAB
fAEAAXwBAAF8AQABfAEAAXwBAAF8AQABQAEQAUICAAEQAUIB/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8BHwEAAR8BAAEfAQABHwEAAR8BAAH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/AgABEAFCARABQg8AAUIB4AF/AeABfwHgAX8B4AF/CgAB
4AF/AeABfwHgAX8BGAFjAgABEAFCARABQhAAARABQgH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwEYAWMBHwEAAR8BAAEYAWMB/wF/AR8BAAEfAQABHwEAAR8BAAH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8CAAEQAUIFAAFAAQABfAEAAXwBAAF8AQABfAEAAXwBAAF8Af8B
fwH/AX8B/wF/Af8BfwH/AX8BAAF8AQABfAEAAXwBAAF8Af8BfwH/AX8B/wF/Af8BfwH/AX8BAAF8AQAB
fAEAAXwBAAF8AQABfAEAAXwBAAFAARABQgEQAUICAAEQAUIB/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/AR8BAAEfAQABHwEAAR8BAAEfAQABHwEAAR8BAAH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/AgABEAFCEwABQgHgAX8B4AF/AeABfwEYAWMGAAEYAWMB
4AF/AeABfwHgAX8CAAEQAUIBEAFCEgABEAFCARgBYwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B
/wF/AR8BAAEfAQABHwEAAR8BAAH/AX8BGAFjAR8BAAEfAQABHwEAAR8BAAH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/ARgBYwIAARABQgUAAUABAAF8AQABfAEAAXwBAAF8AQABfAH/AX8B/wF/Af8B
fwH/AX8B/wF/AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8Af8BfwH/AX8B/wF/Af8BfwH/AX8BAAF8AQAB
fAEAAXwBAAF8AQABfAEAAUABEAFCBAABEAFCARgBYwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/ARgBYwIAARABQhMAAUIB4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeAB
fwHgAX8B4AF/ARgBYwIAARABQgEQAUIUAAEQAUIB/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8B
fwEfAQABHwEAAR8BAAEfAQAB/wF/Af8BfwEfAQABHwEAAR8BAAEfAQAB/wF/Af8BfwH/AX8B/wF/Af8B
fwH/AX8B/wF/Af8BfwIAARABQgcAAUABAAF8AQABfAEAAXwBAAF8AQABfAEAAXwB/wF/Af8BfwH/AX8B
AAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAH/AX8B/wF/Af8BfwEAAXwBAAF8AQABfAEAAXwB
AAF8AQABfAEAAUAIAAEQAUIB/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8B
fwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8B
fwIAARABQhcAAUIB4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeABfwHgAX8CAAEQAUIBEAFCFgAB
EAFCARgBYwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8BHwEAAR8BAAH/AX8B/wF/Af8BfwH/AX8B
HwEAAR8BAAEfAQABHwEAAf8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwEYAWMNAAFAAQABfAEAAXwB
AAF8AQABfAEAAXwBAAF8Af8BfwEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwB
/wF/AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABQAEQAUIIAAEQAUIBGAFjAf8BfwH/AX8B/wF/Af8B
fwH/AX8B/wF/Af8BfwH/AX8B/wF/ARgBYwEfAQABHwEAAR8BAAEfAQABGAFjAf8BfwH/AX8B/wF/Af8B
fwH/AX8B/wF/Af8BfwH/AX8B/wF/ARgBYxsAAUIB4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AeAB
fwEYAWMCAAEQAUIBEAFCGAABEAFCAf8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwEYAWMBHwEAARgB
YwH/AX8B/wF/AR8BAAEfAQABHwEAAR8BAAEYAWMB/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/EQAB
QAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQAB
fAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAFAARABQgwAARABQgH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/Af8BfwEfAQABHwEAAR8BAAEfAQABHwEAAR8BAAH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/Af8Bfx8AAUIB4AF/AeABfwHgAX8B4AF/AeABfwHgAX8B4AF/AgABEAFCARAB
QhwAARABQgH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8BGAFjAR8BAAEfAQABHwEAAR8BAAEfAQAB
HwEAARgBYwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8TAAFAAQABfAEAAXwBAAF8AQABfAEAAXwB
AAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwB
AAF8AQABfAEAAUAQAAEQAUIB/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwEfAQABHwEAAR8B
AAEfAQABHwEAAR8BAAH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/IQABQgHgAX8B4AF/AeAB
fwHgAX8B4AF/AeABfwEYAWMCAAEQAUIBEAFCHgABEAFCAf8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8B
fwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8XAAFAAQAB
fAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQAB
fAEAAXwBAAF8AQABfAEAAXwBAAFAFAABEAFCAf8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwEYAWMB
HwEAAR8BAAEfAQABHwEAARgBYwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8lAAFCAeABfwHgAX8B
4AF/AeABfwHgAX8CAAEQAUIBEAFCIgABEAFCARgBYwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8BGAFjARABQhkAAUABAAFAAQABfAEAAXwB
AAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAUAB
AAFAGAABEAFCARgBYwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8B
fwH/AX8B/wF/Af8BfwH/AX8BGAFjARABQiUAAUIB4AF/AeABfwHgAX8B4AF/ARgBYwIAARABQiYAARAB
QgEQAUIBGAFjAf8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/ARgB
YwEQAUIBEAFCHwABQAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAXwBAAF8AQAB
fAEAAXwBAAF8AQABQB4AARABQgEQAUIBGAFjAf8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B
/wF/Af8BfwH/AX8B/wF/ARgBYwEQAUIBEAFCKQABQgHgAX8B4AF/ARgBYzAAARABQgEQAUIBEAFCARgB
YwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwEYAWMBEAFCARABQgEQAUIlAAFAAQABQAEAAUABAAF8AQAB
fAEAAXwBAAF8AQABfAEAAXwBAAF8AQABfAEAAUABAAFAAQABQCQAARABQgEQAUIBEAFCARgBYwH/AX8B
/wF/Af8BfwH/AX8B/wF/Af8BfwEYAWMBEAFCARABQgEQAUIvAAFCAQABQgEAAUI2AAEQAUIBEAFCARAB
QgEQAUIBEAFCARABQgEQAUIBEAFCMQABQAEAAUABAAFAAQABQAEAAUABAAFAAQABQAEAAUAwAAEQAUIB
EAFCARABQgEQAUIBEAFCARABQgEQAUIBEAFCGgABQgFNAT4HAAE+AwABKAMAAYADAAFAAwABAQEAAQEG
AAEEFgAD//8A/wADAAH4AgABAwL/AecC/wH4AQcD/wHnAf8B8AIAAQEC/wHHAv8BwAEAA/8BxwH/AcAD
AAL/AYcC/wGAAQABfwL/AYcB/wGAAwAC/wEHAf8B/gIAAR8C/wEHAf8EAAH/Af4BBwH/AfwCAAEPAf8B
/gEHAf8EAAH/AfgBBwH/AfgCAAEHAf8B+AEHAf8DAAEBAf8BwAEAAf8B8AIAAQcB/wHAAQAB/wMAAQEB
/wIAAT8B4AIAAQMB/wIAAT8BgAIAAQMB/gIAAR8B4AIAAQEB/gIAAR8BgAIAAQMB/AIAAQ8BwAIAAQEB
/AIAAQ8BwAIAAQcB+AIAAQcBgAIAAQEB+AIAAQcBwAIAAQcB8AIAAQMBgAMAAfACAAEDAeACAAEPAeAC
AAEBAYADAAHgAgABAQHgAgABDwHAAgABAQQAAcACAAEBAfACAAEfAYAHAAGAAwAB8AIAAR8BgAcAAYAD
AAH4AgABPwwAAfgCAAE/DAAB/AIAAX8MAAH8AgABfwcAAQEEAAH+AgAB/wcAAQEEAAH+AgAB/wMAAQEB
gAIAAQEDAAEBAf8BAAEBAf8DAAEBAYACAAEDAwABAQH/AQABAQH/AYACAAEDAYACAAEHAYACAAEDAf8B
gAEDAf8BgAIAAQcBwAIAAQcBgAIAAQcB/wGAAQMB/wHAAgABDwHgAgABDwHAAgABDwH/AcABBwH/AeAC
AAEfAeACAAEfAeACAAEfAf8BwAEHAf8B8AIAAT8B8AIAAT8B8AIAAT8B/wHgAQ8B/wH4AgABfwH4AgAB
fwH4AgABfwH/AeABHwH/AfwCAAH/Af4BAAEBAf8B/AIAAv8B8AF/Av8BAAEDAv8BAAEDAv8BAAEDAv8B
+AP/AeABHwL/AeABHwL/AeABHwH/FgAL
</value>
</data>
<data name="buttonToolTip.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="buttonToolTip.Location" type="System.Drawing.Point, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>142, 17</value>
</data>
<data name="buttonToolTip.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="rtbMessage.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="rtbMessage.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="rtbMessage.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="$this.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="$this.Language" type="System.Globalization.CultureInfo, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>(Default)</value>
</data>
<data name="$this.TrayLargeIcon" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="$this.Localizable" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="$this.GridSize" type="System.Drawing.Size, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>8, 8</value>
</data>
<data name="$this.DrawGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</data>
<data name="$this.TrayHeight" type="System.Int32, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>80</value>
</data>
<data name="$this.Name">
<value>MessageBoxExForm</value>
</data>
<data name="$this.SnapToGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</data>
<data name="$this.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
</root>

View File

@ -0,0 +1,20 @@
using System;
namespace Utils.MessageBoxExLib
{
/// <summary>
/// Standard MessageBoxEx icons
/// </summary>
public enum MessageBoxExIcon
{
None,
Asterisk,
Error,
Exclamation,
Hand,
Information,
Question,
Stop,
Warning
}
}

View File

@ -0,0 +1,126 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
<PropertyGroup>
<ProjectType>Local</ProjectType>
<ProductVersion>7.10.3077</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{4847D05C-EB58-49D9-B280-D22F8FF01857}</ProjectGuid>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ApplicationIcon />
<AssemblyKeyContainerName />
<AssemblyName>MessageBoxExLib</AssemblyName>
<AssemblyOriginatorKeyFile />
<DefaultClientScript>JScript</DefaultClientScript>
<DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>
<DefaultTargetSchema>IE50</DefaultTargetSchema>
<DelaySign>false</DelaySign>
<OutputType>Library</OutputType>
<RootNamespace>Utils.MessageBoxExLib</RootNamespace>
<RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
<StartupObject />
<FileUpgradeFlags>
</FileUpgradeFlags>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
<OldToolsVersion>0.0</OldToolsVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<OutputPath>bin\Debug\</OutputPath>
<AllowUnsafeBlocks>false</AllowUnsafeBlocks>
<BaseAddress>285212672</BaseAddress>
<CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
<ConfigurationOverrideFile />
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DocumentationFile />
<DebugSymbols>true</DebugSymbols>
<FileAlignment>4096</FileAlignment>
<NoStdLib>false</NoStdLib>
<NoWarn />
<Optimize>false</Optimize>
<RegisterForComInterop>false</RegisterForComInterop>
<RemoveIntegerChecks>false</RemoveIntegerChecks>
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
<WarningLevel>4</WarningLevel>
<DebugType>full</DebugType>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<OutputPath>bin\Release\</OutputPath>
<AllowUnsafeBlocks>false</AllowUnsafeBlocks>
<BaseAddress>285212672</BaseAddress>
<CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
<ConfigurationOverrideFile />
<DefineConstants>TRACE</DefineConstants>
<DocumentationFile />
<DebugSymbols>false</DebugSymbols>
<FileAlignment>4096</FileAlignment>
<NoStdLib>false</NoStdLib>
<NoWarn />
<Optimize>true</Optimize>
<RegisterForComInterop>false</RegisterForComInterop>
<RemoveIntegerChecks>false</RemoveIntegerChecks>
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
<WarningLevel>4</WarningLevel>
<DebugType>none</DebugType>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<ItemGroup>
<Reference Include="System">
<Name>System</Name>
</Reference>
<Reference Include="System.Data">
<Name>System.Data</Name>
</Reference>
<Reference Include="System.Drawing">
<Name>System.Drawing</Name>
</Reference>
<Reference Include="System.Windows.Forms">
<Name>System.Windows.Forms</Name>
</Reference>
<Reference Include="System.Xml">
<Name>System.XML</Name>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="AssemblyInfo.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="MessageBoxEx.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="MessageBoxExButton.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="MessageBoxExButtons.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="MessageBoxExForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="MessageBoxExIcon.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="MessageBoxExManager.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="MessageBoxExResult.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="TimeoutResult.cs">
<SubType>Code</SubType>
</Compile>
<Content Include="Notes.txt" />
<EmbeddedResource Include="MessageBoxExForm.resx">
<DependentUpon>MessageBoxExForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Resources\StandardButtonsText.de.resx" />
<EmbeddedResource Include="Resources\StandardButtonsText.fr.resx" />
<EmbeddedResource Include="Resources\StandardButtonsText.resx" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<PreBuildEvent />
<PostBuildEvent />
</PropertyGroup>
</Project>

View File

@ -0,0 +1,205 @@
using System;
using System.IO;
using System.Collections;
using System.Resources;
using System.Reflection;
namespace Utils.MessageBoxExLib
{
/// <summary>
/// Manages a collection of MessageBoxes. Basically manages the
/// saved response handling for messageBoxes.
/// </summary>
public class MessageBoxExManager
{
#region Fields
private static Hashtable _messageBoxes = new Hashtable();
private static Hashtable _savedResponses = new Hashtable();
private static Hashtable _standardButtonsText = new Hashtable();
#endregion
#region Static ctor
static MessageBoxExManager()
{
try
{
Assembly current = typeof(MessageBoxExManager).Assembly;
string[] resources = current.GetManifestResourceNames();
ResourceManager rm = new ResourceManager("Utils.MessageBoxExLib.Resources.StandardButtonsText", typeof(MessageBoxExManager).Assembly);
_standardButtonsText[MessageBoxExButtons.Ok.ToString()] = rm.GetString("Ok");
_standardButtonsText[MessageBoxExButtons.Cancel.ToString()] = rm.GetString("Cancel");
_standardButtonsText[MessageBoxExButtons.Yes.ToString()] = rm.GetString("Yes");
_standardButtonsText[MessageBoxExButtons.No.ToString()] = rm.GetString("No");
_standardButtonsText[MessageBoxExButtons.Abort.ToString()] = rm.GetString("Abort");
_standardButtonsText[MessageBoxExButtons.Retry.ToString()] = rm.GetString("Retry");
_standardButtonsText[MessageBoxExButtons.Ignore.ToString()] = rm.GetString("Ignore");
}
catch(Exception ex)
{
System.Diagnostics.Debug.Assert(false, "Unable to load resources for MessageBoxEx", ex.ToString());
//Load default resources
_standardButtonsText[MessageBoxExButtons.Ok.ToString()] = "Ok";
_standardButtonsText[MessageBoxExButtons.Cancel.ToString()] = "Cancel";
_standardButtonsText[MessageBoxExButtons.Yes.ToString()] = "Yes";
_standardButtonsText[MessageBoxExButtons.No.ToString()] = "No";
_standardButtonsText[MessageBoxExButtons.Abort.ToString()] = "Abort";
_standardButtonsText[MessageBoxExButtons.Retry.ToString()] = "Retry";
_standardButtonsText[MessageBoxExButtons.Ignore.ToString()] = "Ignore";
}
}
#endregion
#region Methods
/// <summary>
/// Creates a new message box with the specified name. If null is specified
/// in the message name then the message box is not managed by the Manager and
/// will be disposed automatically after a call to Show()
/// </summary>
/// <param name="name">The name of the message box</param>
/// <returns>A new message box</returns>
public static MessageBoxEx CreateMessageBox(string name)
{
if(name != null && _messageBoxes.ContainsKey(name))
{
string err = string.Format("A MessageBox with the name {0} already exists.",name);
throw new ArgumentException(err,"name");
}
MessageBoxEx msgBox = new MessageBoxEx();
msgBox.Name = name;
if(msgBox.Name != null)
{
_messageBoxes[name] = msgBox;
}
return msgBox;
}
/// <summary>
/// Gets the message box with the specified name
/// </summary>
/// <param name="name">The name of the message box to retrieve</param>
/// <returns>The message box with the specified name or null if a message box
/// with that name does not exist</returns>
public static MessageBoxEx GetMessageBox(string name)
{
if(_messageBoxes.Contains(name))
{
return _messageBoxes[name] as MessageBoxEx;
}
else
{
return null;
}
}
/// <summary>
/// Deletes the message box with the specified name
/// </summary>
/// <param name="name">The name of the message box to delete</param>
public static void DeleteMessageBox(string name)
{
if(name == null)
return;
if(_messageBoxes.Contains(name))
{
MessageBoxEx msgBox = _messageBoxes[name] as MessageBoxEx;
msgBox.Dispose();
_messageBoxes.Remove(name);
}
}
public static void WriteSavedResponses(Stream stream)
{
throw new NotImplementedException("This feature has not yet been implemented");
}
public static void ReadSavedResponses(Stream stream)
{
throw new NotImplementedException("This feature has not yet been implemented");
}
/// <summary>
/// Reset the saved response for the message box with the specified name.
/// </summary>
/// <param name="messageBoxName">The name of the message box whose response is to be reset.</param>
public static void ResetSavedResponse(string messageBoxName)
{
if(messageBoxName == null)
return;
if(_savedResponses.ContainsKey(messageBoxName))
{
_savedResponses.Remove(messageBoxName);
}
}
/// <summary>
/// Resets the saved responses for all message boxes that are managed by the manager.
/// </summary>
public static void ResetAllSavedResponses()
{
_savedResponses.Clear();
}
#endregion
#region Internal Methods
/// <summary>
/// Set the saved response for the specified message box
/// </summary>
/// <param name="msgBox">The message box whose response is to be set</param>
/// <param name="response">The response to save for the message box</param>
internal static void SetSavedResponse(MessageBoxEx msgBox, string response)
{
if(msgBox.Name == null)
return;
_savedResponses[msgBox.Name] = response;
}
/// <summary>
/// Gets the saved response for the specified message box
/// </summary>
/// <param name="msgBox">The message box whose saved response is to be retrieved</param>
/// <returns>The saved response if exists, null otherwise</returns>
internal static string GetSavedResponse(MessageBoxEx msgBox)
{
string msgBoxName = msgBox.Name;
if(msgBoxName == null)
{
return null;
}
if(_savedResponses.ContainsKey(msgBoxName))
{
return _savedResponses[msgBox.Name].ToString();
}
else
{
return null;
}
}
/// <summary>
/// Returns the localized string for standard button texts like,
/// "Ok", "Cancel" etc.
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
internal static string GetLocalizedString(string key)
{
if(_standardButtonsText.ContainsKey(key))
{
return (string)_standardButtonsText[key];
}
else
{
return null;
}
}
#endregion
}
}

View File

@ -0,0 +1,19 @@
using System;
namespace Utils.MessageBoxExLib
{
/// <summary>
/// Standard MessageBoxEx results
/// </summary>
public struct MessageBoxExResult
{
public const string Ok = "Ok";
public const string Cancel = "Cancel";
public const string Yes = "Yes";
public const string No = "No";
public const string Abort = "Abort";
public const string Retry = "Retry";
public const string Ignore = "Ignore";
public const string Timeout = "Timeout";
}
}

View File

@ -0,0 +1,19 @@
Purpose
This library provides an advanced framework for message boxes.
Some salient features are -
1. Ability to associate text with buttons, thus you can specify a
text for each button that tells the user what will happen when the button
is pressed. This is currently shown as a simple tooltip.
2. Ability to specify an option that allows the user to always use the same response
for the specified messagebox.
3. Ability to save/load user preferences for various messageboxes. (Not implemented in this release)
4. Ability to customize buttons, icon, sounds.
5. Ability to specify a Timeout for the message box.
6. Standard button texts are localized based on current culture.

View File

@ -0,0 +1,63 @@
<?xml version="1.0" encoding="utf-8" ?>
<root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="ResMimeType">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="Version">
<value>1.0.0.0</value>
</resheader>
<resheader name="Reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="Writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Ok">
<value>O.K.</value>
</data>
<data name="Cancel">
<value>Löschen</value>
</data>
<data name="Yes">
<value>Ja</value>
</data>
<data name="No">
<value>Nein</value>
</data>
<data name="Abort">
<value>Abbruch</value>
</data>
<data name="Retry">
<value>Wiederholung</value>
</data>
<data name="Ignore">
<value>Ignorieren</value>
</data>
</root>

View File

@ -0,0 +1,63 @@
<?xml version="1.0" encoding="utf-8" ?>
<root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="ResMimeType">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="Version">
<value>1.0.0.0</value>
</resheader>
<resheader name="Reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="Writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Ok">
<value>Ok</value>
</data>
<data name="Cancel">
<value>Annuler</value>
</data>
<data name="Yes">
<value>Oui</value>
</data>
<data name="No">
<value>Non</value>
</data>
<data name="Abort">
<value>Arrêt</value>
</data>
<data name="Retry">
<value>Nouvelle</value>
</data>
<data name="Ignore">
<value>Ignorez</value>
</data>
</root>

View File

@ -0,0 +1,63 @@
<?xml version="1.0" encoding="utf-8" ?>
<root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="ResMimeType">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="Version">
<value>1.0.0.0</value>
</resheader>
<resheader name="Reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="Writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Ok">
<value>Ok</value>
</data>
<data name="Cancel">
<value>Cancel</value>
</data>
<data name="Yes">
<value>Yes</value>
</data>
<data name="No">
<value>No</value>
</data>
<data name="Abort">
<value>Abort</value>
</data>
<data name="Retry">
<value>Retry</value>
</data>
<data name="Ignore">
<value>Ignore</value>
</data>
</root>

View File

@ -0,0 +1,29 @@
using System;
namespace Utils.MessageBoxExLib
{
/// <summary>
/// Enumerates the kind of results that can be returned when a
/// message box times out
/// </summary>
public enum TimeoutResult
{
/// <summary>
/// On timeout the value associated with the default button is set as the result.
/// This is the default action on timeout.
/// </summary>
Default,
/// <summary>
/// On timeout the value associated with the cancel button is set as the result. If
/// the messagebox does not have a cancel button then the value associated with
/// the default button is set as the result.
/// </summary>
Cancel,
/// <summary>
/// On timeout MessageBoxExResult.Timeout is set as the result.
/// </summary>
Timeout
}
}

View File

@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.0", FrameworkDisplayName = ".NET Framework 4")]

View File

@ -0,0 +1 @@
dff0f48125b8689960d493a17441e9a6218a8f55

View File

@ -0,0 +1,15 @@
H:\Programmieren\Git-Repository\VisualStudio\2017\_TEST\Test_CustomerMessageBox\Daten\MessageBoxExDemo\MessageBoxExLib\bin\Debug\MessageBoxExLib.dll
H:\Programmieren\Git-Repository\VisualStudio\2017\_TEST\Test_CustomerMessageBox\Daten\MessageBoxExDemo\MessageBoxExLib\bin\Debug\MessageBoxExLib.pdb
H:\Programmieren\Git-Repository\VisualStudio\2017\_TEST\Test_CustomerMessageBox\Daten\MessageBoxExDemo\MessageBoxExLib\bin\Debug\de\MessageBoxExLib.resources.dll
H:\Programmieren\Git-Repository\VisualStudio\2017\_TEST\Test_CustomerMessageBox\Daten\MessageBoxExDemo\MessageBoxExLib\bin\Debug\fr\MessageBoxExLib.resources.dll
H:\Programmieren\Git-Repository\VisualStudio\2017\_TEST\Test_CustomerMessageBox\Daten\MessageBoxExDemo\MessageBoxExLib\obj\Debug\MessageBoxExLib.csprojAssemblyReference.cache
H:\Programmieren\Git-Repository\VisualStudio\2017\_TEST\Test_CustomerMessageBox\Daten\MessageBoxExDemo\MessageBoxExLib\obj\Debug\Utils.MessageBoxExLib.MessageBoxExForm.resources
H:\Programmieren\Git-Repository\VisualStudio\2017\_TEST\Test_CustomerMessageBox\Daten\MessageBoxExDemo\MessageBoxExLib\obj\Debug\Utils.MessageBoxExLib.Resources.StandardButtonsText.resources
H:\Programmieren\Git-Repository\VisualStudio\2017\_TEST\Test_CustomerMessageBox\Daten\MessageBoxExDemo\MessageBoxExLib\obj\Debug\Utils.MessageBoxExLib.Resources.StandardButtonsText.de.resources
H:\Programmieren\Git-Repository\VisualStudio\2017\_TEST\Test_CustomerMessageBox\Daten\MessageBoxExDemo\MessageBoxExLib\obj\Debug\Utils.MessageBoxExLib.Resources.StandardButtonsText.fr.resources
H:\Programmieren\Git-Repository\VisualStudio\2017\_TEST\Test_CustomerMessageBox\Daten\MessageBoxExDemo\MessageBoxExLib\obj\Debug\MessageBoxExLib.csproj.GenerateResource.cache
H:\Programmieren\Git-Repository\VisualStudio\2017\_TEST\Test_CustomerMessageBox\Daten\MessageBoxExDemo\MessageBoxExLib\obj\Debug\MessageBoxExLib.csproj.CoreCompileInputs.cache
H:\Programmieren\Git-Repository\VisualStudio\2017\_TEST\Test_CustomerMessageBox\Daten\MessageBoxExDemo\MessageBoxExLib\obj\Debug\de\MessageBoxExLib.resources.dll
H:\Programmieren\Git-Repository\VisualStudio\2017\_TEST\Test_CustomerMessageBox\Daten\MessageBoxExDemo\MessageBoxExLib\obj\Debug\fr\MessageBoxExLib.resources.dll
H:\Programmieren\Git-Repository\VisualStudio\2017\_TEST\Test_CustomerMessageBox\Daten\MessageBoxExDemo\MessageBoxExLib\obj\Debug\MessageBoxExLib.dll
H:\Programmieren\Git-Repository\VisualStudio\2017\_TEST\Test_CustomerMessageBox\Daten\MessageBoxExDemo\MessageBoxExLib\obj\Debug\MessageBoxExLib.pdb

Some files were not shown because too many files have changed in this diff Show More