我有一个涉及多个文本框和标签的项目。在选项卡中将有3个groupbox(gb)。 gb1将有单选按钮可供选择。 gb2将有一些标签和2行文本框。 gb3将包含所有将根据gb2中文本框中的用户输入进行修改的标签。 gp2中的标签和文本框将按行和列排列,并在运行时通过选择radiobutton2创建。
我想要完成的是从一行标签中获取数据,并且gb2中的两行8个文本框在gb3中按照从左到右的顺序排列为三个标签,基于文本长度为5的底部文本框和textchanged事件处理程序。请注意,并非所有框都需要填充。
例如,第1列和第4列下面的两个文本框都有用户输入。我想在gb3中使用两个单独的标签来按顺序显示用户输入,第1列为第1列,第4列为第2列。
如果没有构建卡车装载的if和then语句,怎么会这样呢?
e.g。
if textbox9.textlength = 5 and textbox12.textlength = 5 then
label17.text= textbox1.text & " " & textbox4.text
label18.text= textbox9.text & " " & textbox12.text
end if
要编码的所有8列文本框的用户输入组合太多。寻找更智能的解决方案。
也许这会有所帮助
答案 0 :(得分:0)
也许创建一个子程序可能有帮助,朋友。
子例程是一组代码,当您调用它并为其提供适当的参数时,它会运行某个任务。
代替给出的例子,也许以下内容可以帮助您
Public Sub ManipulateLables(ByVal FirstTextToCheck as Textbox, _
ByVal SecondTextToCheck as Textbox, _
ByVal FirstLabel as Label, _
ByVal SecondLabel as Label, _
ByVal FirstText as Textbox, _
ByVal SecondText as Textbox, _
ByVal ThirdText as Textbox, _
ByVal FourthText as Textbox)
If FirstTextToCheck.textlength = 5 and SecondTextToCheck.textlength = 5 then
FirstLabel.text= FirstText.text & " " & SecondText.text
SecondLabel.text= ThirdText.text & " " & FourthText.text
End If
End Sub
现在,您可以通过绑定到事件处理程序的子例程来调用它们 例如:按下按钮:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
ManipulateLabels(textbox9, textbox12, label17,label18, textbox1, textbox4, textbox9, textbox12)
End Sub
这里发生的事情是我们调用了ManipulateLabels子程序,并将我们希望受子程序影响的控件作为Arguments传递。
子程序中的FirstToCheck现在变为Textbox9,SecondToCheck变为textbox12,依此类推。
如果这对您有所帮助,请告诉我们。
答案 1 :(得分:0)
我完全不了解你的要求。但这里有一个例子,建立在我自己的要求上,希望离你的不太远。在这个例子中,我在设计器中声明了4个TextBox,1个Label和1个Button。该应用程序的作用:
屏幕截图:
TextBox名称(从左到右):TextBox1,TextBox2,TextBox3,TextBox4
代码段:
Dim TextBoxes As List(Of TextBox)
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
TextBoxes = New List(Of TextBox)()
For Each control As Control In TabPage1.Controls.Cast(Of Control).Where(Function(x) TypeOf x Is TextBox)
TextBoxes.Add(control)
Next
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Label1.Text = ""
For Each textBox As TextBox In TextBoxes.Where(Function(x) x.Text.Length > 0).OrderBy(Function(x) CInt(x.Replace("TextBox", "")))
Label1.Text &= textBox.Text & " "
Next
End Sub
由于TextBox是根据您的情况从代码创建的,因此您可以在创建后将TextBox添加到列表中。我希望你能得到这个想法,并进一步希望这个概念适用于你的情况。
答案 2 :(得分:0)
如果按顺序命名文本框,使用Name-col,row格式,可以将它们展平为一个列表并检查是否有文本并将它们连接在一起。这样您就可以从名称中获取文本框的col,row位置。这样的东西可以工作,我使用“输入”作为文本框的名称:
'This uses linq to flatten the result to an array, then join is used to create _
a string with spaces between
label1.Text = Join(gb2.Controls _
.OfType(Of TextBox)() _
.Where(Function(w) w.Name.Contains("Input") AndAlso Not w.Text = "") _
.OrderBy(Function(t) t.Name).ToArray, " ")
label1.Text = String.Join(" ", gb2.Controls _
.OfType(Of TextBox)() _
.Where(Function(w) w.Name.Contains("Input") AndAlso Not w.Text = "") _
.OrderBy(Function(t) t.Name))
如果您使用的是旧版本的VS
,则可能需要Imports System.Linq