我有一个标签控件然后当鼠标光标在它周围盘旋大约1秒时,它将以文本格式显示项目列表(项目是纯文本或它也是一个控件)。这就像在主页/联系我们/关于我们/帮助网站。我将使用什么样的控制?
例如。 www.ebay.com。在“我的易趣”下,它会显示项目,例如摘要/出价/列表/消息......等等。
答案 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);
};