Asp.net mvc 如何通过多个相似的文本框使用循环?

Asp.net mvc 如何通过多个相似的文本框使用循环?,asp.net-mvc,vb.net,Asp.net Mvc,Vb.net,所以我知道这是相当草率的,但是我有很多关于简单三角测量程序(2d)的东西,我是个新手 用户在文本框中输入值-“aft1.text,ain1.text,aft2.text,ain2.text,bft1.text,bin1.text,bft2.text,bin1.text。”这适用于需要三角化的任意多个点。我希望能够在这些类似的文本框中运行一个循环,并在它们上运行一个函数 因此,对于每个以abft+i和ain+i开头的文本框,运行inches函数来创建a1 同样地,创建b1 然后根据创建的xcoor

所以我知道这是相当草率的,但是我有很多关于简单三角测量程序(2d)的东西,我是个新手

用户在文本框中输入值-“aft1.text,ain1.text,aft2.text,ain2.text,bft1.text,bin1.text,bft2.text,bin1.text。”这适用于需要三角化的任意多个点。我希望能够在这些类似的文本框中运行一个循环,并在它们上运行一个函数

因此,对于每个以abft+i和ain+i开头的文本框,运行inches函数来创建a1

同样地,创建b1

然后根据创建的xcoord/ycoord函数在图表上绘制a+i和b+i的另一个循环

    Dim a1 As Double = inches(aft1.Text, ain1.Text)
    Dim b1 As Double = inches(bft1.Text, bin1.Text)

    If a1 <> 0 And b1 <> 0 Then
        Dim targetpoint As Int32
        targetpoint = Chart1.Series("Drawing").Points.AddXY((xcoord(a1, b1)), ((ycoord(a1, b1))))
        Chart1.Series("Drawing").Points.Item(targetpoint).Label = "1"
    End If

    Dim a2 As Double = inches(aft2.Text, ain2.Text)
    Dim b2 As Double = inches(bft2.Text, bin2.Text)

    If a2 <> 0 And b2 <> 0 Then
        Dim targetpoint As Int32
        targetpoint = Chart1.Series("Drawing").Points.AddXY((xcoord(a2, b2)), ((ycoord(a2, b2))))
        Chart1.Series("Drawing").Points.Item(targetpoint).Label = "2"
    End If


    Dim a3 As Double = inches(aft3.Text, ain3.Text)
    Dim b3 As Double = inches(bft3.Text, bin3.Text)

    If a3 <> 0 And b3 <> 0 Then
        Dim targetpoint As Int32
        targetpoint = Chart1.Series("Drawing").Points.AddXY((xcoord(a3, b3)), ((ycoord(a3, b3))))
        Chart1.Series("Drawing").Points.Item(targetpoint).Label = "3"
    End If
