gpt4 book ai didi

c# - C# Windows 窗体的装饰器

转载 作者:行者123 更新时间:2023-11-30 14:19:46 26 4
gpt4 key购买 nike

我的 WinForms 应用程序中有一个 Canvas (面板控件),用户可以在其中拖动文本框、标签等内容。但我想让他们更容易更精确地对齐对象。我已经读过它并且 Adorners 似乎是要走的路?但是,显然它只适用于 WPF。不幸的是,WPF 不适合我。

我想要完成的是,每当用户在 Canvas 中四处拖动对象时,都会弹出线条...它们在 Windows 窗体设计器 View 中的工作方式。

如果有任何帮助,我将不胜感激。

谢谢。

最佳答案

谢谢大家的回答。


我已经想出了自己的解决方案。代码在下面。目前还没有“台词”,但总有一天我会解决的...

Label l = (Label)sender;
foreach (Control control in Canvas.Controls)
{
if (l.Location.X > control.Location.X + control.Size.Width && l.Location.X < control.Location.X + control.Size.Width + 5)
l.Location = new Point(control.Location.X + control.Size.Width + 5, l.Location.Y);
else if (l.Location.X < control.Location.X - l.Size.Width && l.Location.X > control.Location.X - l.Size.Width - 5)
l.Location = new Point(control.Location.X - l.Size.Width - 5, l.Location.Y);
else if (l.Location.Y > control.Location.Y + control.Size.Height && l.Location.Y < control.Location.Y + control.Size.Height + 5)
l.Location = new Point(l.Location.X, control.Location.Y + control.Size.Height + 5);
else if (l.Location.Y < control.Location.Y - control.Size.Height && l.Location.Y > control.Location.Y - control.Size.Height - 5)
l.Location = new Point(l.Location.X, l.Location.Y - 5);

this.Update();
}

上述代码必须放在 Control_MouseMove 事件中,当然,您仍然需要自己的实际移动控件的代码。

上面的代码会将您拖动的控件捕捉到最近控件的右侧、左侧、顶部或底部 5 个像素。

关于c# - C# Windows 窗体的装饰器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2247648/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com