实现RadioButtonList自定义WinForm控件

实现RadioButtonList自定义WinForm控件目的:项目有需要,创建一个支持数据绑定的单选按钮列表。设想:动态识别多种数据源,动态生成一定数量的按钮。准备:创建一个自定义控件,添加一个Panel对象。优点:支持多种数据源做绑定,并可以自己添加自定义数据源。缺点:错误的抛出没有做到位,没有完全做到设计时定义所有数据。原因:懒。usingSystem;usingSystem.Collections.Generic;…

目的:项目有需要,创建一个支持数据绑定的单选按钮列表。
设想:动态识别多种数据源, 动态生成一定数量的按钮。
准备:创建一个自定义控件,添加一个Panel对象。
优点: 支持多种数据源做绑定,并可以自己添加自定义数据源。
缺点:错误的抛出没有做到位,没有完全做到设计时定义所有数据。原因:懒。

实现RadioButtonList自定义WinForm控件
using
 System;
实现RadioButtonList自定义WinForm控件

using
 System.Collections.Generic;
实现RadioButtonList自定义WinForm控件

using
 System.ComponentModel;
实现RadioButtonList自定义WinForm控件

using
 System.Drawing;
实现RadioButtonList自定义WinForm控件

using
 System.Data;
实现RadioButtonList自定义WinForm控件

using
 System.Text;
实现RadioButtonList自定义WinForm控件

using
 System.Windows.Forms;
实现RadioButtonList自定义WinForm控件

using
 System.Collections;
实现RadioButtonList自定义WinForm控件
实现RadioButtonList自定义WinForm控件

namespace
 RVProject
实现RadioButtonList自定义WinForm控件实现RadioButtonList自定义WinForm控件

