How do you configure if you have too many textboxes.
I have set up in Default.aspx.vb:
Imports Microsoft.VisualBasic
Imports System.Diagnostics
Public Class _Default
Inherits System.Web.UI.Page
Dim WithEvents Button1 As New Button
Dim textbox1, textbox2, textbox3, textbox4 As New TextBox
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim pi, mo, dy, yr, lon, lat As Double
mo = CDbl(textbox1.Text)
dy = CDbl(textbox2.Text)
yr = CDbl(textbox3.Text)
JD=367*yr-int(7/4*(yr+int((mo+9)/12))) +dy+1721013.5
textbox4.text=JD
end sub
end class
Where am I going wrong?
Using old-style control arrays no longer works. But there’s a way to get around it! Instead of drag-dropping the controls onto your form, add a control array to your underlying class, create your controls dynamically, add it to your custom array, then write it out to the form. Here’s a better explanation (though long). This article also explains how to hook up your event handlers and so on. Good luck.
Here is a simple example (you’ll have to convert to VB as I don’t do VB):
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<p><asp:Literal ID="Output" runat="server" /></p>
</form>
</body>
</html>
using System;
using System.Collections.Generic;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebApplication1
{
public partial class WebForm1 : Page
{
private IList<TextBox> _textBoxes = new List<TextBox>();
protected void Page_Init(object sender, EventArgs e)
{
Output.Text = "Waiting for input...";
for (int index = 0; index < 10; index++)
{
Literal beginPara = new Literal();
beginPara.Text = "<p>";
form1.Controls.Add(beginPara);
TextBox textBox = new TextBox();
// setting ID, the event handler and autopostback is important here!
textBox.ID = String.Format("TextBox{0}", index.ToString());
textBox.TextChanged += new EventHandler(TextBox_TextChanged);
textBox.AutoPostBack = true;
_textBoxes.Add(textBox);
form1.Controls.Add(textBox);
Literal endPara = new Literal();
endPara.Text = "</p>";
form1.Controls.Add(endPara);
}
}
protected void TextBox_TextChanged(object sender, EventArgs e)
{
Output.Text = (sender as TextBox).Text;
}
}
}
There is probably a much easier way using the asp:repeater control, but I’ve been away from WebForms for far too long to provide that answer.
In your case, forego attaching a custom handler to the boxes themselves. Attach it to a single button. Then use the IList variable to access the controls. It saves having to use FindContol later.