1

我正在尝试找到一种有效的工具提示方法,该方法涉及将字符串注入表单底部的状态栏。我有两种方法,mouseEntermouseLeave想用它们统一显示与我设置的任何随机用户控件相关联的字符串。

mouseLeave简单:

    private void mouseLeave(object sender, EventArgs e)
    {
        toolStripStatusLabel1.Text = "";
    }

但是mouseEnter要困难得多,因为每个控件都需要自己的字符串。如果需要,我可以将它们硬编码到程序中,我只是希望它能够工作,而不需要为每个对象使用不同的方法。

我正在尝试的一种方法如下所示(注释行均无效,但仅显示了我的进度):

    private void mouseEnter(object sender, EventArgs e)
    {
        //toolStripStatusLabel1.Text = pictureBoxLogo.GetAccessibilityObjectById(AccessibleDescription);
        //toolStripStatusLabel1.Text = sender.ToString();
    }

使用时GetAccessibilityObjectById,我收到错误消息:

错误 23 无法通过“System.Windows.Forms.PictureBox”类型的限定符访问受保护的成员“System.Windows.Forms.Control.GetAccessibilityObjectById(int)”;限定符必须是“.MainForm”类型(或派生自它)\formMain.cs 59 59

使用该sender.ToString();方法时,我在状态栏中得到一串不连贯的文本。这根本不是要使用的正确属性。

我可以使用所有控件中的一个属性,然后我可以从它们中获取并作为字符串插入吗?如果不是,那么以任何方式将字符串分配给他们的最佳方法是什么,这将允许我将其作为字符串获取mouseEnter

谢谢你。

4

3 回答 3

2

如何利用类的Tag属性Control。例如,在设计器中将Taga设置TextBox为“这是我的工具提示”。然后在mouseEnter这样做:

var c = sender as Control;
if (c == null) { return; }

toolStripStatusLabel1.Text = Convert.ToString(c.Tag);
于 2013-10-09T19:44:57.497 回答
1

为什么不使用以控件名称作为键的字典呢?

var ControlDict = new Dictionary<string,string>();

ControlDict.Add("txtName", "Your Name");

toolStripStatusLabel1.Text = ControlDict[sender.ToString()];
于 2013-10-09T19:45:53.320 回答
1

您可以使用该Tag属性来存储有关控件的用户特定信息。没有其他东西会碰它。虽然我不确定这是本地化字符串键的正确位置。

传统工具提示通常的工作方式是您在工具提示本身上为每个对象定义工具提示。在内部它有一个字典,基本上像这样映射:

control1 -> "control1's tooltip"
control2 -> "control2's tooltip"
control3 -> "control3's tooltip"
于 2013-10-09T19:44:23.977 回答