Commit 239ab7f0 authored by Marius Lindvall's avatar Marius Lindvall

Migration from code.varden.info

Migrated from https://code.varden.info/repo/Multiwatch/
parent 0c6786a4
The MIT License (MIT)
Copyright (c) 2015 Marius Lindvall
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
# Multiwatch
## What is this?
Multiwatch is a multi-instance stopwatch application for Windows.
## Features
* Start and stop multiple stopwatches side by side
* Alphabetically sort participant names
* Start and stop multiple timers at once
## How to use
Launch the application. You will be prompted to enter the names of the participants. If you wish, you can have the application sort the names for you. When you're done, press Continue to get to the timer interface. You can start/stop each stopwatch individually from here. When a stopwatch is stopped, the respective participant will be ranked compared to others in the list.
In order to start and stop multiple timers at once, right click the Start/Stop button to highlight it. When you press a Start/Stop button next, all highlighted buttons will be pressed (including the one you pressed at last).
## Screenshots
![Multiwatch in action](https://varden.info/image.php?sid=18&img=multiwatch-ui.png)
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class Form1
Inherits System.Windows.Forms.Form
'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(Form1))
Me.TextBox1 = New System.Windows.Forms.TextBox()
Me.Label1 = New System.Windows.Forms.Label()
Me.Button1 = New System.Windows.Forms.Button()
Me.CheckBox1 = New System.Windows.Forms.CheckBox()
Me.CheckBox2 = New System.Windows.Forms.CheckBox()
Me.SuspendLayout()
'
'TextBox1
'
Me.TextBox1.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.TextBox1.Location = New System.Drawing.Point(15, 25)
Me.TextBox1.Multiline = True
Me.TextBox1.Name = "TextBox1"
Me.TextBox1.Size = New System.Drawing.Size(376, 204)
Me.TextBox1.TabIndex = 0
'
'Label1
'
Me.Label1.AutoSize = True
Me.Label1.Location = New System.Drawing.Point(12, 9)
Me.Label1.Name = "Label1"
Me.Label1.Size = New System.Drawing.Size(199, 13)
Me.Label1.TabIndex = 1
Me.Label1.Text = "Enter names of participants, one per line:"
'
'Button1
'
Me.Button1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.Button1.Location = New System.Drawing.Point(316, 235)
Me.Button1.Name = "Button1"
Me.Button1.Size = New System.Drawing.Size(75, 23)
Me.Button1.TabIndex = 2
Me.Button1.Text = "Continue"
Me.Button1.UseVisualStyleBackColor = True
'
'CheckBox1
'
Me.CheckBox1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.CheckBox1.AutoSize = True
Me.CheckBox1.Location = New System.Drawing.Point(198, 239)
Me.CheckBox1.Name = "CheckBox1"
Me.CheckBox1.Size = New System.Drawing.Size(112, 17)
Me.CheckBox1.TabIndex = 3
Me.CheckBox1.Text = "Sort alphabetically"
Me.CheckBox1.UseVisualStyleBackColor = True
'
'CheckBox2
'
Me.CheckBox2.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.CheckBox2.AutoSize = True
Me.CheckBox2.Location = New System.Drawing.Point(91, 239)
Me.CheckBox2.Name = "CheckBox2"
Me.CheckBox2.Size = New System.Drawing.Size(101, 17)
Me.CheckBox2.TabIndex = 4
Me.CheckBox2.Text = "Auto sort results"
Me.CheckBox2.UseVisualStyleBackColor = True
'
'Form1
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(403, 270)
Me.Controls.Add(Me.CheckBox2)
Me.Controls.Add(Me.CheckBox1)
Me.Controls.Add(Me.Button1)
Me.Controls.Add(Me.Label1)
Me.Controls.Add(Me.TextBox1)
Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
Me.Name = "Form1"
Me.Text = "Multiwatch"
Me.ResumeLayout(False)
Me.PerformLayout()
End Sub
Friend WithEvents TextBox1 As System.Windows.Forms.TextBox
Friend WithEvents Label1 As System.Windows.Forms.Label
Friend WithEvents Button1 As System.Windows.Forms.Button
Friend WithEvents CheckBox1 As System.Windows.Forms.CheckBox
Friend WithEvents CheckBox2 As System.Windows.Forms.CheckBox
End Class
This diff is collapsed.
Public Class Form1
Public Names As String()
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Me.Hide()
Names = Me.TextBox1.Text.Split(vbCrLf)
For i As Integer = 0 To Names.Length - 1
Names(i) = Names(i).Replace(vbCr, "").Replace(vbLf, "")
Next
If CheckBox1.Checked Then
Array.Sort(Names)
End If
Dim f As New Form2()
f.ShowDialog()
Me.Close()
End Sub
End Class
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class Form2
Inherits System.Windows.Forms.Form
'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(Form2))
Me.Label1 = New System.Windows.Forms.Label()
Me.Panel1 = New System.Windows.Forms.Panel()
Me.Panel2 = New System.Windows.Forms.Panel()
Me.Panel3 = New System.Windows.Forms.Panel()
Me.Panel2.SuspendLayout()
Me.SuspendLayout()
'
'Label1
'
Me.Label1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.Label1.Font = New System.Drawing.Font("Lucida Fax", 27.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.Label1.ForeColor = System.Drawing.Color.Lime
Me.Label1.Location = New System.Drawing.Point(12, 9)
Me.Label1.Name = "Label1"
Me.Label1.Size = New System.Drawing.Size(736, 79)
Me.Label1.TabIndex = 2
Me.Label1.Text = "Multiwatch"
Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
'
'Panel1
'
Me.Panel1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.Panel1.BackColor = System.Drawing.Color.Lime
Me.Panel1.Location = New System.Drawing.Point(0, 94)
Me.Panel1.Name = "Panel1"
Me.Panel1.Size = New System.Drawing.Size(760, 1)
Me.Panel1.TabIndex = 3
'
'Panel2
'
Me.Panel2.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.Panel2.AutoScroll = True
Me.Panel2.Controls.Add(Me.Panel3)
Me.Panel2.Location = New System.Drawing.Point(0, 95)
Me.Panel2.Name = "Panel2"
Me.Panel2.Size = New System.Drawing.Size(760, 486)
Me.Panel2.TabIndex = 4
'
'Panel3
'
Me.Panel3.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.Panel3.Location = New System.Drawing.Point(0, 0)
Me.Panel3.Name = "Panel3"
Me.Panel3.Size = New System.Drawing.Size(760, 486)
Me.Panel3.TabIndex = 0
'
'Form2
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.BackColor = System.Drawing.Color.Black
Me.ClientSize = New System.Drawing.Size(760, 580)
Me.Controls.Add(Me.Panel2)
Me.Controls.Add(Me.Panel1)
Me.Controls.Add(Me.Label1)
Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
Me.Name = "Form2"
Me.Text = "Multiwatch"
Me.Panel2.ResumeLayout(False)
Me.ResumeLayout(False)
End Sub
Friend WithEvents Label1 As System.Windows.Forms.Label
Friend WithEvents Panel1 As System.Windows.Forms.Panel
Friend WithEvents Panel2 As System.Windows.Forms.Panel
Friend WithEvents Panel3 As System.Windows.Forms.Panel
End Class
This diff is collapsed.
Public Class Form2
Private Times As DateTime()
Private Results As Long()
Private RankLabels As Label()
Private TimeLabels As Label()
Private NameLabels As Label()
Private TimeButtons As Button()
Private Users As String()
Private UIUpdateThread As Threading.Thread
Private ShuttingDown As Boolean = False
Private DataStartY As Integer = 20
Private Starts As New ArrayList()
Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.BackColor = Color.FromArgb(15, 15, 15)
Users = Form1.Names
Dim fitHeight As Integer = (Users.Length * 40) + 167
If fitHeight > 600 Then
Me.Height = 600
Else
Me.Height = fitHeight
End If
Dim y As Integer = DataStartY
Me.Times = New DateTime(Users.Length - 1) {}
Me.Results = New Long(Users.Length - 1) {}
Me.NameLabels = New Label(Users.Length - 1) {}
Me.TimeButtons = New Button(Users.Length - 1) {}
Me.RankLabels = New Label(Users.Length - 1) {}
Me.TimeLabels = New Label(Users.Length - 1) {}
For i As Integer = 0 To Users.Length - 1
Dim label As New Label
label.Name = "LabelName" & i
label.Text = Users(i)
label.Location = New Point(10, y)
label.Font = New Font("Lucida Console", 14)
label.TextAlign = ContentAlignment.MiddleLeft
label.Size = New Size(280, 30)
label.ForeColor = Color.White
label.Anchor = AnchorStyles.Top + AnchorStyles.Left + AnchorStyles.Right
Dim btn As New Button()
btn.Text = "Start"
btn.Location = New Point(322, y)
btn.Font = New Font("Arial", 14)
btn.Size = New Size(100, 30)
btn.Tag = i
btn.BackColor = Color.FromArgb(90, 90, 90)
btn.Anchor = AnchorStyles.Top + AnchorStyles.Right
AddHandler btn.Click, AddressOf TimerButtonClicked
AddHandler btn.MouseUp, AddressOf TimerButtonRightClicked
Dim ranklbl As New Label
ranklbl.Name = "LabelRank" & i
ranklbl.Location = New Point(432, y)
ranklbl.Font = New Font("Lucida Console", 14)
ranklbl.TextAlign = ContentAlignment.MiddleRight
ranklbl.Size = New Size(50, 30)
ranklbl.ForeColor = Color.White
ranklbl.Anchor = AnchorStyles.Top + AnchorStyles.Right
Dim timelbl As New Label
timelbl.Name = "LabelTime" & i
timelbl.Location = New Point(532, y)
timelbl.Font = New Font("Lucida Console", 14)
timelbl.TextAlign = ContentAlignment.MiddleRight
timelbl.Size = New Size(200, 30)
timelbl.ForeColor = Color.Green
timelbl.Anchor = AnchorStyles.Top + AnchorStyles.Right
Me.NameLabels(i) = label
Me.TimeButtons(i) = btn
Me.RankLabels(i) = ranklbl
Me.TimeLabels(i) = timelbl
Me.Panel3.Controls.Add(label)
Me.Panel3.Controls.Add(btn)
Me.Panel3.Controls.Add(ranklbl)
Me.Panel3.Controls.Add(timelbl)
y += 40
UIUpdateThread = New Threading.Thread(AddressOf KeepStatsAlive)
UIUpdateThread.IsBackground = True
UIUpdateThread.Start()
Next
Panel3.Size = New Size(Panel3.Width, y + 10)
End Sub
Private Sub KeepStatsAlive()
While Not ShuttingDown
Dim now As DateTime = DateTime.UtcNow
For i As Integer = 0 To Times.Length - 1
Dim index As Integer = i
If Times(i) = Nothing Or Not Results(i) = Nothing Then Continue For
TimeLabels(i).Invoke(New Action(Sub()
If Results(index) = Nothing Then TimeLabels(index).Text = (Times(index) - now).ToString("h\:mm\:ss\.fff")
End Sub))
Next
Threading.Thread.Sleep(16)
End While
End Sub
Private Sub TimerButtonClicked(sender As Object, e As EventArgs)
Dim btn1 As Button = DirectCast(sender, Button)
Dim index1 As Integer = CInt(btn1.Tag)
If Not Me.Starts.Contains(index1) Then
Me.Starts.Add(index1)
End If
For Each idx As Object In Me.Starts
Dim index As Integer = CInt(idx)
Dim btn As Button = Me.TimeButtons(index)
If btn.Text.Equals("Start") Then
Times(index) = DateTime.UtcNow
Results(index) = Nothing
TimeLabels(index).ForeColor = Color.Lime
RankLabels(index).Text = ""
btn.Text = "Stop"
btn.BackColor = Color.Lime
Else
Results(index) = (Times(index) - DateTime.UtcNow).TotalMilliseconds
Threading.Thread.Sleep(8)
Dim ts As TimeSpan = TimeSpan.FromMilliseconds(Results(index))
btn.Text = "Start"
btn.BackColor = Color.Green
Me.TimeLabels(index).Text = ts.ToString("h\:mm\:ss\.fff")
Me.TimeLabels(index).ForeColor = Color.Green
End If
Next
For i As Integer = 0 To Results.Length - 1
Dim after As Integer = 1
For j As Integer = 0 To Results.Length - 1
If i = j OrElse Results(j) = Nothing Then Continue For
If Results(i) < Results(j) Then
after += 1
End If
Next
If Not Me.Results(i) = Nothing Then Me.RankLabels(i).Text = after
Next
Me.Starts.Clear()
If Form1.CheckBox2.Checked Then
Dim sortArray As Integer() = New Integer(Results.Length - 1) {}
Dim last As Integer = sortArray.Length - 1
For i As Integer = 0 To Results.Length - 1
If Results(i) = Nothing Then
sortArray(last) = i
last -= 1
Continue For
End If
Dim after As Integer = 0
For j As Integer = 0 To Results.Length - 1
If i = j Or Results(j) = Nothing Then Continue For
If Results(i) < Results(j) Then
after += 1
End If
Next
While Not sortArray(after) = Nothing
after += 1
End While
sortArray(after) = i
Next
For i As Integer = 0 To sortArray.Length - 1
Dim y As Integer = (40 * i) + DataStartY
If i > last Then
y = (40 * (sortArray.Length - i + last)) + DataStartY
End If
NameLabels(sortArray(i)).Location = New Point(NameLabels(sortArray(i)).Location.X, y)
TimeButtons(sortArray(i)).Location = New Point(TimeButtons(sortArray(i)).Location.X, y)
RankLabels(sortArray(i)).Location = New Point(RankLabels(sortArray(i)).Location.X, y)
TimeLabels(sortArray(i)).Location = New Point(TimeLabels(sortArray(i)).Location.X, y)
Next
End If
End Sub
Private Sub TimerButtonRightClicked(sender As Object, e As MouseEventArgs)
Dim btn As Button = DirectCast(sender, Button)
Dim index As Integer = CInt(btn.Tag)
If e.Button = Windows.Forms.MouseButtons.Right Then
If btn.Text.Equals("Start") AndAlso Times(CInt(btn.Tag)) = Nothing Then ' Never started
If Me.Starts.Contains(btn.Tag) Then
Me.Starts.Remove(btn.Tag)
btn.BackColor = Color.FromArgb(90, 90, 90)
Else
Me.Starts.Add(btn.Tag)
btn.BackColor = Color.FromArgb(0, 90, 180)
End If
ElseIf btn.Text.Equals("Start") Then ' Started and finished
If Me.Starts.Contains(btn.Tag) Then
Me.Starts.Remove(btn.Tag)
btn.BackColor = Color.Green
TimeLabels(index).ForeColor = Color.Green
Else
Me.Starts.Add(btn.Tag)
btn.BackColor = Color.FromArgb(0, 90, 180)
TimeLabels(index).ForeColor = Color.FromArgb(0, 90, 180)
End If
ElseIf btn.Text.Equals("Stop") Then 'Running
If Me.Starts.Contains(btn.Tag) Then
Me.Starts.Remove(btn.Tag)
btn.BackColor = Color.Lime
TimeLabels(index).ForeColor = Color.Lime
Else
Me.Starts.Add(btn.Tag)
btn.BackColor = Color.Cyan
TimeLabels(index).ForeColor = Color.Cyan
End If
End If
End If
End Sub
Private Sub Form2_FormClosed(sender As Object, e As FormClosedEventArgs) Handles MyBase.FormClosed
ShuttingDown = True
Application.Exit()
End Sub
End Class
\ No newline at end of file
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:4.0.30319.34014
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Namespace My
'NOTE: This file is auto-generated; do not modify it directly. To make changes,
' or if you encounter build errors in this file, go to the Project Designer
' (go to Project Properties or double-click the My Project node in
' Solution Explorer), and make changes on the Application tab.
'
Partial Friend Class MyApplication
<Global.System.Diagnostics.DebuggerStepThroughAttribute()> _
Public Sub New()
MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows)
Me.IsSingleInstance = false
Me.EnableVisualStyles = false
Me.SaveMySettingsOnExit = true
Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses
End Sub
<Global.System.Diagnostics.DebuggerStepThroughAttribute()> _
Protected Overrides Sub OnCreateMainForm()
Me.MainForm = Global.Multi_Timer.Form1
End Sub
End Class
End Namespace
<?xml version="1.0" encoding="utf-8"?>
<MyApplicationData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<MySubMain>true</MySubMain>
<MainForm>Form1</MainForm>
<SingleInstance>false</SingleInstance>
<ShutdownMode>0</ShutdownMode>
<EnableVisualStyles>false</EnableVisualStyles>
<AuthenticationMode>0</AuthenticationMode>
<SaveMySettingsOnExit>true</SaveMySettingsOnExit>
</MyApplicationData>
\ No newline at end of file
Imports System
Imports System.Reflection
Imports System.Runtime.InteropServices
' 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.
' Review the values of the assembly attributes
<Assembly: AssemblyTitle("Multiwatch")>
<Assembly: AssemblyDescription("Stopwatch with multiple simultaneous instances")>
<Assembly: AssemblyCompany("Varden Development")>
<Assembly: AssemblyProduct("Multiwatch")>
<Assembly: AssemblyCopyright("Copyright © Varden Development 2015")>
<Assembly: AssemblyTrademark("")>
<Assembly: ComVisible(False)>
'The following GUID is for the ID of the typelib if this project is exposed to COM
<Assembly: Guid("dbb713f7-9ce7-4e29-8812-b8ffb8148a70")>
' 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 Build and Revision Numbers
' by using the '*' as shown below:
' <Assembly: AssemblyVersion("1.0.*")>
<Assembly: AssemblyVersion("1.0.0.0")>
<Assembly: AssemblyFileVersion("1.0.0.0")>
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:4.0.30319.34014
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Imports System
Namespace My.Resources
'This class was auto-generated by the StronglyTypedResourceBuilder
'class via a tool like ResGen or Visual Studio.
'To add or remove a member, edit your .ResX file then rerun ResGen
'with the /str option, or rebuild your VS project.
'''<summary>
''' A strongly-typed resource class, for looking up localized strings, etc.
'''</summary>
<Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0"), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.Microsoft.VisualBasic.HideModuleNameAttribute()> _
Friend Module Resources
Private resourceMan As Global.System.Resources.ResourceManager
Private resourceCulture As Global.System.Globalization.CultureInfo
'''<summary>
''' Returns the cached ResourceManager instance used by this class.
'''</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager
Get
If Object.ReferenceEquals(resourceMan, Nothing) Then
Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Multi_Timer.Resources", GetType(Resources).Assembly)
resourceMan = temp
End If
Return resourceMan
End Get
End Property
'''<summary>
''' Overrides the current thread's CurrentUICulture property for all
''' resource lookups using this strongly typed resource class.
'''</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend Property Culture() As Global.System.Globalization.CultureInfo
Get
Return resourceCulture
End Get
Set
resourceCulture = value
End Set
End Property
End Module
End Namespace
<?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