具有不想要的命名空间的MouseEventArgs

时间:2018-09-04 19:35:04

标签: c# wpf winforms

最终目标是将工具提示添加到ListBox中的对象。我发现了一些这样做的例子,即:

private void OnListBoxMouseMove ( object sender, MouseEventArgs e )
{
    string strTip = "";

    // Get the item
    int nIdx = listBox1.IndexFromPoint(e.Location);

    if ((nIdx >= 0) && (nIdx < listBox1.Items.Count))
        strTip = listBox1.Items[nIdx].ToString();

    toolTip1.SetToolTip(listBox1, strTip);
}

但是,我的页面将其作为System.Windows.Input.MouseEventArgs对象而不是Systems.Windows.Forms放置,因此e.Location不存在。

反正有从正确的名称空间接收此事件吗?另一个因素可能是ListBox位于System.Windows.Controls命名空间中?

2 个答案:

答案 0 :(得分:0)

为了实现最终目标,为列表框中的每个项目添加工具提示,我只是将事件处理程序添加到xmal中的列表框中。

<ListBox.ItemContainerStyle>
    <Style TargetType="ListBoxItem">
         <EventSetter Event="MouseEnter" Handler="mouseEnterMethodName"></EventSetter>
    </Style>
</ListBoxItemTemplate>

然后在cs中将发送方简单地转换为ListBoxItem,然后将ListBoxItem.ToolTip设置为所需的任何值。了解WPF和Winforms在不同的命名空间中工作非常有用。谢谢大家!

答案 1 :(得分:-1)

我相信您正在使用WPF,这应该是您正在寻找的答案:

Displaying a tooltip text on a listbox specific item

文章文字:

您好,如果要在列表框中的各个项目上显示工具提示,这是一种快速简便的方法。它不需要自定义控件,并且代码很小。

首先创建一个方法来处理鼠标移动事件,然后将其挂接到ListBox的MouseMove事件。您还将需要一个ToolTip对象作为表单的成员变量。创建和更新工具提示所需的代码是:

private void onMouseMove(object sender, MouseEventArgs e)
{
    if(sender is ListBox)
    {      
        ListBox listBox = (ListBox)sender;
        Point point = new Point(e.X, e.Y);
        int hoverIndex = listBox.IndexFromPoint(point);
        if(hoverIndex >= 0 && hoverIndex < listBox.Items.Count)
        {
            tt.SetToolTip(listBox, listBox.Items[hoverIndex].ToString());
        } 
    }    
}

有关更多信息,请检查end of this article

第二个问题,您可以使用ToolTip.AutomaticDelay Property