Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.ComponentModel;
- using System.Drawing;
- using System.Runtime.InteropServices;
- using System.Windows.Forms;
- namespace Ellipse_Control
- {
- internal class EllipseTool : Component
- {
- [DllImport("Gdi32.dll", SetLastError = true)]
- private static extern IntPtr CreateRoundRectRgn(
- int nLeftRect,
- int nTopRect,
- int nRightRect,
- int nBottomRect,
- int nWidthEllipse,
- int nHeightEllipse);
- private Control _targetControl;
- private int _cornerRadius = 30;
- private readonly EventHandler _sizeChangedHandler;
- public EllipseTool()
- {
- _sizeChangedHandler = new EventHandler(OnControlSizeChanged);
- }
- [Category("Appearance")]
- public Control TargetControl
- {
- get => _targetControl;
- set
- {
- if (_targetControl != null)
- {
- _targetControl.SizeChanged -= _sizeChangedHandler;
- }
- _targetControl = value;
- if (_targetControl != null)
- {
- _targetControl.SizeChanged += _sizeChangedHandler;
- UpdateRegion();
- }
- }
- }
- [Category("Appearance")]
- public int CornerRadius
- {
- get => _cornerRadius;
- set
- {
- _cornerRadius = value;
- UpdateRegion();
- }
- }
- private void OnControlSizeChanged(object sender, EventArgs e)
- {
- UpdateRegion();
- }
- private void UpdateRegion()
- {
- if (_targetControl == null || _targetControl.IsDisposed) return;
- IntPtr regionHandle = CreateRoundRectRgn(
- 0, 0,
- _targetControl.Width + 1,
- _targetControl.Height + 1,
- _cornerRadius,
- _cornerRadius);
- _targetControl.Region = Region.FromHrgn(regionHandle);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement