【问题标题】:Programmatically created controls and their protection level以编程方式创建的控件及其保护级别
【发布时间】:2014-06-18 10:38:26
【问题描述】:

我正在我的 aspx.cs 页面后面的代码中创建一个按钮。但是,我需要在此文本框中检测到创建后在其中更改了任何文本。

                        TextBox addn = new TextBox
                    {
                        ID = "Tb_Address" + i,
                        CssClass = "TextBoxProfile",
                        OnTextChanged = "textChangedEventHandler",
                        Text = "testc"
                    };
                    Tb_Container.Controls.Add(addn);

但是 OnTextChanged 给了我这个错误:

'System.Web.UI.WebControls.TextBox.OnTextChanged(System.EventArgs)' is inaccessible due to its protection level 

我已经阅读过这些问题;但我没有设计器页面来更改保护级别,我认为这也行不通,因为这些控件是以编程方式创建的。

编辑:

我试过了:

addn.OnTextChanged += textChangedEventHandler;

但是这仍然给我上面的错误。

addn.TextChanged += textChangedEventHandler;

上述方法有效,但不是所需的输出,因为我希望这是自动的,而不是在 PageLoad(?) 上。

【问题讨论】:

  • 查看我的更新答案
  • 你能澄清更多吗?当您以编程方式创建文本框时,您必须将每个文本框与代码中的事件绑定。
  • 我没有将文本框与事件绑定,我不知道该怎么做。你有什么好的例子可以链接到我吗?

标签: c# asp.net


【解决方案1】:

OnTextChanged 是一个方法,不是一个事件,你不能订阅这个,它是引发事件的方法。它受到保护,因此如果您从 Textbox 类派生,您可以用自己的行为覆盖。见OnTextChanged method

TextChanged 是您需要订阅的实际事件本身,您已正确执行此操作,但我认为您希望它的行为有所不同?你期望它的表现如何? Netnetter 可能在使用 javascript 的正确路线上。见TextChanged event

addn.TextChanged += textChangedEventHandler; 以上工作,但它不是所需的输出,因为我希望这是自动的,而不是在 PageLoad(?) 上。

【讨论】:

  • 这几乎总结了我的问题和我的误解。我假设在更改文本时(很像正则表达式验证器)这将是一个自动的事情;但这不是我的错。
【解决方案2】:

您正在以您在 ascx 文件中的方式订阅文本更改事件。由于您以编程方式创建控件,因此您应该像这样订阅事件:

TextBox addn = new TextBox {
    ID = "Tb_Address" + i,
    CssClass = "TextBoxProfile",
    Text = "testc"
};
addn.OnTextChanged += textChangedEventHandler;
Tb_Container.Controls.Add(addn);

【讨论】:

  • 我以前也这样做过(抱歉),但由于控制保护级别,我无法再次这样做?
【解决方案3】:

您可以如下所示直接附加事件并获取事件处理程序...并查看此答案Dynamically create an ImageButton:-

TextBox addn = new TextBox ;

addn.TextChanged += new EventHandler(b_textChanged);

及其处理程序:-

void b_textChanged(object sender, EventArgs e)
    {
        ////Your code
    }

【讨论】:

    【解决方案4】:

    addn.TextChanged += textChangedEventHandler;
    以上工作,但它不是所需的输出,因为我希望这是自动的,而不是在 PageLoad(?) 上。

    您的意思是在您输入值时应该检测到文本更改吗? 因为如果你的意思是,那么 JavaScript 就是你所需要的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多