尺寸a1为双精度=英寸(aft1.Text,ain1.Text)
尺寸b1为双精度=英寸(bft1.Text,bin1.Text)
如果a1 0和b1 0,则
将目标点调暗为Int32
targetpoint=Chart1.系列(“图纸”).点.AddXY((xcoord(a1,b1)),((ycoord(a1,b1)))
图表1.系列(“图纸”).Points.Item(targetpoint).Label=“1”
如果结束
尺寸a2为双精度=英寸(aft2.Text,ain2.Text)
尺寸b2为双精度=英寸(bft2.Text,bin2.Text)
如果a2 0和b2 0,则
将目标点调暗为Int32
targetpoint=Chart1.系列(“绘图”).点.AddXY((xcoord(a2,b2)),((ycoord(a2,b2)))
图表1.系列(“图纸”).Points.Item(targetpoint).Label=“2”
如果结束
尺寸a3为双精度=英寸(aft3.Text,ain3.Text)
尺寸b3为双精度=英寸(bft3.Text,bin3.Text)
如果是a3 0和b3 0,则
将目标点调暗为Int32
targetpoint=Chart1.系列(“图纸”).点.AddXY((xcoord(a3,b3)),((ycoord(a3,b3)))
图表1.系列(“图纸”).Points.Item(targetpoint).Label=“3”
如果结束

如果我理解正确,可以通过创建Sub并使用英寸计算和标签文本调用它来轻松概括此代码,:oord是可访问的(范围内)函数:

Triangulate(inches(aft1.Text, ain1.Text), inches(bft1.Text, bin1.Text), 1)
Triangulate(inches(aft2.Text, ain2.Text), inches(bft2.Text, bin2.Text), 2)
Triangulate(inches(aft3.Text, ain3.Text), inches(bft3.Text, bin3.Text), 3)
编辑-2

虽然我已经测试了以下内容,但由于我没有您的图表属性,也没有inches、xcoord和ycoord函数,我无法完全测试它,所以请尝试一下,让我知道它是如何运行的

Sub TriangulateAll()
    Try

        Dim aft As New SortedList(Of String, TextBox)
        Dim ain As New SortedList(Of String, TextBox)
        Dim bft As New SortedList(Of String, TextBox)
        Dim bin As New SortedList(Of String, TextBox)

        For Each ctl As Control In Controls
            If TypeOf (ctl) Is TextBox Then
                Select Case ctl.Name.Substring(0, 3)
                    Case "aft"
                        aft.Add(ctl.Name, ctl)
                    Case "ain"
                        ain.Add(ctl.Name, ctl)
                    Case "bft"
                        bft.Add(ctl.Name, ctl)
                    Case "bin"
                        bin.Add(ctl.Name, ctl)
                End Select
            End If
        Next
        Dim a As New List(Of Double)
        Dim b As New List(Of Double)

        For Each kvp_aft As KeyValuePair(Of String, TextBox) In aft
            For Each kvp_ain As KeyValuePair(Of String, TextBox) In ain
                a.Add(inches(kvp_aft.Value.Text, kvp_ain.Value.Text))
            Next
        Next
        For Each kvp_bft As KeyValuePair(Of String, TextBox) In bft
            For Each kvp_bin As KeyValuePair(Of String, TextBox) In bin
                b.Add(inches(kvp_bft.Value.Text, kvp_bin.Value.Text))
            Next
        Next
        For i As Int16 = 0 To aft.Count - 1
            Triangulate(a(i), b(i), i.ToString())
        Next
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End Sub
编辑 用以下代码替换三角剖分的3个调用,以完全概括三角剖分例程。请注意,此例程期望每个文本框控件的数量相等:aft、ain、bft、bin。我还没有测试过这个,但它应该可以工作

    Dim aft As List(Of TextBox) = Nothing
    Dim ain As List(Of TextBox) = Nothing
    Dim bft As List(Of TextBox) = Nothing
    Dim bin As List(Of TextBox) = Nothing

    For Each ctl As Control In Controls
        If TypeOf (ctl) Is TextBox Then
            Select Case ctl.Name.Substring(0, 2)
                Case "aft"
                    aft.Add(ctl)
                Case "ain"
                    ain.Add(ctl)
                Case "bft"
                    bft.Add(ctl)
                Case "bin"
                    bin.Add(ctl)
            End Select
        End If
    Next
    aft.Sort()
    ain.Sort()
    bft.Sort()
    bin.Sort()

    For i As Int16 = 0 To aft.Count - 1
        Dim a As Double = inches(aft.Item(i).Text, ain.Item(i).Text)
        Dim b As Double = inches(bft.Item(i).Text, bin.Item(i).Text)
        Triangulate(a, b, i.ToString())
    Next

   Sub Triangulate(a As Double, b As Double, LabelValue As String)
       If a <> 0 And b <> 0 Then
           Dim targetpoint As Int32
           targetpoint = Chart1.Series("Drawing").Points.AddXY((xcoord(a, b)), ((ycoord(a, b))))
           Chart1.Series("Drawing").Points.Item(targetpoint).Label = LabelValue
       End If
   End Sub
Dim aft As List(文本框的列表)=无
Dim ain作为列表(文本框)=无
将bft设置为列表(文本框)=无
Dim bin As List(文本框的列表)=无
对于每个ctl作为控件中的控件
如果TypeOf(ctl)为文本框,则
选择Case ctl.Name.Substring(0,2)
“船尾”一案
尾部添加(控制)
案件“ain”
添加(控制)
案例“bft”
bft.Add(控制)
案例“bin”
bin.Add(ctl)
结束选择
如果结束
下一个
尾部排序
排序
bft.Sort()
bin.Sort()
对于i As Int16=0至尾部计数-1
尺寸a为双精度=英寸(后部项目(i).文本,后部项目(i).文本)
尺寸b为双精度=英寸(bft.项目(i).文本,bin.项目(i).文本)
三角化(a、b、i.ToString())
下一个
子三角剖分(a为双精度,b为双精度,LabelValue为字符串)
如果a 0和b 0,那么
将目标点调暗为Int32
targetpoint=Chart1.系列(“绘图”).点.AddXY((xcoord(a,b)),((ycoord(a,b)))
图表1.系列(“图纸”).点.项(目标点).标签=标签值
如果结束
端接头

哇,修复起来非常简单。然而,有没有一种方法可以让循环更进一步呢?三角测量(英寸(aft1.Text,ain1.Text),英寸(bft1.Text,bin1.Text),1)三角测量(英寸(aft2.Text,ain2.Text),英寸(bft2.Text,bin2.Text),2)三角测量(英寸(aft3.Text,ain3.Text),英寸(bft3.Text,bin3.Text),3)三角测量(英寸(aft4.Text,ain4.Text),英寸(bft4.Text,bin4.Text),4)这不起作用,然而,我没有时间测试它不止一次。我会更加努力,看看它很快会把我带到哪里。谢谢你帮我摆脱了目前的冗余!可以我们会解决的。如果你卡住了,请告诉我,我也会进行一些测试。这对我来说是一个有趣的想法,我很高兴你问了这个问题。是的,这是我最好的选择。没有弄清楚这个。我觉得我只是比较新,对这个循环还不够熟悉。还有,有没有一种方法可以让它在不点击按钮的情况下实时绘制图形?谢谢,埃文,我怀疑是这样的。当我今天有时间的时候,我会做一些测试,所以坚持住。