123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- using System;
- using System.Drawing;
- using System.Windows.Forms;
- namespace FastReport.FastQueryBuilder
- {
- internal class FqbCheckedListBox : CheckedListBox
- {
- private Rectangle dragBoxFromMouseDown;
- public event EventHandler VertScrollValueChanged;
- protected override void OnMouseDown(MouseEventArgs e)
- {
- base.OnMouseDown(e);
- if (SelectedItem != null)
- {
- Size dragSize = SystemInformation.DragSize;
- dragBoxFromMouseDown = new Rectangle(new Point(e.X - (dragSize.Width / 2),
- e.Y - (dragSize.Height / 2)), dragSize);
- }
- else
- dragBoxFromMouseDown = Rectangle.Empty;
- }
- protected override void OnMouseMove(MouseEventArgs e)
- {
- base.OnMouseMove(e);
- if ((e.Button & MouseButtons.Left) == MouseButtons.Left)
- {
- if ((dragBoxFromMouseDown != Rectangle.Empty) &&
- !dragBoxFromMouseDown.Contains(e.X, e.Y))
- {
- DoDragDrop(SelectedItem, DragDropEffects.Copy);
- }
- }
- }
- protected override void OnMouseUp(MouseEventArgs e)
- {
- base.OnMouseUp(e);
- dragBoxFromMouseDown = Rectangle.Empty;
- }
- #if WPF
- private System.Windows.Controls.ScrollViewer scrollViewer;
- internal Rectangle GetItemRectangle(int pos)
- {
- if (scrollViewer != null)
- pos -= (int)scrollViewer.ContentVerticalOffset;
- return new Rectangle(0, (pos) * ItemHeight, Width, ItemHeight);
- }
- public FqbCheckedListBox()
- {
- control.Loaded += (s, e) =>
- {
- scrollViewer = control.GetChildOfType<System.Windows.Controls.ScrollViewer>();
- scrollViewer.ScrollChanged += (s, e) => VertScrollValueChanged?.Invoke(this, EventArgs.Empty);
- };
- }
- #endif
- #if AVALONIA
- private Avalonia.Controls.ScrollViewer scrollViewer;
- internal Rectangle GetItemRectangle(int pos)
- {
- int y = pos * ItemHeight;
- if (scrollViewer != null)
- y -= (int)(scrollViewer.Offset.Y / DpiScale);
- return new Rectangle(0, y, Width, ItemHeight);
- }
- public FqbCheckedListBox()
- {
- control.Loaded += (s, e) =>
- {
- scrollViewer = Avalonia.VisualTree.VisualExtensions.FindDescendantOfType<Avalonia.Controls.ScrollViewer>(control);
- scrollViewer.ScrollChanged += (s, e) => VertScrollValueChanged?.Invoke(this, EventArgs.Empty);
- };
- }
- #endif
- #if !MONO
- private const int WM_VSCROLL = 0x115;
- protected override void WndProc(ref Message m)
- {
- base.WndProc(ref m);
- if (m.Msg == WM_VSCROLL)
- {
- VertScrollValueChanged?.Invoke(this, EventArgs.Empty);
- }
- }
- #endif
- }
- }
|