当前位置: 首页 > 编程语言 > C#

动态创建的控件导致空引用Share

时间:2023-04-11 11:11:57 C#

动态创建的控件导致空引用我将我的代码放在Page_Init事件中,当我运行我的网站时,我可以看到我的控件,但是当我点击提交按钮时,我收到一条错误消息“对象引用未设置为对象的实例”。这是我用过的代码://CreatesinstancesoftheControlLabelFeedbackLabel=newLabel();文本框InputTextBox=newTextBox();按钮SubmitButton=newButton();//分配控件属性FeedbackLabel.ID="FeedbackLabel";FeedbackLabel.Text="请输入您的姓名:";SubmitButton.ID="提交按钮";SubmitButton.Text="提交";InputTextBox.ID="输入文本框";//创建事件处理程序SubmitButton.Click+=newSystem.EventHandler(SubmitButton_Click);//将控件添加到面板Panel1.Controls.Add(FeedbackLabel);Panel1.Controls.Add(InputTextBox);Panel1.Controls.Add(提交按钮);}protectedvoidSubmitButton_Click(objectsender,EventArgse){//为现有控件创建一个Button实例ButtonSubmitButton=(Button)sender;//更新按钮上的文本SubmitButton.Text="Submitagain!";//创建Label和TextBox控件LabelFeedbackLabel=(Label)FindControl("FeedbackLabel");文本框InputTextBox=(TextB牛)FindControl(“InputTextBox”);//更新控件FeedbackLabel.Text=string.Format("Hi,{0}",InputTextBox.Text);我该如何解决这个错误?这是堆栈跟踪[NullReferenceException:对象引用未设置为对象的实例]_Default.Page_PreInit(对象发件人,EventArgse)在c:UsersbilalqDocumentsVisualStudio2010WebSitesWebSite3Default.aspx.cs:31System.Web。效用。CalliHelper.EventArgFunctionCaller(IntPtrfp,Objecto,Objectt,EventArgse)+14System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Objectsender,EventArgse)+35System.Web.UI.Page。OnPreInit(EventArgse)+8876158System.Web.UI.Page.PerformPreInit()+31System.Web.UI.Page.ProcessRequestMain(BooleanincludeStagesBeforeAsyncPoint,BooleanincludeStagesAfterAsyncPoint)+328我建议你在page_int之外和在init,然后使用它们的名称而不是查找控件。由于FindControl不是递归的,您必须替换此代码:LabelFeedbackLabel=(Label)FindControl("FeedbackLabel");TextBoxInputTextBox=(TextBox)FindControl("InputTextBox");通过此代码:LabelFeedbackLabel=(Label)Panel1.FindControl("FeedbackLabel");TextBoxInputTextBox=(TextBox)Panel1.FindControl("InputTextBox");但是,根据其他答案,您应该将声明(而不是实例化)移到方法之外(在类级别),以便轻松获取控件的条目。尝试将您的代码放在Page_Load而不是Page_Init中,并在使用FindControl返回的对象之前检查是否为null。我怀疑对象InputTextBox为空,当您尝试打印其文本时它会崩溃。作为一般规则,在将FindControl的结果转换为其他内容时,只需检查null和类型。FindControl失败,因为它找不到控件并导致空引用。只需使用FeedbackLabel直接引用它,因为您已经在课堂上使用过它。只需将范围移到“Init”方法之外。以上是C#学习教程:动态创建的控件导致共享内容全部为Null引用。如果对大家有用,需要进一步了解C#学习教程,希望大家多加关注——privateLabelfeedbackLabel=newLabel();私有文本框inputTextBox=newTextBox();私人按钮submitButton=newButton();publicvoidPage_Init(EventArgse){feedbackLabel.ID="FeedbackLabel";}protectedvoidSubmitButton_Click(objectsender,EventArgse){feedbackLabel.Text=...;}protectedoverridevoidOnLoad(EventArgse){base.OnLoad(e);//--在这里创建你的控件}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:

最新推荐
猜你喜欢