C#当鼠标光标悬停在ControlLabel中时,它会显示项目列表吗?那是什么样的控制?

时间:2016-06-09 08:02:57

标签: c# winforms

我有一个标签控件然后当鼠标光标在它周围盘旋大约1秒时,它将以文本格式显示项目列表(项目是纯文本或它也是一个控件)。这就像在主页/联系我们/关于我们/帮助网站。我将使用什么样的控制?

例如。 www.ebay.com。在“我的易趣”下,它会显示项目,例如摘要/出价/列表/消息......等等。

2 个答案:

答案 0 :(得分:3)

您看到的内容最好由ToolTip实现。

要向控件添加ToolTip,您通常会这样做:

  • 从工具箱中将ToolTip添加到Form
  • 现在,每个控件在窗体上作为属性窗格中的新属性字段:"ToolTip" on "yourToolTipName"
  • 为要显示工具提示的每个控件设置工具提示文本。

这很简单。 因此,许多人认为这只是ToolTip所能做到的。

但它可以在很多方面创建修改动态和样式。显示项目列表完全没问题。

要动态加载数据,您需要对MouseHover的{​​{1}}事件进行编码:

Label

当然,您可能需要调用一个函数来加载每个private void yourLabel_MouseHover(object sender, EventArgs e) { toolTip1.SetToolTip(yourLabel, yourData); } ..:Labels的正确和最新数据。

如果您愿意,可以轻松 ownerdraw string loadData(Label lbl)。首先编码其ToolTip事件:

Popup

然后是private void toolTip1_Popup(object sender, PopupEventArgs e) { toolTip1.BackColor = Color.LightGoldenrodYellow; // pick a Color if you want to toolTip1.OwnerDraw = true; } 事件:

Draw

请注意,private void toolTip1_Draw(object sender, DrawToolTipEventArgs e) { using (Font font = new Font("Consolas", e.Font.SizeInPoints)) { e.DrawBackground(); e.DrawBorder(); e.Graphics.DrawString(e.ToolTipText, font, Brushes.DarkMagenta, e.Bounds); } 会自动调整大小以显示文字。另请注意,您可以嵌入ToolTip个字符来创建换行符。

我选择了等宽字体\n,因此我可以创建精确对齐的文本列。另请注意,如果要扩大字体,则应通过额外的线条和/或空格添加足够的空间,这是因为Consolas区域的大小是根据其计算的原始字体大小,您无法为其选择不同的字体。请参阅here for a little more on that..

另请注意,您根本不需要在设计器中设置属性。 ToolTip可以满足您的所有需求..

答案 1 :(得分:1)

创建ContextMenuStrip,为项目设置事件处理程序:

var contextMenu = new ContextMenuStrip();
contextMenu.Items.Add("Item 1");
contextMenu.Items.Add("Item 2");
contextMenu.Items.Add("Item 3");

您的ControlLabel:

var label = new Label { Parent = this, BorderStyle = BorderStyle.FixedSingle, Text = "Test" };

手动显示菜单:

label.MouseHover += (s, e) =>
{
    contextMenu.Show(label, 0, label.Height);
};