【问题标题】:Highlight text in .NET, .Select() isn't available在 .NET 中突出显示文本,.Select() 不可用
【发布时间】:2009-06-04 15:54:16
【问题描述】:

我在网格视图中有一个 Web 表单 文本框,我想在单击按钮时突出显示文本。 textbox.select(start,end) 不起作用。代码如下:

    Dim row As GridViewRow = TryCast(DirectCast(sender, ImageButton).Parent.Parent, GridViewRow)
    Dim txtdays As TextBox = row.Cells(2).FindControl("txtDays")
    Dim lbldays As Label = row.Cells(2).FindControl("lblDays")
    Dim btndel As ImageButton = row.Cells(2).FindControl("btndel")
    Dim imgbttnadd As ImageButton = row.Cells(2).FindControl("imgbttnadd")

    //Show textbox and set its text.
    txtdays.Visible = True
    txtdays.Text = lbldays.Text
    txtdays.Focus()

    //Here is where I want to select the text.
    txtdays.Select() //????????  Doesn't work.

你是怎么做到的?

.Select 适用于 Windows 窗体文本框,但不适用于 Web 窗体文本框。

【问题讨论】:

    标签: asp.net vb.net visual-studio


    【解决方案1】:

    您需要了解执行您想要的效果需要客户端脚本。但是,需要服务器端代码来准确识别元素。这就是为什么您需要txtDays TextBox 的“渲染 ID”(因为它位于 GridView 中,渲染的 ID 会有所不同)

    使用 JavaScript,你可以这样做:

    例如,以下代码将在您的 ASPX 页面中(您可能希望将其包装在一个函数中)。我假设您对 JavaScript 有基本的了解。

    var txtDays = document.getElementById(<%= txtDays.ClientID %>);
    if (txtDays != null)
    {
        txtDays.focus();
        txtDays.select();
    }
    

    您在 VB 中寻找的 Select 函数不存在。 Focus() 函数仅存在(.NET 2.0+),因为 Focus API 的实现会在客户端代码中呈现类似于上述示例的 JavaScript 函数。

    编辑:(在 cmets 之后)

    在这种情况下,我想您可以使用类似以下的内容来代替不起作用的行(在您的代码示例中)。

    txtDays.Attributes.Add("onfocus", "this.select();")
    

    这应该确保在引发onfocus 事件时,TextBox 也会被选中。

    【讨论】:

    • 感谢您的额外帮助 (+1)。但是我尝试了一个与您请求的功能非常相似的功能,但我收到一个javascript错误,提示未声明txtdays。我的 txtdays 在模板字段中,但它应该找到它吗?我应该发布一些标记吗?
    • 嗯...我认为我们需要更多信息,而不是标记。关于到底发生了什么。似乎您单击 ImageButton 并且页面回传到服务器,然后提供的代码运行。那么,这个页面是否需要重新出现在浏览器中,但只需要选择文本框?如果这是唯一需要的功能,则根本不需要回发到服务器。
    • JS无法找到文本框,因为GridView的子控件的渲染ID完全不同。你应该看一下渲染页面的 HTML 源代码,它会变成这样:“MyGridView_ctl01_txtDays”。如果您将该 ID 传递给 Javascript,它将能够聚焦并选择您的文本框。
    • 点击按钮编辑标签会发生什么。在我的 _click 事件中,我删除了标签中出现的数据库中的数据,并在文本框中显示了该标签的文本。我想突出显示文本以表明他们正在编辑或更新记录。需要回发,因为我在服务器上点击了删除命令。
    • 这是一个很棒的概念。但是,出现一个 javascript 错误,提示“未定义”。
    【解决方案2】:

    根据您的 cmets,您可能希望在问题中指定您正在处理 ASP.NET 控件。 Chris 给出的答案确实适用于 WinForms 文本框。

    我不确定你在 ASP.NET 中是如何做到的,但我敢打赌你不能在服务器端代码中做到这一点。你可能不得不使用 JavaScript 来实现它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-25
      • 2021-01-15
      • 2013-01-26
      • 1970-01-01
      • 1970-01-01
      • 2010-11-29
      相关资源
      最近更新 更多