将工具提示与Intellisense的SelectedItemIndex对齐

时间:2013-07-10 08:26:11

标签: c# tooltip intellisense

以下是场景:

我正在使用代码编辑器(Winforms),我使用RichTextBox和一个组件作为Intellisense。

按下“。”在RichTextBox中,将出现Intellisense,其中的每个对象都有不同的工具提示。

这样的事情:
http://oi44.tinypic.com/2lbzu1.jpg

现在,工具提示位置是跟随SelectedIndex我想出了这段代码:

public void SetToolTip(Intellisense intellisenseitem)
        {
    if (selectedItemIndex == 0)
                {
                    toolTip.ToolTipTitle = title;
                    toolTip.Show(text, this, Width + 3, SelectedItemIndex, 3000);
                }
                if (selectedItemIndex == 1)
                {
                    toolTip.ToolTipTitle = title;
                    toolTip.Show(text, this, Width + 3, SelectedItemIndex + 15, 3000);
                }
                if (selectedItemIndex == 2)
                {
                    toolTip.ToolTipTitle = title;
                    toolTip.Show(text, this, Width + 3, SelectedItemIndex + 30, 3000);
                }
                if (selectedItemIndex == 3)
                {
                    toolTip.ToolTipTitle = title;
                    toolTip.Show(text, this, Width + 3, SelectedItemIndex + 45, 3000);
                }
                if (selectedItemIndex == 4)
                {
                    toolTip.ToolTipTitle = title;
                    toolTip.Show(text, this, Width + 3, SelectedItemIndex + 60, 3000);
                }
                if (selectedItemIndex == 5)
                {
                    toolTip.ToolTipTitle = title;
                    toolTip.Show(text, this, Width + 3, SelectedItemIndex + 75, 3000);
                }
                if (selectedItemIndex == 6)
                {
                    toolTip.ToolTipTitle = title;
                    toolTip.Show(text, this, Width + 3, SelectedItemIndex + 90, 3000);
                }
                if (selectedItemIndex == 7)
                {
                    toolTip.ToolTipTitle = title;
                    toolTip.Show(text, this, Width + 3, SelectedItemIndex + 105, 3000);
                }
                if (selectedItemIndex == 8)
                {
                    toolTip.ToolTipTitle = title;
                    toolTip.Show(text, this, Width + 3, SelectedItemIndex + 120, 3000);
                }
                if (selectedItemIndex == 9)
                {
                    toolTip.ToolTipTitle = title;
                    toolTip.Show(text, this, Width + 3, SelectedItemIndex + 135, 3000);
                }
                if (selectedItemIndex == 10)
                {
                    toolTip.ToolTipTitle = title;
                    toolTip.Show(text, this, Width + 3, SelectedItemIndex + 150, 3000);
                }
                if (selectedItemIndex == 11)
                {
                    toolTip.ToolTipTitle = title;
                    toolTip.Show(text, this, Width + 3, SelectedItemIndex + 165, 3000);
                }
                if (selectedItemIndex >= 12) //still needed to fix
                {
                    toolTip.ToolTipTitle = title;
                    toolTip.Show(text, this, Width + 3, SelectedItemIndex + 165, 3000);
                }
}

当Intellisense项目达到12以上时出现问题(请注意,Intellisense有一个过滤器,用于过滤在startswith中输入的文本(Richtextbox),如Visual Studio中的Intellisense ,它会自动滚动(因为它达到最大尺寸) 现在的问题是Tooltip现在不会遵循其Selecteditemindex 使用滚动。

控制intellisense就像一个列表框。(因为我之前提到它是我使用的一个组件)

现在我的问题是关于如何使工具提示始终遵循intellisense的SelectedItemIndex

1 个答案:

答案 0 :(得分:3)

如果你用这个重构你的代码,它将使你更容易。

void SetToolTip(Intellisense intellisenseitem)
 {
    toolTip.ToolTipTitle = title;
    toolTip.Show(text, this, Width + 3, SelectedItemIndex + (15 * selectedItemIndex ), 3000);
 }

滚动条开始移动后,您应该使用滚动索引而不是Selected Item索引。理论上你根本不应该使用Selected Item Index,而应该使用Selected Item位置(我不确定List框将公开的Selected Item Position暴露给公众,你可能需要深入了解Reflection并获得私有字段所选项目位置)。

修改

您需要的是:

void SetToolTip(Intellisense intellisenseitem)
 {
    toolTip.ToolTipTitle = title;
    var x = Width + 3;
    // get the rectangle of the selected item, the X, Y position of the rectangle will be relative to parent list box.
    var rect = listBox1.GetItemRectangle(listBox1.SelectedIndex); 
    var y = listBox1.Location.Y + rect.Y; // Add ListBox Y and the Selected Item Y to get the absolute Y.

    toolTip.Show(text, this, x, y, 3000);
 }