場景 有時候需要根據配置文件在窗體中使用代碼動態生成控制項。 比如讀取xml配置文件中的節點數量,然後在窗體中生成指定數量的RadioGroup控制項。 實現 新建一個窗體,在窗體的載入完之後的事件中 傳入配置文件路徑,然後生成控制項。 註: 1.生成控制項對象。 2.設置控制項對象的顯示值text屬性以及寬 ...
場景
有時候需要根據配置文件在窗體中使用代碼動態生成控制項。
比如讀取xml配置文件中的節點數量,然後在窗體中生成指定數量的RadioGroup控制項。
實現
新建一個窗體,在窗體的載入完之後的事件中
private void ChartOption_Load(object sender, EventArgs e) { //根據配置文件路徑初始化圖形選項Dialog initChartOptionPane(Global.RADIO_GROUP_YAXIS_FILEPATH); }
傳入配置文件路徑,然後生成控制項。
public void initChartOptionPane(string xmlFilePath) { //不同組水平方向控制項之間的距離 = 控制項的寬度 + 組與組之間的距離 int horizontalDistance = Global.NOGROUP_HORIZONTAL_DISTANCE + Global.CHART_OPTION_WIDTH; //獲取Y軸的list List<YAxisModel> yList = ChartOptionHelper.getYAxisList(xmlFilePath); //獲取配置文件中的radioGroup的選項 List<string> radioGrupItems = initRadioGroupItem(Global.RADIO_GROUP_ITEM_FILEPATH); //生成對應組元素 for (int i = 0; i < yList.Count; i++) { //生成一個radioGroup RadioGroup radioGroup = new RadioGroup(); foreach (string s in radioGrupItems) { //每一個單元按鈕對應的選項item RadioGroupItem item = new RadioGroupItem(); //設置選項的value值 item.Value = s; //設置選項的描述值 即 要顯示的值 item.Description = s; //使選項啟用 item.Enabled = true; //將新增的選項添加到radiogroup的Items中 radioGroup.Properties.Items.Add(item); } //設置寬度 radioGroup.Width = Global.CHART_OPTION_WIDTH; //加1 保留出空白選項的高度 radioGroup.Height = Global.RADIO_HEIGHT * (radioGrupItems.Count + 1); //設置位置 radioGroup.Location = new Point(Global.NOGROUP_HORIZONTAL_DISTANCE + i * horizontalDistance, Global.GROUP_VERTICAL_DISTANCE); this.Controls.Add(radioGroup); //添加下限輸入框 TextEdit minTextEdit = new TextEdit(); minTextEdit.Text = yList[i].Min.ToString(); minTextEdit.Width = Global.CHART_OPTION_WIDTH; minTextEdit.Location = new Point(Global.NOGROUP_HORIZONTAL_DISTANCE + i * horizontalDistance, Global.GROUP_VERTICAL_DISTANCE * 2 + radioGroup.Height); this.Controls.Add(minTextEdit); //添加上限輸入框 TextEdit maxTextEdit = new TextEdit(); maxTextEdit.Text = yList[i].Max.ToString(); maxTextEdit.Location = new Point(Global.NOGROUP_HORIZONTAL_DISTANCE + i * horizontalDistance, Global.GROUP_VERTICAL_DISTANCE * 3 + radioGroup.Height + minTextEdit.Height); maxTextEdit.Width = Global.CHART_OPTION_WIDTH; this.Controls.Add(maxTextEdit); //添加顏色選擇器 ColorPickEdit colorPickEdit = new ColorPickEdit(); colorPickEdit.Text = yList[i].Color; colorPickEdit.Width = Global.CHART_OPTION_WIDTH; colorPickEdit.Location = new Point(Global.NOGROUP_HORIZONTAL_DISTANCE + i * horizontalDistance, Global.GROUP_VERTICAL_DISTANCE * 4 + radioGroup.Height + minTextEdit.Height + maxTextEdit.Height); this.Controls.Add(colorPickEdit); } }
註:
1.生成控制項對象。
2.設置控制項對象的顯示值text屬性以及寬度等屬性。
3.設置控制項的位置。
4.將控制項添加進窗體。
主要實現代碼:
for (int i = 0; i < yList.Count; i++) { //生成一個radioGroup RadioGroup radioGroup = new RadioGroup(); foreach (string s in radioGrupItems) { //每一個單元按鈕對應的選項item RadioGroupItem item = new RadioGroupItem(); //設置選項的value值 item.Value = s; //設置選項的描述值 即 要顯示的值 item.Description = s; //使選項啟用 item.Enabled = true; //將新增的選項添加到radiogroup的Items中 radioGroup.Properties.Items.Add(item); } //設置寬度 radioGroup.Width = Global.CHART_OPTION_WIDTH; //加1 保留出空白選項的高度 radioGroup.Height = Global.RADIO_HEIGHT * (radioGrupItems.Count + 1); //設置位置 radioGroup.Location = new Point(Global.NOGROUP_HORIZONTAL_DISTANCE + i * horizontalDistance, Global.GROUP_VERTICAL_DISTANCE); this.Controls.Add(radioGroup); //添加下限輸入框 TextEdit minTextEdit = new TextEdit(); minTextEdit.Text = yList[i].Min.ToString(); minTextEdit.Width = Global.CHART_OPTION_WIDTH; minTextEdit.Location = new Point(Global.NOGROUP_HORIZONTAL_DISTANCE + i * horizontalDistance, Global.GROUP_VERTICAL_DISTANCE * 2 + radioGroup.Height); this.Controls.Add(minTextEdit); //添加上限輸入框 TextEdit maxTextEdit = new TextEdit(); maxTextEdit.Text = yList[i].Max.ToString(); maxTextEdit.Location = new Point(Global.NOGROUP_HORIZONTAL_DISTANCE + i * horizontalDistance, Global.GROUP_VERTICAL_DISTANCE * 3 + radioGroup.Height + minTextEdit.Height); maxTextEdit.Width = Global.CHART_OPTION_WIDTH; this.Controls.Add(maxTextEdit); //添加顏色選擇器 ColorPickEdit colorPickEdit = new ColorPickEdit(); colorPickEdit.Text = yList[i].Color; colorPickEdit.Width = Global.CHART_OPTION_WIDTH; colorPickEdit.Location = new Point(Global.NOGROUP_HORIZONTAL_DISTANCE + i * horizontalDistance, Global.GROUP_VERTICAL_DISTANCE * 4 + radioGroup.Height + minTextEdit.Height + maxTextEdit.Height); this.Controls.Add(colorPickEdit); }
效果
關註公眾號
霸道的程式猿
獲取編程相關電子書、教程推送與免費下載。