Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在Windows窗体应用程序中选择覆盖其他控件的控件_C#_Overlay - Fatal编程技术网

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。