This commit is contained in:
2022-12-02 10:04:46 +01:00
3 changed files with 72 additions and 9 deletions

View File

@@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Pilz.Cryptography
{
public interface IUniquieID
{
bool HasID { get; }
string ID { get; }
void GenerateIfNull();
void Generate();
bool Equals(object obj);
}
}

View File

@@ -9,7 +9,7 @@ using System.Threading.Tasks;
namespace Pilz.Cryptography namespace Pilz.Cryptography
{ {
public class UniquieID<TargetType> public class UniquieID<TargetType> : IUniquieID
{ {
private static int currentSimpleID = 0; private static int currentSimpleID = 0;
@@ -90,9 +90,36 @@ namespace Pilz.Cryptography
public override bool Equals(object obj) public override bool Equals(object obj)
{ {
var res = false;
var iD = obj as UniquieID<TargetType>; var iD = obj as UniquieID<TargetType>;
return iD != null &&
_iD == iD._iD; if (iD is object)
{
if (ReferenceEquals(res, iD))
res = true;
else
{
var leftHasID = iD.HasID;
var rightHasID = HasID;
if (!leftHasID && iD.GenerateOnGet)
{
iD.Generate();
leftHasID = iD.HasID;
}
if (!rightHasID && GenerateOnGet)
{
Generate();
rightHasID = HasID;
}
if (leftHasID && rightHasID)
res = _iD.Equals(iD._iD);
}
}
return res;
} }
public override int GetHashCode() public override int GetHashCode()
@@ -104,7 +131,7 @@ namespace Pilz.Cryptography
public static implicit operator UniquieID<TargetType>(string id) => new UniquieID<TargetType>() { ID = id }; public static implicit operator UniquieID<TargetType>(string id) => new UniquieID<TargetType>() { ID = id };
public static implicit operator UniquieID<TargetType>(int id) => new UniquieID<TargetType>() { ID = Convert.ToString(id) }; public static implicit operator UniquieID<TargetType>(int id) => new UniquieID<TargetType>() { ID = Convert.ToString(id) };
public static bool operator ==(UniquieID<TargetType> left, UniquieID<TargetType> right) => left.ID == right.ID; public static bool operator ==(UniquieID<TargetType> left, UniquieID<TargetType> right) => left.ID.Equals(right.ID);
public static bool operator !=(UniquieID<TargetType> left, UniquieID<TargetType> right) => left.ID != right.ID; public static bool operator !=(UniquieID<TargetType> left, UniquieID<TargetType> right) => !left.ID.Equals(right.ID);
} }
} }

View File

@@ -1,4 +1,4 @@
Imports System.Runtime.CompilerServices Imports System.Runtime.CompilerServices
Imports System.Windows.Forms Imports System.Windows.Forms
Namespace Utils Namespace Utils
@@ -6,10 +6,19 @@ Namespace Utils
Public Module DrawingControl Public Module DrawingControl
Private Const WM_SETREDRAW = 11 Private Const WM_SETREDRAW = 11
Private ReadOnly dicSuspendCount As New Dictionary(Of IntPtr, Integer)
<Extension> <Extension>
Public Sub SuspendDrawing(control As Control) Public Sub SuspendDrawing(control As Control)
SendMessage(control.Handle, WM_SETREDRAW, False, 0) If Not dicSuspendCount.ContainsKey(control.Handle) Then
dicSuspendCount.Add(control.Handle, 1)
Else
dicSuspendCount(control.Handle) += 1
End If
If dicSuspendCount(control.Handle) = 1 Then
SendMessage(control.Handle, WM_SETREDRAW, False, 0)
End If
End Sub End Sub
<Extension> <Extension>
@@ -19,8 +28,19 @@ Namespace Utils
<Extension> <Extension>
Public Sub ResumeDrawing(control As Control, redraw As Boolean) Public Sub ResumeDrawing(control As Control, redraw As Boolean)
SendMessage(control.Handle, WM_SETREDRAW, True, 0) Dim doRedraw As Boolean = True
If redraw Then control.Refresh()
If dicSuspendCount.ContainsKey(control.Handle) Then
dicSuspendCount(control.Handle) -= 1
If dicSuspendCount(control.Handle) >= 1 Then
doRedraw = False
End If
End If
If doRedraw Then
SendMessage(control.Handle, WM_SETREDRAW, True, 0)
If redraw Then control.Refresh()
End If
End Sub End Sub
End Module End Module