Skip to content

Instantly share code, notes, and snippets.

@KOZ60
Last active June 9, 2024 10:32
Show Gist options
  • Save KOZ60/007432b7856a3238878b2cd83b0c10ae to your computer and use it in GitHub Desktop.
Save KOZ60/007432b7856a3238878b2cd83b0c10ae to your computer and use it in GitHub Desktop.
NativeWindowBase
using System;
using System.Windows.Forms;
public class NativeWindowBase : NativeWindow, IDisposable
{
private bool isDisposed;
private readonly Control owner;
public NativeWindowBase(Control owner) {
this.owner = owner;
if (owner.IsHandleCreated) {
AssignHandle(owner.Handle);
}
owner.HandleCreated += Owner_HandleCreated;
owner.HandleDestroyed += Owner_HandleDestroyed;
}
private void Owner_HandleCreated(object sender, EventArgs e) {
AssignHandle(owner.Handle);
}
private void Owner_HandleDestroyed(object sender, EventArgs e) {
ReleaseHandle();
}
public Control Owner { get { return owner; } }
public bool IsDisposed { get { return isDisposed; } }
private void DisposeCallder(bool disposing) {
if (!isDisposed) {
isDisposed = true;
owner.HandleCreated -= Owner_HandleCreated;
owner.HandleDestroyed -= Owner_HandleDestroyed;
ReleaseHandle();
Dispose(disposing);
}
}
protected virtual void Dispose(bool disposing) { }
public void Dispose() {
DisposeCallder(true);
GC.SuppressFinalize(this);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment