代码之家  ›  专栏  ›  技术社区  ›  John M

修改鼠标十字光标代码,使其位于窗体顶部?

  •  2
  • John M  · 技术社区  · 14 年前

    code 可以添加以显示在鼠标指针处相交的线(十字光标)。问题是表单上的控件(如listview、splitcontainer、buttons)不显示(或部分隐藏)行。

    我如何修改下面的代码以显示窗体上所有控件的顶部(置于前面…)?

    int lastX = 0;
    int lastY = 0;
    private void Form1_MouseMove(object sender, MouseEventArgs e)
    {
    Region r = new Region();
    r.Union(new Rectangle(0, lastY, this.Width, 1));
    r.Union(new Rectangle(lastX, 0, 1, this.Height));
    this.Invalidate(r);
    this.Update();
    Graphics g = Graphics.FromHwnd(this.Handle);
    
    g.DrawLine(Pens.Chocolate, 0, e.Y, this.Width, e.Y);
    g.DrawLine(Pens.Chocolate, e.X, 0, e.X, this.Height);
    lastX = e.X;
    lastY = e.Y;
    }
    
    private void Form1_MouseLeave(object sender, EventArgs e)
    {
    this.Invalidate();
    }
    
    4 回复  |  直到 14 年前
        1
  •  1
  •   Hans Passant    14 年前

    你需要一个透明的窗口,上面的所有其他控件。获取一个的唯一方法是将窗体与另一个窗体重叠,并使用其TranparencyKey属性使其透明。你可以在我的答案中找到这方面的示例代码 this thread .

        2
  •  0
  •   Ramon Araujo    14 年前

    请先发到后面(控件.SendToBack())窗体上的控件(即listview、splitcontainer、buttons)。把这个放到FormLoad事件中。我用WindowsMDI应用程序做过同样的噩梦。 希望有帮助,

        3
  •  0
  •   JustBoo    14 年前

    .BringToFront(); 对他们起作用。

    listBox1.BringToFront();
    
        4
  •  0
  •   Skizz    14 年前

    根据文档,区域对象应该在世界坐标中,您正在传入客户坐标。使用 Control.PointToScreen 将矩形的左上角坐标映射到世界空间。

    我也会倾向于将绘图推迟到OnPaint方法。