反射设置当前窗体所有控件的Text

时间:2021-09-08 20:40:37

在我们编程的时候,有时需要动态的获取当前窗体控件的Text,但是又不能一个一个控件的设置,这个时候可以通过反射来动态设置。

第一步:先建立一个类来保存控件的Text信息。

反射设置当前窗体所有控件的Text反射设置当前窗体所有控件的Text
public class ControlInfo
    {
        private string name;
        private string text;
        public string Name
        {
            get
            {
                return name;
            }
            set
            {
                name = value;
            }
        }
        public string Text
        {
            get
            {
                return text;
            }
            set
            {
                text = value;
            }
        }
    }
控件信息类

第二步:建立一个存储这些控件的变量。

public List<ControlInfo> LstControlInfo;

第三步:从外部获取控件信息存储到LstControlInfo中。

第四步:通过发射将LstControlInfo里的控件Text设置到form中。

以下是保存的具体代码:

反射设置当前窗体所有控件的Text反射设置当前窗体所有控件的Text
foreach (var field in form.GetType().GetFields(System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public))
                    {
                        if (LstControlInfo.Exists(m => m.Name == field.Name))
                        {
                            ControlInfo control = LstControlInfo.Find(m => m.Name == field.Name);
                            PropertyInfo proText = field.FieldType.GetProperty("Text");
                            if (field.FieldType == typeof(System.Windows.Forms.Label) ||
                                field.FieldType == typeof(DevComponents.DotNetBar.LabelX)
                                )
                            {
                                proText.SetValue(field.GetValue(form), control.Text, null);
                            }
                            else if (field.FieldType == typeof(System.Windows.Forms.Button) ||
                                field.FieldType == typeof(DevComponents.DotNetBar.ButtonX) ||
                                field.FieldType == typeof(GPOS.Controls.ButtonNew)
                                )
                            {
                                proText.SetValue(field.GetValue(form), control.Text, null);
                            }
                            else if (field.FieldType == typeof(DevComponents.DotNetBar.ButtonItem) ||
                                //field.FieldType == typeof(DevComponents.DotNetBar.TextBoxItem) ||
                                field.FieldType == typeof(DevComponents.DotNetBar.LabelItem)
                                )
                            {
                                proText.SetValue(field.GetValue(form), control.Text, null);
                            }
                            else if (field.FieldType == typeof(System.Windows.Forms.ToolStripMenuItem)
                                )
                            {
                                proText.SetValue(field.GetValue(form), control.Text, null);
                            }
                            else if (field.FieldType == typeof(System.Windows.Forms.ToolStripButton)
                                )
                            {
                                proText.SetValue(field.GetValue(form), control.Text, null);
                                PropertyInfo proToolTipText = field.FieldType.GetProperty("ToolTipText");
                                proToolTipText.SetValue(field.GetValue(form), control.Text, null);
                            }
                            else if (field.FieldType == typeof(System.Windows.Forms.CheckBox) ||
                                 field.FieldType == typeof(DevComponents.DotNetBar.Controls.CheckBoxX)
                                )
                            {
                                proText.SetValue(field.GetValue(form), control.Text, null);
                            }
                            else if (field.FieldType == typeof(System.Windows.Forms.DataGridViewTextBoxColumn) ||
                                 field.FieldType == typeof(System.Windows.Forms.DataGridViewCheckBoxColumn)
                                )
                            {
                                PropertyInfo proHeaderText = field.FieldType.GetProperty("HeaderText");
                                proHeaderText.SetValue(field.GetValue(form), control.Text, null);
                            }
                        }
                    }
具体设置代码