C# 如何在Windows窗体应用程序中选择覆盖其他控件的控件
我在运行时画了一条线,当用户点击两个按钮时,它们基本上是链接在一起的 我的代码类似于:C# 如何在Windows窗体应用程序中选择覆盖其他控件的控件,c#,overlay,C#,Overlay,我在运行时画了一条线,当用户点击两个按钮时,它们基本上是链接在一起的 我的代码类似于: Line l = new Line(); l.Size = new Size(#distance from button1 to button2 as width#) l.Location = button1.Location 问题是线条之间的按钮和其他控件与线条重叠,因此只有当线条之间没有任何其他控件时才可见 如何在其他控件的顶部划线?您可以使用将行(或任何控件)按z顺序向前移动 l.BringToFro
Line l = new Line();
l.Size = new Size(#distance from button1 to button2 as width#)
l.Location = button1.Location
问题是线条之间的按钮和其他控件与线条重叠,因此只有当线条之间没有任何其他控件时才可见
如何在其他控件的顶部划线?您可以使用将行
(或任何控件
)按z顺序向前移动
l.BringToFront();
您可以使用将行
(或任何控件
)按z顺序向前移动
l.BringToFront();
使用
为该行创建一个事件处理程序,如下所示:
public void Line_LostFocus(object sender, EventArgs e)
{
Line L = (Line) sender;
L.focus();
}
并使用以下方式将其连接:
l.LostFocus += Line_LostFocus;
不过,我不得不说,这似乎是一种奇怪的做事方式。重新考虑是否应该创建自定义控件而不是在现有控件上绘制。这似乎有点傻
编辑
由于线型控件不支持焦点,请改为执行以下操作:
public void Line_ToFront(object sender, EventArgs e)
{
Line L = (Line) sender;
L.BringToFront();
}
并附上:
Form1.Paint += Line_ToFront;
如果这不起作用,那么遍历表单上的每个控件,并将linetoffront添加到绘制处理程序中。不过,我仍然建议寻找其他方法。这看起来太草率了。使用
为该行创建一个事件处理程序,如下所示:
public void Line_LostFocus(object sender, EventArgs e)
{
Line L = (Line) sender;
L.focus();
}
并使用以下方式将其连接:
l.LostFocus += Line_LostFocus;
不过,我不得不说,这似乎是一种奇怪的做事方式。重新考虑是否应该创建自定义控件而不是在现有控件上绘制。这似乎有点傻
编辑
由于线型控件不支持焦点,请改为执行以下操作:
public void Line_ToFront(object sender, EventArgs e)
{
Line L = (Line) sender;
L.BringToFront();
}
并附上:
Form1.Paint += Line_ToFront;
如果这不起作用,那么遍历表单上的每个控件,并将linetoffront添加到绘制处理程序中。不过,我仍然建议寻找其他方法。这似乎太草率了。它起作用了,但当我将鼠标悬停在中间的控件上时,它就不再在前面了,是否有类似losefoucs的事件我应该看一下?它起作用了,但当我将鼠标悬停在中间的控件上时,它就不再在前面了,有没有像losefoucs这样的事件我应该看一下?它不起作用,但是当你将鼠标悬停在另一个控件上时,一个控件应该失去焦点吗?因为正如我在前面的评论中所说,当我将鼠标悬停在覆盖的控件上时,该行返回。带焦点的控件是在此时响应用户输入的控件。例如,当鼠标悬停在某个按钮上时,您希望该按钮在单击时做出响应。你能再解释一下你想做什么吗?如果您愿意更改应用程序的结构,可能会有更好的解决方案。我的解决方案不起作用的原因是LineShape对象(我假设您正在使用它?)无法接收焦点。您可以检查只读控件的属性行.CanFocus,您会发现它返回false。它不起作用,但当您将鼠标悬停在其他控件上时,控件是否应该失去焦点?因为正如我在前面的评论中所说,当我将鼠标悬停在覆盖的控件上时,该行返回。带焦点的控件是在此时响应用户输入的控件。例如,当鼠标悬停在某个按钮上时,您希望该按钮在单击时做出响应。你能再解释一下你想做什么吗?如果您愿意更改应用程序的结构,可能会有更好的解决方案。我的解决方案不起作用的原因是LineShape对象(我假设您正在使用它?)无法接收焦点。您可以检查只读控件属性行.CanFocus,您会发现它返回false。