LINQ 菜谱, 菜单1: 改变Windows 窗体上所有标签的字体

[原文作者]: Kit George

[原文链接]: LINQ Cookbook, Recipe 1: Change the font for all labels on a windows form

 

我们打算启动一个LINQ菜谱项目,并逐步将它完成。这个项目的目的是为你在编程和用查询时遇到的一些特殊情况提供解决的方案。我再也想不出一个更好的方式,来关联你能利用LINQ所做的每件事情了。

 

这个系列项目主要是为您展示LINQ可以做到的各式各样的事情。像任何一本好菜谱一样,我们将为这本菜谱做分类,那样你之后就可以很容易地查询。但是不要希望一个特定的菜谱会有大量的描述,尽管它会包含重现步骤。请尽管向我们要求任何你想要看到的菜谱,而我们将尽可能多地创造新的。

 

材料:

      Visual Studio 2008 (Beta2 或更高版本)

 

类别:

      LINQ-To-ObjectsLINQ with Windows FormsLINQ with controlsLabel

 

制作方法:

      打开 Visual Studio 2008,点击文件/新建项目找到并双击Windows窗体应用程序图标。

      增加窗体的大小,使其足够容纳一定数量的控件。

      从工具箱中拖放几个控件到窗体上,确保至少添加3-4个标签控件。

      o  我个人比较喜欢的是两个分组控件(GroupBox)在文本框(TextBox)前放两个标签(Label)(标签在分组控件之上)并在每个分组控件中放一对单选框(RadioButton)控件。这样可以确保测试递归代码。

      添加一个按钮到窗体上并把它的Text属性改为Go双击这个按钮,然后修改事件处理代码并添加下面的方法:

 

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        For Each label In GetLabels(Me)

            label.Font = New Font(“Comic Sans MS”, 12, _

                                  FontStyle.Bold Or FontStyle.Underline)

        Next

    End Sub

 

    Private Function GetLabels(ByVal sourceControl As Control) _

                               As IEnumerable(Of Control)

        If sourceControl.Controls.Count > 0 Then

            Dim labels = From cont As Control In sourceControl.Controls _

                         Where TypeOf cont Is Label _

                         Select cont

 

            For Each c As Control In sourceControl.Controls

                labels = labels.Union(GetLabels(c))

            Next

 

            Return labels

        End If

 

        Return New List(Of Control)

    End Function

 

     修改New Font所在的那行代码为你想要的字体样式。