Существует ли быстрый способ получить контроль, это находится под мышью?

Согласно нашему обсуждению в комментариях выше,

Следующий код выдает ArgumentOutOfRangeException

treeView1.Nodes[i].Nodes[j]

Когда i или j больше, чем число узлов что у вас действительно возникает исключение, как это было бы с любым другим массивом.

Вы можете сделать это с помощью foreach или вместо магического числа (23) использовать Nodes.Count.

Итак, ваш код может выглядеть так:

for (int i = 0; i < treeView1.Nodes.Count; i++)
{
    for (int j = 0; j < treeView1.Nodes[i].Nodes.Count; j++)
    {
        foreach (var item in myDictionaryReconstructed)
        {
            if ("TreeNode: " + item.Key == treeView1.Nodes[i].Nodes[j].ToString())
            {
                treeView1.Nodes[i].Nodes[j].Nodes.Add(item.Value);
                treeView1.ExpandAll();
            }
        } 
    } 
}
12
задан Simon 25 February 2009 в 05:29
поделиться

2 ответа

Этот код не имеет большой смысл, но он действительно старается не пересекать наборы Средств управления:

[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern IntPtr WindowFromPoint(Point pnt);

private void Form1_MouseMove(object sender, MouseEventArgs e) {
  IntPtr hWnd = WindowFromPoint(Control.MousePosition);
  if (hWnd != IntPtr.Zero) {
    Control ctl = Control.FromHandle(hWnd);
    if (ctl != null) label1.Text = ctl.Name;
  }
}

private void button1_Click(object sender, EventArgs e) {
  // Need to capture to see mouse move messages...
  this.Capture = true;
}
17
ответ дан 26 October 2019 в 10:47
поделиться

Непротестированный и первое, что пришло на ум (и возможно замедляются...):

Control GetControlUnderMouse() {
    foreach ( Control c in this.Controls ) {
        if ( c.Bounds.Contains(this.PointToClient(MousePosition)) ) {
             return c;
         }
    }
}

Или быть необычным с LINQ:

return Controls.Where(c => c.Bounds.Contains(PointToClient(MousePosition))).FirstOrDefault();

Я не уверен, насколько надежный это было бы, все же.

2
ответ дан 26 October 2019 в 10:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: