我的表单中有一个特殊的标签,应该在工具提示中显示一些文字。 标签在表单(嵌套控件)中声明为私有类,并应“看到”父表单的ToolTip控件。
这是代码。当然,我在这里得到错误,因为构造函数在所有者表单控件集合中添加私有控件之前被调用...
编辑: 是否有可能不在构造函数中传递form1或toolTip控件?
using System;
using System.Drawing;
using System.Windows.Forms;
namespace WindowsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
this.InitializeComponent();
FormLabel myFormLabel = new FormLabel("uraaaaa!");
this.Controls.Add(myFormLabel);
myFormLabel.Location = new Point(20, 20);
}
private class FormLabel : Label
{
public FormLabel(string toolTip) : base()
{
this.Text = toolTip.ToUpperInvariant();
(this.FindForm() as Form1).toolTip1.SetToolTip(this, toolTip);
}
}
}
}
答案 0 :(得分:1)
为什么不将表单传递给FormLabel的构造函数?
public Form1()
{
this.InitializeComponent();
FormLabel myFormLabel = new FormLabel(this, "uraaaaa!");
this.Controls.Add(myFormLabel);
myFormLabel.Location = new Point(20, 20);
}
private class FormLabel : Label
{
public FormLabel(Form1 form, string toolTip) : base()
{
this.Text = toolTip.ToUpperInvariant();
form.toolTip1.SetToolTip(this, toolTip);
}
}
我希望这可以工作......如果没有,请详细说明您所看到的错误。我认为在现实生活中有充分的理由这样做 - 现在感觉有点费解。
答案 1 :(得分:1)
您可以使用ToolTip
的任何实例设置工具提示 - 您可能会发现创建ToolTip
的新实例更容易,而不是重复使用表单上的实例:
public FormLabel(string toolTip) : base()
{
this.Text = toolTip.ToUpperInvariant();
ToolTip myToolTip = new ToolTip();
myToolTip.SetToolTip(this, toolTip);
}
或者,您可以将ToolTip的实例显式传递给控件,如下所示:
public Form1()
{
this.InitializeComponent();
FormLabel myFormLabel = new FormLabel("uraaaaa!", this.toolTip1);
this.Controls.Add(myFormLabel);
myFormLabel.Location = new Point(20, 20);
}
private class FormLabel : Label
{
public FormLabel(string text, ToolTip toolTip) : base()
{
this.Text = text.ToUpperInvariant();
toolTip.SetToolTip(this, text);
}
}
这有助于澄清一些事情吗?
答案 2 :(得分:0)
临时解决方案可以是:
using System;
using System.Drawing;
using System.Windows.Forms;
namespace WindowsApplication2
{
public partial class Form1 : Form
{
public Form1(){
this.InitializeComponent();
FormLabel myFormLabel = new FormLabel("uraaaaa!");
this.Controls.Add(myFormLabel);
myFormLabel.Location = new Point(20, 20);
}
private class FormLabel : Label
{
private string toolTipText;
public FormLabel(string toolTip) : base() {
this.BorderStyle = BorderStyle.FixedSingle;
this.toolTipText = toolTip.ToUpperInvariant();
}
protected override void OnParentChanged(EventArgs e) {
Form1 f1 = (this.Parent as Form1);
if (f1 != null)
f1.toolTip1.SetToolTip(this, this.toolTipText);
}
}
}
}