实现RadioButtonList自定义WinForm控件
{

实现RadioButtonList自定义WinForm控件    
public partial class RadioButtonList : UserControl
实现RadioButtonList自定义WinForm控件实现RadioButtonList自定义WinForm控件    
实现RadioButtonList自定义WinForm控件{

实现RadioButtonList自定义WinForm控件实现RadioButtonList自定义WinForm控件        
Variable#region Variable
实现RadioButtonList自定义WinForm控件        
private Object _dataSource;
实现RadioButtonList自定义WinForm控件        
private ButtonValueMapping[] _mappings;
实现RadioButtonList自定义WinForm控件        
private Object _internalDataSource;
实现RadioButtonList自定义WinForm控件        
private string _displayMember;
实现RadioButtonList自定义WinForm控件        
private string _valueMember;
实现RadioButtonList自定义WinForm控件        
private string _value;
实现RadioButtonList自定义WinForm控件        
#endregion

实现RadioButtonList自定义WinForm控件        
实现RadioButtonList自定义WinForm控件实现RadioButtonList自定义WinForm控件        
ctor.#region ctor.
实现RadioButtonList自定义WinForm控件        
public RadioButtonList()
实现RadioButtonList自定义WinForm控件实现RadioButtonList自定义WinForm控件        
实现RadioButtonList自定义WinForm控件{

实现RadioButtonList自定义WinForm控件            InitializeComponent();
实现RadioButtonList自定义WinForm控件        }

实现RadioButtonList自定义WinForm控件        
#endregion

实现RadioButtonList自定义WinForm控件        
实现RadioButtonList自定义WinForm控件实现RadioButtonList自定义WinForm控件        
prop#region prop
实现RadioButtonList自定义WinForm控件        
public System.Object DataSource
实现RadioButtonList自定义WinForm控件实现RadioButtonList自定义WinForm控件        
实现RadioButtonList自定义WinForm控件{

实现RadioButtonList自定义WinForm控件            
get
实现RadioButtonList自定义WinForm控件实现RadioButtonList自定义WinForm控件            
实现RadioButtonList自定义WinForm控件{

实现RadioButtonList自定义WinForm控件                
return _dataSource;
实现RadioButtonList自定义WinForm控件            }

实现RadioButtonList自定义WinForm控件            
set
实现RadioButtonList自定义WinForm控件实现RadioButtonList自定义WinForm控件            
实现RadioButtonList自定义WinForm控件{

实现RadioButtonList自定义WinForm控件                _dataSource 
= value;
实现RadioButtonList自定义WinForm控件            }

实现RadioButtonList自定义WinForm控件        }

实现RadioButtonList自定义WinForm控件        
public string DisplayMember
实现RadioButtonList自定义WinForm控件实现RadioButtonList自定义WinForm控件        
实现RadioButtonList自定义WinForm控件{

实现RadioButtonList自定义WinForm控件            
get
实现RadioButtonList自定义WinForm控件实现RadioButtonList自定义WinForm控件            
实现RadioButtonList自定义WinForm控件{

实现RadioButtonList自定义WinForm控件                
return _displayMember;
实现RadioButtonList自定义WinForm控件            }

实现RadioButtonList自定义WinForm控件            
set
实现RadioButtonList自定义WinForm控件实现RadioButtonList自定义WinForm控件            
实现RadioButtonList自定义WinForm控件{

实现RadioButtonList自定义WinForm控件                _displayMember 
= value;
实现RadioButtonList自定义WinForm控件            }

实现RadioButtonList自定义WinForm控件        }

实现RadioButtonList自定义WinForm控件        
public string ValueMember
实现RadioButtonList自定义WinForm控件实现RadioButtonList自定义WinForm控件        
实现RadioButtonList自定义WinForm控件{

实现RadioButtonList自定义WinForm控件            
get
实现RadioButtonList自定义WinForm控件实现RadioButtonList自定义WinForm控件            
实现RadioButtonList自定义WinForm控件{

实现RadioButtonList自定义WinForm控件                
return _valueMember;
实现RadioButtonList自定义WinForm控件            }

实现RadioButtonList自定义WinForm控件            
set 
实现RadioButtonList自定义WinForm控件实现RadioButtonList自定义WinForm控件            
实现RadioButtonList自定义WinForm控件{

实现RadioButtonList自定义WinForm控件                _valueMember 
= value;
实现RadioButtonList自定义WinForm控件            }

实现RadioButtonList自定义WinForm控件        }

实现RadioButtonList自定义WinForm控件        
public string Value
实现RadioButtonList自定义WinForm控件实现RadioButtonList自定义WinForm控件        
实现RadioButtonList自定义WinForm控件{

实现RadioButtonList自定义WinForm控件            
get
实现RadioButtonList自定义WinForm控件实现RadioButtonList自定义WinForm控件            
实现RadioButtonList自定义WinForm控件{

实现RadioButtonList自定义WinForm控件                
return _value;
实现RadioButtonList自定义WinForm控件            }

实现RadioButtonList自定义WinForm控件            
set
实现RadioButtonList自定义WinForm控件实现RadioButtonList自定义WinForm控件            
实现RadioButtonList自定义WinForm控件{

实现RadioButtonList自定义WinForm控件                
if (Value != null)
实现RadioButtonList自定义WinForm控件实现RadioButtonList自定义WinForm控件                
实现RadioButtonList自定义WinForm控件{

实现RadioButtonList自定义WinForm控件                    _value 
= value;
实现RadioButtonList自定义WinForm控件                    SetValue(value);
实现RadioButtonList自定义WinForm控件                }

实现RadioButtonList自定义WinForm控件            }

实现RadioButtonList自定义WinForm控件
实现RadioButtonList自定义WinForm控件        }

实现RadioButtonList自定义WinForm控件        
#endregion

实现RadioButtonList自定义WinForm控件
实现RadioButtonList自定义WinForm控件实现RadioButtonList自定义WinForm控件        
event#region event
实现RadioButtonList自定义WinForm控件        
public delegate void RadioSelectedHandler(object sender, SelectedEventArgs e);
实现RadioButtonList自定义WinForm控件        
public event RadioSelectedHandler RadioItemSeleted;
实现RadioButtonList自定义WinForm控件        
#endregion

实现RadioButtonList自定义WinForm控件
实现RadioButtonList自定义WinForm控件实现RadioButtonList自定义WinForm控件        
public method#region public method
实现RadioButtonList自定义WinForm控件        
public void DataBind()
实现RadioButtonList自定义WinForm控件实现RadioButtonList自定义WinForm控件        
实现RadioButtonList自定义WinForm控件{

实现RadioButtonList自定义WinForm控件            
if (_dataSource == null)
实现RadioButtonList自定义WinForm控件                
throw new NullReferenceException(Null reference in Property: DataSource );
实现RadioButtonList自定义WinForm控件            PrepareData();
实现RadioButtonList自定义WinForm控件            DrawControl();
实现RadioButtonList自定义WinForm控件        }

实现RadioButtonList自定义WinForm控件        
#endregion

实现RadioButtonList自定义WinForm控件
实现RadioButtonList自定义WinForm控件        
//Internal Function
实现RadioButtonList自定义WinForm控件实现RadioButtonList自定义WinForm控件
        internal function#region internal function
实现RadioButtonList自定义WinForm控件        
void DrawControl()
实现RadioButtonList自定义WinForm控件实现RadioButtonList自定义WinForm控件        
实现RadioButtonList自定义WinForm控件{

实现RadioButtonList自定义WinForm控件            panel.Controls.Clear();
实现RadioButtonList自定义WinForm控件
实现RadioButtonList自定义WinForm控件            
int count = _mappings.Length;
实现RadioButtonList自定义WinForm控件            
//Draw and set control
实现RadioButtonList自定义WinForm控件
            int height = 0;
实现RadioButtonList自定义WinForm控件            
int x_aris = 10;
实现RadioButtonList自定义WinForm控件            
int y_aris = 10;
实现RadioButtonList自定义WinForm控件            
for (int i = 0; i < count; i++)
实现RadioButtonList自定义WinForm控件实现RadioButtonList自定义WinForm控件            
实现RadioButtonList自定义WinForm控件{

实现RadioButtonList自定义WinForm控件                
//create the radio button
实现RadioButtonList自定义WinForm控件
                RadioButton radio = new RadioButton();
实现RadioButtonList自定义WinForm控件                radio.Name 
= i.ToString();
实现RadioButtonList自定义WinForm控件                radio.Text 
= _mappings[i].Text;
实现RadioButtonList自定义WinForm控件                radio.AutoSize 
= true;
实现RadioButtonList自定义WinForm控件                
实现RadioButtonList自定义WinForm控件                
//put radio button into the panel
实现RadioButtonList自定义WinForm控件
                panel.Controls.Add(radio);
实现RadioButtonList自定义WinForm控件                radio.Location 
= new Point(x_aris, y_aris + height);
实现RadioButtonList自定义WinForm控件                height 
+= radio.Height;
实现RadioButtonList自定义WinForm控件                
实现RadioButtonList自定义WinForm控件                
//Add click event to radio button
实现RadioButtonList自定义WinForm控件
                radio.Click += new EventHandler(radio_Click);
实现RadioButtonList自定义WinForm控件            }

实现RadioButtonList自定义WinForm控件
实现RadioButtonList自定义WinForm控件
实现RadioButtonList自定义WinForm控件        }

实现RadioButtonList自定义WinForm控件        
//Deal with the data source. Add additional code here if you want some new type of objet to be the datasource.
实现RadioButtonList自定义WinForm控件
        void PrepareData()
实现RadioButtonList自定义WinForm控件实现RadioButtonList自定义WinForm控件        
实现RadioButtonList自定义WinForm控件{

实现RadioButtonList自定义WinForm控件            
//deal with the datasouce
实现RadioButtonList自定义WinForm控件
            
实现RadioButtonList自定义WinForm控件            
if (_dataSource is DataTable)
实现RadioButtonList自定义WinForm控件                _internalDataSource 
= ((DataTable)_dataSource).DefaultView;
实现RadioButtonList自定义WinForm控件            
if (_dataSource is DataView)
实现RadioButtonList自定义WinForm控件                _internalDataSource 
= _dataSource;
实现RadioButtonList自定义WinForm控件            
//Exception
实现RadioButtonList自定义WinForm控件
            if (_internalDataSource == nullthrow new InvalidCastException(The data source is not a desinged type.);
实现RadioButtonList自定义WinForm控件
实现RadioButtonList自定义WinForm控件            
//prepare the _radiobutton & _mappings to creat the radio listre
实现RadioButtonList自定义WinForm控件实现RadioButtonList自定义WinForm控件
            DataView & DataTable as data source#region DataView & DataTable as data source
实现RadioButtonList自定义WinForm控件            
if (_internalDataSource is DataView)
实现RadioButtonList自定义WinForm控件实现RadioButtonList自定义WinForm控件            
实现RadioButtonList自定义WinForm控件{

实现RadioButtonList自定义WinForm控件                
int radioCount = ((DataView)_internalDataSource).Count;
实现RadioButtonList自定义WinForm控件                _mappings 
= new ButtonValueMapping[radioCount];
实现RadioButtonList自定义WinForm控件                
try
实现RadioButtonList自定义WinForm控件实现RadioButtonList自定义WinForm控件                
实现RadioButtonList自定义WinForm控件{

实现RadioButtonList自定义WinForm控件                    
for (int i = 0; i < radioCount; i++)
实现RadioButtonList自定义WinForm控件实现RadioButtonList自定义WinForm控件                    
实现RadioButtonList自定义WinForm控件{

实现RadioButtonList自定义WinForm控件                        
//Set index
实现RadioButtonList自定义WinForm控件
                        _mappings[i].Index = i;
实现RadioButtonList自定义WinForm控件                        
//Set display text
实现RadioButtonList自定义WinForm控件
                        _mappings[i].Text = ((DataView)_internalDataSource)[i][_displayMember].ToString();
实现RadioButtonList自定义WinForm控件                        
//Set value
实现RadioButtonList自定义WinForm控件
                        if (_valueMember == null || _valueMember == string.Empty)
实现RadioButtonList自定义WinForm控件实现RadioButtonList自定义WinForm控件                        
实现RadioButtonList自定义WinForm控件{

实现RadioButtonList自定义WinForm控件                            _mappings[i].Value 
= i.ToString();
实现RadioButtonList自定义WinForm控件                        }

实现RadioButtonList自定义WinForm控件                        
else
实现RadioButtonList自定义WinForm控件实现RadioButtonList自定义WinForm控件                        
实现RadioButtonList自定义WinForm控件{

实现RadioButtonList自定义WinForm控件                            _mappings[i].Value 
= ((DataView)_internalDataSource)[i][_valueMember].ToString();
实现RadioButtonList自定义WinForm控件                        }

实现RadioButtonList自定义WinForm控件                    }

实现RadioButtonList自定义WinForm控件                }

实现RadioButtonList自定义WinForm控件                
catch (Exception e)
实现RadioButtonList自定义WinForm控件实现RadioButtonList自定义WinForm控件                
实现RadioButtonList自定义WinForm控件{

实现RadioButtonList自定义WinForm控件                    
throw e;
实现RadioButtonList自定义WinForm控件                }

实现RadioButtonList自定义WinForm控件            }

实现RadioButtonList自定义WinForm控件            
#endregion

实现RadioButtonList自定义WinForm控件        }

实现RadioButtonList自定义WinForm控件        
//internal event when a radio button is clicked. this fuction will call a public event.
实现RadioButtonList自定义WinForm控件
        void radio_Click(object sender, EventArgs e)
实现RadioButtonList自定义WinForm控件实现RadioButtonList自定义WinForm控件        
实现RadioButtonList自定义WinForm控件{

实现RadioButtonList自定义WinForm控件            _value 
= _mappings[int.Parse(((RadioButton)sender).Name)].Value;
实现RadioButtonList自定义WinForm控件            SelectedEventArgs se 
= new SelectedEventArgs();
实现RadioButtonList自定义WinForm控件            se.Value 
= _mappings[int.Parse(((RadioButton)sender).Name)].Value;
实现RadioButtonList自定义WinForm控件            RadioItemSeleted(
this, se);
实现RadioButtonList自定义WinForm控件        }

实现RadioButtonList自定义WinForm控件        
//When Value changes , the relative radio button is selected.
实现RadioButtonList自定义WinForm控件
        void SetValue(string value)
实现RadioButtonList自定义WinForm控件实现RadioButtonList自定义WinForm控件        
实现RadioButtonList自定义WinForm控件{

实现RadioButtonList自定义WinForm控件            
if (_mappings == null)
实现RadioButtonList自定义WinForm控件                
throw new NullReferenceException(Data has not bound to the control);
实现RadioButtonList自定义WinForm控件            
foreach(ButtonValueMapping map in _mappings)
实现RadioButtonList自定义WinForm控件实现RadioButtonList自定义WinForm控件            
实现RadioButtonList自定义WinForm控件{

实现RadioButtonList自定义WinForm控件                
if (map.Value == value)
实现RadioButtonList自定义WinForm控件实现RadioButtonList自定义WinForm控件                
实现RadioButtonList自定义WinForm控件{

实现RadioButtonList自定义WinForm控件                    ((RadioButton)panel.Controls[map.Index.ToString()]).Checked 
= true;
实现RadioButtonList自定义WinForm控件                }

实现RadioButtonList自定义WinForm控件            }

实现RadioButtonList自定义WinForm控件        }

实现RadioButtonList自定义WinForm控件        
#endregion

实现RadioButtonList自定义WinForm控件
实现RadioButtonList自定义WinForm控件        
internal struct ButtonValueMapping
实现RadioButtonList自定义WinForm控件实现RadioButtonList自定义WinForm控件        
实现RadioButtonList自定义WinForm控件{

实现RadioButtonList自定义WinForm控件            
public int Index;
实现RadioButtonList自定义WinForm控件            
public string Value;
实现RadioButtonList自定义WinForm控件            
public string Text;
实现RadioButtonList自定义WinForm控件        }

实现RadioButtonList自定义WinForm控件
实现RadioButtonList自定义WinForm控件        
public class SelectedEventArgs : EventArgs
实现RadioButtonList自定义WinForm控件实现RadioButtonList自定义WinForm控件        
实现RadioButtonList自定义WinForm控件{

实现RadioButtonList自定义WinForm控件            
public string Value;
实现RadioButtonList自定义WinForm控件        }

实现RadioButtonList自定义WinForm控件    }

实现RadioButtonList自定义WinForm控件}

转载于:https://www.cnblogs.com/deltag1984/archive/2008/06/06/1215368.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/37061.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注