以下是场景:
我正在使用代码编辑器(Winforms),我使用RichTextBox
和一个组件作为Intellisense。
按下“。”在RichTextBox
中,将出现Intellisense,其中的每个对象都有不同的工具提示。
现在,工具提示位置是跟随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
。
答案 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);
}