Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何绑定ASP文本框&x27;将文本添加到其工具提示中?_C#_Asp.net - Fatal编程技术网

C# 如何绑定ASP文本框&x27;将文本添加到其工具提示中?

C# 如何绑定ASP文本框&x27;将文本添加到其工具提示中?,c#,asp.net,C#,Asp.net,我希望工具提示始终与ASP文本框的文本相同。我当然会写 AnyTextBox.Text = "any text"; AnyTextBox.ToolTip = "any text"; 但我不想重复数百条赋值语句。 我还可以为Text属性编写change事件处理程序,但我不想为此编写几十个事件处理程序(如果有更优雅的解决方案的话) 有吗?大概是这样的: <asp:TextBox ID="AnyTextBox" runat="server" ToolTip="binding magic goe

我希望工具提示始终与ASP文本框的文本相同。我当然会写

AnyTextBox.Text = "any text";
AnyTextBox.ToolTip = "any text";
但我不想重复数百条赋值语句。 我还可以为Text属性编写change事件处理程序,但我不想为此编写几十个事件处理程序(如果有更优雅的解决方案的话)

有吗?大概是这样的:

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


Thx提前

您可以编写自己的自定义控件,该控件继承自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">
标记:

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">

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

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

protected void AnyTextBoxTextChanged(object sender, EventArgs e)
{
this.AnyTextBox.Tooltip = this.AnyTextBox.Text;
}

受保护的void AnyTextBoxTextChanged(对象发送方,事件参数e)
{
this.AnyTextBox.Tooltip=this.AnyTextBox.Text;
}

据我所知,没有这种自动性。不管它值多少钱,也许您可以使用
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;
}
受保护的无效页面\u预呈现(对象发送方,事件参数e)
{
var allTextControlsWithTooltips=新列表();
var stack=新堆栈(this.Controls.Cast());
而(stack.Count>0)
{
Control currentControl=stack.Pop();
if(currentControl是WebControl&¤tControl是ITextControl)
添加((网络控制)currentControl);
foreach(currentControl.Controls中的控制)
堆栈推送(控制);
}
foreach(allTextControlsWithTooltips中的var txt)
txt.ToolTip=((ITextControl)txt).Text;
}

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

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

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

就这样!为您希望具有此工具提示行为的所有文本框设置onchange事件。

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

或者您希望简化服务器端的工作,并且不希望为每个项目指定工具提示和文本,然后使用自定义控件方式(我建议使用RGraham代码)

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

尝试使用jquery

$(function () {

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

    });

这真是太好了。出于兴趣,您选择将控件与两种类型的
WebControl
ITextControl
进行比较,而不是简单的文本框,原因是什么?@RGraham:这可能是您想要的,所以就是这样。否则只需检查
文本框
。但是,如果控件嵌套在容器控件中,如
gridview
(已测试),这也会起作用。但是ITextControl没有工具提示属性,因此如果控件没有显式声明工具提示属性,这可能会失败吗?@RGraham:这就是为什么我只取出
网络控件的原因这就是:)谢谢!好奇心满足了,你赢得了我的+1,但是即使用户没有改变任何东西,工具提示也应该是文本;因此,如果文本框可能预先填充了示例文本,那么我的答案是不可接受的!很好的观察。这隐藏了原始文本框的文本属性,因此无法设置文本。不应使用_textbacking字段,而应使用base.text作为backing。无论如何THX:-)@g.pickardou-Heh,应该检查一下这个!很好的观点,更新的答案