3

我希望 ToolTip 始终与 ASP TextBox 的 Text 相同。我当然可以写

AnyTextBox.Text = "any text";
AnyTextBox.ToolTip = "any text";

但我不想重复数百个赋值语句。我也可以为 Text 属性编写更改事件处理程序,但我不想为此编写几十个事件处理程序(如果有更优雅的解决方案)

在那儿?像这样的东西:

<asp:TextBox ID="AnyTextBox" runat="server" ToolTip="binding magic goes here, but how?">

提前谢谢

4

6 回答 6

3

您可以编写自己的继承自 TextBox 的自定义控件吗?我使用 Text 属性来设置工具提示,但如果你愿意,你也可以反过来做。

控制:

public class TooltipTextBox : TextBox {
    public new string Text {
        get { return base.Text; }
        set
        {
            base.Text = value;
            this.ToolTip = value;
        }
    }
}

标记:

<my:TooltipTextBox ID="AnyTextBox" runat="server" Text="binding magic goes here">
于 2013-10-16T12:28:31.217 回答
2

我认为使用 JavaScript 事件处理程序将是您最简单的解决方案。不过,您不需要编写数百个事件处理程序。只需编写一个,然后为所有文本框使用相同的事件处理程序!

<asp:TextBox ID="AnyTextBox" runat="server" onchange="setTooltip(this)" />

然后脚本将是

function setTooltip(textbox) {
    textbox.title = textbox.value;
}

而已!为您希望具有此工具提示行为的所有文本框设置该 onchange 事件。

于 2013-10-16T12:36:48.830 回答
2

据我所知,没有这种自动化。对于它的价值,也许你可以使用PreRender

protected void Page_PreRender(Object sender, EventArgs e)
{
    var allTextControlsWithTooltips = new List<WebControl>();
    var stack = new Stack<Control>(this.Controls.Cast<Control>());
    while (stack.Count > 0)
    {
        Control currentControl = stack.Pop();
        if (currentControl is WebControl && currentControl is ITextControl)
            allTextControlsWithTooltips.Add((WebControl)currentControl);
        foreach (Control control in currentControl.Controls)
            stack.Push(control);
    }
    foreach (var txt in allTextControlsWithTooltips)
        txt.ToolTip = ((ITextControl)txt).Text;
}

您也可以使用UserControl处理此事件的 a,然后只需将其放在所有应以这种方式运行的页面上。或者您可以让所有页面都从一个基本页面继承。

于 2013-10-16T12:35:09.293 回答
0

您可以在文本框的 TextChanged 事件中执行此操作:

<asp:TextBox ID="AnyTextBox" runat="server" TextChanged="AnyTextBoxTextChanged">

protected void AnyTextBoxTextChanged(object sender, EventArgs e)
{
this.AnyTextBox.Tooltip = this.AnyTextBox.Text;
}
于 2013-10-16T12:31:46.810 回答
0

这取决于您是否正在寻找工具提示的“实时更新”=即当用户更改网站上的文本时您是否要更改工具提示?然后使用输入和 JS 函数的“onchange”事件,该函数将在每次事件调用时更改其“title”属性。

或者您想简化服务器端工作并且不想为每个项目指定工具提示和文本,然后使用自定义控制方式(我推荐 RGraham 代码)。

或者匹配这两种方法并使用自定义控件,该控件也将提供 JS“刷新”代码:-)

于 2013-10-16T12:37:43.613 回答
0

尝试使用 jquery

$(function () {

        var maybe = true;
        var text = $('.myTextBox').val();
        if (maybe) {
            $('.myTextBox').attr('title', text);
        }

    });
于 2013-10-16T12:44:36.637 回答