方法.GetProperties for PictureBox



我正在尝试运行代码,在windows的形式使用vb.net,我有多个图片框的属性,如背景和位置。

所以我想消除这些重复的初始化,因此我试图使用GetType初始化所有控件。getproperty命令。但是我得到一个异常错误

Private Sub Read_csv_file_itextbox_Load_1(sender As Object, e As EventArgs) Handles MyBase.Load
For Each c As Control In Me.Controls
If c.GetType().Name = "TextBox" Then
c.GetType().GetProperty("BackColor").SetValue(c, "Transparent", Nothing)
End If
Next
End Sub

我还需要显式地为一些命名为TextBox1,TextBox2, Textbox3等的文本框设置属性。

我想访问这些文本框在他们的偶数索引和执行我的代码。

在你发布的代码中做你想做的事情的正确方法是:

For Each tb In Controls.OfType(Of TextBox)()
tb.BackColor = Color.Transparent
Next

没有充分的理由不要使用反射

注意,将TextBoxBackColor设置为Transparent不一定有意义,但您可以对任何类型的控件、任何属性和任何值使用相同的原则。

如果你想使用LINQ过滤任何列表,那么你调用Where方法。由您决定要过滤的条件是什么,并编写适当的Boolean表达式,例如

For Each tb In Controls.OfType(Of TextBox)().
Where(Function(tb) Enumerable.Range(1, 10).
Where(Function(n) n Mod 2 = 0).
Select(Function(n) $"TextBox{n}").
Contains(tb.Name))
tb.BackColor = Color.Transparent
Next

这将首先生成TextBoxes的列表,然后在Name上过滤它们。它将只包括NameTextBoxNN是1到10范围内的偶数的那些。这是一个首先确定逻辑的完美例子,即计算出代码需要做什么,然后编写代码来专门完成该任务。

相关内容

  • 没有找到相关文章

最新更新