官网

http://www.hzhcontrols.com

前提

入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章。

GitHub:https://github.com/kwwwvagaa/NetWinformControl

码云:https://gitee.com/kwwwvagaa/net_winform_custom_control.git

如果觉得写的还行,请点个 star 支持一下吧

欢迎前来交流探讨: 企鹅群568015492 

麻烦博客下方点个【推荐】,谢谢

NuGet

Install-Package HZH_Controls

目录

https://www.cnblogs.com/bfyx/p/11364884.html

用处及效果

   List<DataGridViewColumnEntity> lstCulumns = new List<DataGridViewColumnEntity>();
lstCulumns.Add(new DataGridViewColumnEntity() { DataField = "ID", HeadText = "编号", Width = , WidthType = SizeType.Absolute });
lstCulumns.Add(new DataGridViewColumnEntity() { DataField = "Name", HeadText = "姓名", Width = , WidthType = SizeType.Absolute });
lstCulumns.Add(new DataGridViewColumnEntity() { DataField = "Age", HeadText = "年龄", Width = , WidthType = SizeType.Absolute });
lstCulumns.Add(new DataGridViewColumnEntity() { DataField = "Birthday", HeadText = "生日", Width = , WidthType = SizeType.Absolute, Format = (a) => { return ((DateTime)a).ToString("yyyy-MM-dd"); } });
lstCulumns.Add(new DataGridViewColumnEntity() { DataField = "Sex", HeadText = "性别", Width = , WidthType = SizeType.Absolute, Format = (a) => { return ((int)a) == ? "女" : "男"; } });
this.ucComboxGrid1.GridColumns = lstCulumns;
List<object> lstSourceGrid = new List<object>();
for (int i = ; i < ; i++)
{
TestModel model = new TestModel()
{
ID = i.ToString(),
Age = * i,
Name = "姓名——" + i,
Birthday = DateTime.Now.AddYears(-),
Sex = i %
};
lstSourceGrid.Add(model);
}
this.ucComboxGrid1.GridDataSource = lstSourceGrid;

准备工作

此控件继承自UCCombox,并且需要表格控件UCDataGridView,如果不了解请移步查看

(三十五)c#Winform自定义控件-下拉框

(三十二)c#Winform自定义控件-表格

如果你想显示树形结构,请移步查看

(四十七)c#Winform自定义控件-树表格(treeGrid)

开始

我们首先需要一个弹出的面板,那么我们先添加一个用户控件UCComboxGridPanel,在这个用户控件上添加一个文本框进行搜索,添加一个表格展示数据

一些属性

  [Description("项点击事件"), Category("自定义")]
public event DataGridViewEventHandler ItemClick;
private Type m_rowType = typeof(UCDataGridViewRow); public Type RowType
{
get { return m_rowType; }
set
{
m_rowType = value;
this.ucDataGridView1.RowType = m_rowType;
}
} private List<DataGridViewColumnEntity> m_columns = null; public List<DataGridViewColumnEntity> Columns
{
get { return m_columns; }
set
{
m_columns = value;
this.ucDataGridView1.Columns = value;
}
}
private List<object> m_dataSource = null; public List<object> DataSource
{
get { return m_dataSource; }
set { m_dataSource = value; }
} private string strLastSearchText = string.Empty;
UCPagerControl m_page = new UCPagerControl();

一些事件,处理数据绑定

  void ucDataGridView1_ItemClick(object sender, DataGridViewEventArgs e)
{
if (ItemClick != null)
{
ItemClick((sender as IDataGridViewRow).DataSource, null);
}
} void txtInput_TextChanged(object sender, EventArgs e)
{
timer1.Enabled = false;
timer1.Enabled = true;
} private void UCComboxGridPanel_Load(object sender, EventArgs e)
{
m_page.DataSource = m_dataSource;
this.ucDataGridView1.DataSource = m_page.GetCurrentSource();
} private void timer1_Tick(object sender, EventArgs e)
{
if (strLastSearchText == txtSearch.InputText)
{
timer1.Enabled = false;
}
else
{
strLastSearchText = txtSearch.InputText;
Search(txtSearch.InputText);
}
} private void Search(string strText)
{
m_page.StartIndex = ;
if (!string.IsNullOrEmpty(strText))
{
strText = strText.ToLower();
List<object> lst = m_dataSource.FindAll(p => m_columns.Any(c => (c.Format == null ? (p.GetType().GetProperty(c.DataField).GetValue(p, null).ToStringExt()) : c.Format(p.GetType().GetProperty(c.DataField).GetValue(p, null))).ToLower().Contains(strText)));
m_page.DataSource = lst;
}
else
{
m_page.DataSource = m_dataSource;
}
m_page.Reload();
}

完整代码

 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms; namespace HZH_Controls.Controls.ComboBox
{
[ToolboxItem(false)]
public partial class UCComboxGridPanel : UserControl
{
[Description("项点击事件"), Category("自定义")]
public event DataGridViewEventHandler ItemClick;
private Type m_rowType = typeof(UCDataGridViewRow); public Type RowType
{
get { return m_rowType; }
set
{
m_rowType = value;
this.ucDataGridView1.RowType = m_rowType;
}
} private List<DataGridViewColumnEntity> m_columns = null; public List<DataGridViewColumnEntity> Columns
{
get { return m_columns; }
set
{
m_columns = value;
this.ucDataGridView1.Columns = value;
}
}
private List<object> m_dataSource = null; public List<object> DataSource
{
get { return m_dataSource; }
set { m_dataSource = value; }
} private string strLastSearchText = string.Empty;
UCPagerControl m_page = new UCPagerControl(); public UCComboxGridPanel()
{
InitializeComponent();
this.ucDataGridView1.Page = m_page;
this.ucDataGridView1.IsAutoHeight = false;
this.txtSearch.txtInput.TextChanged += txtInput_TextChanged;
this.ucDataGridView1.ItemClick += ucDataGridView1_ItemClick;
} void ucDataGridView1_ItemClick(object sender, DataGridViewEventArgs e)
{
if (ItemClick != null)
{
ItemClick((sender as IDataGridViewRow).DataSource, null);
}
} void txtInput_TextChanged(object sender, EventArgs e)
{
timer1.Enabled = false;
timer1.Enabled = true;
} private void UCComboxGridPanel_Load(object sender, EventArgs e)
{
m_page.DataSource = m_dataSource;
this.ucDataGridView1.DataSource = m_page.GetCurrentSource();
} private void timer1_Tick(object sender, EventArgs e)
{
if (strLastSearchText == txtSearch.InputText)
{
timer1.Enabled = false;
}
else
{
strLastSearchText = txtSearch.InputText;
Search(txtSearch.InputText);
}
} private void Search(string strText)
{
m_page.StartIndex = ;
if (!string.IsNullOrEmpty(strText))
{
strText = strText.ToLower();
List<object> lst = m_dataSource.FindAll(p => m_columns.Any(c => (c.Format == null ? (p.GetType().GetProperty(c.DataField).GetValue(p, null).ToStringExt()) : c.Format(p.GetType().GetProperty(c.DataField).GetValue(p, null))).ToLower().Contains(strText)));
m_page.DataSource = lst;
}
else
{
m_page.DataSource = m_dataSource;
}
m_page.Reload();
}
}
}
 namespace HZH_Controls.Controls.ComboBox
{
partial class UCComboxGridPanel
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null; /// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
} #region 组件设计器生成的代码 /// <summary>
/// 设计器支持所需的方法 - 不要
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.panel1 = new System.Windows.Forms.Panel();
this.panel2 = new System.Windows.Forms.Panel();
this.timer1 = new System.Windows.Forms.Timer(this.components);
this.ucControlBase1 = new HZH_Controls.Controls.UCControlBase();
this.ucDataGridView1 = new HZH_Controls.Controls.UCDataGridView();
this.txtSearch = new HZH_Controls.Controls.UCTextBoxEx();
this.ucSplitLine_V2 = new HZH_Controls.Controls.UCSplitLine_V();
this.ucSplitLine_V1 = new HZH_Controls.Controls.UCSplitLine_V();
this.ucSplitLine_H2 = new HZH_Controls.Controls.UCSplitLine_H();
this.ucSplitLine_H1 = new HZH_Controls.Controls.UCSplitLine_H();
this.panel1.SuspendLayout();
this.ucControlBase1.SuspendLayout();
this.SuspendLayout();
//
// panel1
//
this.panel1.Controls.Add(this.ucControlBase1);
this.panel1.Controls.Add(this.panel2);
this.panel1.Controls.Add(this.txtSearch);
this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel1.Location = new System.Drawing.Point(, );
this.panel1.Name = "panel1";
this.panel1.Padding = new System.Windows.Forms.Padding();
this.panel1.Size = new System.Drawing.Size(, );
this.panel1.TabIndex = ;
//
// panel2
//
this.panel2.Dock = System.Windows.Forms.DockStyle.Top;
this.panel2.Location = new System.Drawing.Point(, );
this.panel2.Name = "panel2";
this.panel2.Size = new System.Drawing.Size(, );
this.panel2.TabIndex = ;
//
// timer1
//
this.timer1.Interval = ;
this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
//
// ucControlBase1
//
this.ucControlBase1.ConerRadius = ;
this.ucControlBase1.Controls.Add(this.ucDataGridView1);
this.ucControlBase1.Dock = System.Windows.Forms.DockStyle.Fill;
this.ucControlBase1.FillColor = System.Drawing.Color.Transparent;
this.ucControlBase1.Font = new System.Drawing.Font("微软雅黑", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel);
this.ucControlBase1.IsRadius = false;
this.ucControlBase1.IsShowRect = true;
this.ucControlBase1.Location = new System.Drawing.Point(, );
this.ucControlBase1.Margin = new System.Windows.Forms.Padding(, , , );
this.ucControlBase1.Name = "ucControlBase1";
this.ucControlBase1.Padding = new System.Windows.Forms.Padding();
this.ucControlBase1.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)()))), ((int)(((byte)()))), ((int)(((byte)()))));
this.ucControlBase1.RectWidth = ;
this.ucControlBase1.Size = new System.Drawing.Size(, );
this.ucControlBase1.TabIndex = ;
this.ucControlBase1.TabStop = false;
//
// ucDataGridView1
//
this.ucDataGridView1.BackColor = System.Drawing.Color.White;
this.ucDataGridView1.Columns = null;
this.ucDataGridView1.DataSource = null;
this.ucDataGridView1.Dock = System.Windows.Forms.DockStyle.Fill;
this.ucDataGridView1.HeadFont = new System.Drawing.Font("微软雅黑", 12F);
this.ucDataGridView1.HeadHeight = ;
this.ucDataGridView1.HeadPadingLeft = ;
this.ucDataGridView1.HeadTextColor = System.Drawing.Color.Black;
this.ucDataGridView1.IsAutoHeight = false;
this.ucDataGridView1.IsShowCheckBox = false;
this.ucDataGridView1.IsShowHead = true;
this.ucDataGridView1.Location = new System.Drawing.Point(, );
this.ucDataGridView1.Name = "ucDataGridView1";
this.ucDataGridView1.Page = null;
this.ucDataGridView1.RowHeight = ;
this.ucDataGridView1.RowType = typeof(HZH_Controls.Controls.UCDataGridViewRow);
this.ucDataGridView1.Size = new System.Drawing.Size(, );
this.ucDataGridView1.TabIndex = ;
this.ucDataGridView1.TabStop = false;
//
// txtSearch
//
this.txtSearch.BackColor = System.Drawing.Color.Transparent;
this.txtSearch.ConerRadius = ;
this.txtSearch.Cursor = System.Windows.Forms.Cursors.IBeam;
this.txtSearch.DecLength = ;
this.txtSearch.Dock = System.Windows.Forms.DockStyle.Top;
this.txtSearch.FillColor = System.Drawing.Color.Empty;
this.txtSearch.Font = new System.Drawing.Font("微软雅黑", 18F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel);
this.txtSearch.InputText = "";
this.txtSearch.InputType = HZH_Controls.TextInputType.NotControl;
this.txtSearch.IsFocusColor = true;
this.txtSearch.IsRadius = true;
this.txtSearch.IsShowClearBtn = true;
this.txtSearch.IsShowKeyboard = false;
this.txtSearch.IsShowRect = true;
this.txtSearch.IsShowSearchBtn = false;
this.txtSearch.KeyBoardType = HZH_Controls.Controls.KeyBoardType.UCKeyBorderAll_EN;
this.txtSearch.Location = new System.Drawing.Point(, );
this.txtSearch.Margin = new System.Windows.Forms.Padding(, , , );
this.txtSearch.MaxValue = new decimal(new int[] {
,
,
,
});
this.txtSearch.MinValue = new decimal(new int[] {
,
,
,
-});
this.txtSearch.Name = "txtSearch";
this.txtSearch.Padding = new System.Windows.Forms.Padding();
this.txtSearch.PromptColor = System.Drawing.Color.Gray;
this.txtSearch.PromptFont = new System.Drawing.Font("微软雅黑", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel);
this.txtSearch.PromptText = "输入内容模糊搜索";
this.txtSearch.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)()))), ((int)(((byte)()))), ((int)(((byte)()))));
this.txtSearch.RectWidth = ;
this.txtSearch.RegexPattern = "";
this.txtSearch.Size = new System.Drawing.Size(, );
this.txtSearch.TabIndex = ;
//
// ucSplitLine_V2
//
this.ucSplitLine_V2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)()))), ((int)(((byte)()))), ((int)(((byte)()))));
this.ucSplitLine_V2.Dock = System.Windows.Forms.DockStyle.Right;
this.ucSplitLine_V2.Location = new System.Drawing.Point(, );
this.ucSplitLine_V2.Name = "ucSplitLine_V2";
this.ucSplitLine_V2.Size = new System.Drawing.Size(, );
this.ucSplitLine_V2.TabIndex = ;
this.ucSplitLine_V2.TabStop = false;
//
// ucSplitLine_V1
//
this.ucSplitLine_V1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)()))), ((int)(((byte)()))), ((int)(((byte)()))));
this.ucSplitLine_V1.Dock = System.Windows.Forms.DockStyle.Left;
this.ucSplitLine_V1.Location = new System.Drawing.Point(, );
this.ucSplitLine_V1.Name = "ucSplitLine_V1";
this.ucSplitLine_V1.Size = new System.Drawing.Size(, );
this.ucSplitLine_V1.TabIndex = ;
this.ucSplitLine_V1.TabStop = false;
//
// ucSplitLine_H2
//
this.ucSplitLine_H2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)()))), ((int)(((byte)()))), ((int)(((byte)()))));
this.ucSplitLine_H2.Dock = System.Windows.Forms.DockStyle.Bottom;
this.ucSplitLine_H2.Location = new System.Drawing.Point(, );
this.ucSplitLine_H2.Name = "ucSplitLine_H2";
this.ucSplitLine_H2.Size = new System.Drawing.Size(, );
this.ucSplitLine_H2.TabIndex = ;
this.ucSplitLine_H2.TabStop = false;
//
// ucSplitLine_H1
//
this.ucSplitLine_H1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)()))), ((int)(((byte)()))), ((int)(((byte)()))));
this.ucSplitLine_H1.Dock = System.Windows.Forms.DockStyle.Top;
this.ucSplitLine_H1.Location = new System.Drawing.Point(, );
this.ucSplitLine_H1.Name = "ucSplitLine_H1";
this.ucSplitLine_H1.Size = new System.Drawing.Size(, );
this.ucSplitLine_H1.TabIndex = ;
this.ucSplitLine_H1.TabStop = false;
//
// UCComboxGridPanel
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.BackColor = System.Drawing.Color.White;
this.Controls.Add(this.panel1);
this.Controls.Add(this.ucSplitLine_V2);
this.Controls.Add(this.ucSplitLine_V1);
this.Controls.Add(this.ucSplitLine_H2);
this.Controls.Add(this.ucSplitLine_H1);
this.Name = "UCComboxGridPanel";
this.Size = new System.Drawing.Size(, );
this.Load += new System.EventHandler(this.UCComboxGridPanel_Load);
this.panel1.ResumeLayout(false);
this.ucControlBase1.ResumeLayout(false);
this.ResumeLayout(false); } #endregion private UCSplitLine_H ucSplitLine_H1;
private UCSplitLine_H ucSplitLine_H2;
private UCSplitLine_V ucSplitLine_V1;
private UCSplitLine_V ucSplitLine_V2;
private System.Windows.Forms.Panel panel1;
private UCControlBase ucControlBase1;
private UCDataGridView ucDataGridView1;
private System.Windows.Forms.Panel panel2;
private System.Windows.Forms.Timer timer1;
private UCTextBoxEx txtSearch;
}
}

以上,弹出面板完成,下面就是下拉控件了

添加一个用户控件UCComboxGrid,继承UCCombox

一些属性

  private Type m_rowType = typeof(UCDataGridViewRow);

         [Description("表格行类型"), Category("自定义")]
public Type GridRowType
{
get { return m_rowType; }
set
{
m_rowType = value;
}
}
int intWidth = ; private List<DataGridViewColumnEntity> m_columns = null; [Description("表格列"), Category("自定义")]
public List<DataGridViewColumnEntity> GridColumns
{
get { return m_columns; }
set
{
m_columns = value;
if (value != null)
intWidth = value.Sum(p => p.WidthType == SizeType.Absolute ? p.Width : (p.Width < ? : p.Width));
}
}
private List<object> m_dataSource = null; [Description("表格数据源"), Category("自定义")]
public List<object> GridDataSource
{
get { return m_dataSource; }
set { m_dataSource = value; }
} private string m_textField; [Description("显示值字段名称"), Category("自定义")]
public string TextField
{
get { return m_textField; }
set
{
m_textField = value;
SetText();
}
}
[Obsolete("不再可用的属性")]
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
private new ComboBoxStyle BoxStyle
{
get;
set;
}
private object selectSource = null; [Description("选中的数据源"), Category("自定义")]
public object SelectSource
{
get { return selectSource; }
set
{
selectSource = value;
SetText();
if (SelectedChangedEvent != null)
{
SelectedChangedEvent(value, null);
}
}
} [Description("选中数据源改变事件"), Category("自定义")]
public new event EventHandler SelectedChangedEvent;

重写点击事件来处理弹出

  protected override void click_MouseDown(object sender, MouseEventArgs e)
{
if (m_columns == null || m_columns.Count <= )
return;
if (m_ucPanel == null)
{
var p = this.Parent.PointToScreen(this.Location);
int intScreenHeight = Screen.PrimaryScreen.Bounds.Height;
int intHeight = Math.Max(p.Y, intScreenHeight - p.Y - this.Height);
intHeight -= ;
m_ucPanel = new UCComboxGridPanel();
m_ucPanel.ItemClick += m_ucPanel_ItemClick;
m_ucPanel.Height = intHeight;
m_ucPanel.Width = intWidth;
m_ucPanel.Columns = m_columns;
m_ucPanel.RowType = m_rowType;
if (m_dataSource != null && m_dataSource.Count > )
{
int _intHeight = Math.Min( + m_dataSource.Count * , m_ucPanel.Height);
m_ucPanel.Height = _intHeight;
}
}
m_ucPanel.DataSource = m_dataSource;
if (_frmAnchor == null || _frmAnchor.IsDisposed || _frmAnchor.Visible == false)
{
_frmAnchor = new Forms.FrmAnchor(this, m_ucPanel);
_frmAnchor.Show(this.FindForm());
} } void m_ucPanel_ItemClick(object sender, DataGridViewEventArgs e)
{
_frmAnchor.Hide();
SelectSource = sender;
} private void SetText()
{
if (!string.IsNullOrEmpty(m_textField) && selectSource != null)
{
var pro = selectSource.GetType().GetProperty(m_textField);
if (pro != null)
{
TextValue = pro.GetValue(selectSource, null).ToStringExt();
}
}
}

完整代码

 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using HZH_Controls.Controls; namespace HZH_Controls.Controls.ComboBox
{
public partial class UCComboxGrid : UCCombox
{ private Type m_rowType = typeof(UCDataGridViewRow); [Description("表格行类型"), Category("自定义")]
public Type GridRowType
{
get { return m_rowType; }
set
{
m_rowType = value;
}
}
int intWidth = ; private List<DataGridViewColumnEntity> m_columns = null; [Description("表格列"), Category("自定义")]
public List<DataGridViewColumnEntity> GridColumns
{
get { return m_columns; }
set
{
m_columns = value;
if (value != null)
intWidth = value.Sum(p => p.WidthType == SizeType.Absolute ? p.Width : (p.Width < ? : p.Width));
}
}
private List<object> m_dataSource = null; [Description("表格数据源"), Category("自定义")]
public List<object> GridDataSource
{
get { return m_dataSource; }
set { m_dataSource = value; }
} private string m_textField; [Description("显示值字段名称"), Category("自定义")]
public string TextField
{
get { return m_textField; }
set
{
m_textField = value;
SetText();
}
}
[Obsolete("不再可用的属性")]
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
private new ComboBoxStyle BoxStyle
{
get;
set;
}
private object selectSource = null; [Description("选中的数据源"), Category("自定义")]
public object SelectSource
{
get { return selectSource; }
set
{
selectSource = value;
SetText();
if (SelectedChangedEvent != null)
{
SelectedChangedEvent(value, null);
}
}
} [Description("选中数据源改变事件"), Category("自定义")]
public new event EventHandler SelectedChangedEvent;
public UCComboxGrid()
{
InitializeComponent();
}
UCComboxGridPanel m_ucPanel = null;
Forms.FrmAnchor _frmAnchor;
protected override void click_MouseDown(object sender, MouseEventArgs e)
{
if (m_columns == null || m_columns.Count <= )
return;
if (m_ucPanel == null)
{
var p = this.Parent.PointToScreen(this.Location);
int intScreenHeight = Screen.PrimaryScreen.Bounds.Height;
int intHeight = Math.Max(p.Y, intScreenHeight - p.Y - this.Height);
intHeight -= ;
m_ucPanel = new UCComboxGridPanel();
m_ucPanel.ItemClick += m_ucPanel_ItemClick;
m_ucPanel.Height = intHeight;
m_ucPanel.Width = intWidth;
m_ucPanel.Columns = m_columns;
m_ucPanel.RowType = m_rowType;
if (m_dataSource != null && m_dataSource.Count > )
{
int _intHeight = Math.Min( + m_dataSource.Count * , m_ucPanel.Height);
m_ucPanel.Height = _intHeight;
}
}
m_ucPanel.DataSource = m_dataSource;
if (_frmAnchor == null || _frmAnchor.IsDisposed || _frmAnchor.Visible == false)
{
_frmAnchor = new Forms.FrmAnchor(this, m_ucPanel);
_frmAnchor.Show(this.FindForm());
} } void m_ucPanel_ItemClick(object sender, DataGridViewEventArgs e)
{
_frmAnchor.Hide();
SelectSource = sender;
} private void SetText()
{
if (!string.IsNullOrEmpty(m_textField) && selectSource != null)
{
var pro = selectSource.GetType().GetProperty(m_textField);
if (pro != null)
{
TextValue = pro.GetValue(selectSource, null).ToStringExt();
}
}
}
}
}
 namespace HZH_Controls.Controls.ComboBox
{
partial class UCComboxGrid
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null; /// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
} #region 组件设计器生成的代码 /// <summary>
/// 设计器支持所需的方法 - 不要
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.SuspendLayout();
//
// txtInput
//
this.txtInput.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)()))), ((int)(((byte)()))), ((int)(((byte)()))));
//
// UCComboxGrid
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.BackColor = System.Drawing.Color.Transparent;
this.BoxStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)()))), ((int)(((byte)()))), ((int)(((byte)()))));
this.Name = "UCComboxGrid";
this.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)()))), ((int)(((byte)()))), ((int)(((byte)()))));
this.ResumeLayout(false);
this.PerformLayout(); } #endregion }
}

以上就是全部东西了

最后的话

如果你喜欢的话,请到 https://gitee.com/kwwwvagaa/net_winform_custom_control 点个星星吧

(四十九)c#Winform自定义控件-下拉框(表格)的更多相关文章

  1. (三十五)c#Winform自定义控件-下拉框

    前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kwwwvagaa/NetWinformControl 码云:ht ...

  2. (四十八)c#Winform自定义控件-下拉按钮

    前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kwwwvagaa/NetWinformControl 码云:ht ...

  3. android+myeclipse+mysql自定义控件下拉框的数据绑定

    原创作品,允许转载,转载时请务必声明作者信息和本声明.http://www.cnblogs.com/zhu520/p/8031936.html 本人小白,那个大神看到有问题可指出,谢谢.... 这个是 ...

  4. C# Winform 获得下拉框 选中的值

    string PrintName = cmbPrinter.SelectedIndex.ToString(); PrintName = cmbPrinter.SelectedItem.ToString ...

  5. LigerUI ligerComboBox 下拉框 表格 多选无效

    $("#txt1").ligerComboBox({ width: 250, slide: false, selectBoxWidth: 500, selectBoxHeight: ...

  6. (四十九)Quartz2D自定义控件

    利用Quartz2D来自定义UIImageView: 模仿UIImageView: 设置frame,设置图片. 注意一个细节,自定义的imageView,应该通过重写set方法来设置图片并且重绘,否则 ...

  7. (四十)c#Winform自定义控件-开关-HZHControls

    官网 http://www.hzhcontrols.com 前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kww ...

  8. 第二百二十四节,jQuery EasyUI,ComboGrid(数据表格下拉框)组件

    jQuery EasyUI,ComboGrid(数据表格下拉框)组件 学习要点: 1.加载方式 2.属性列表 3.方法列表 本节课重点了解 EasyUI 中 ComboGrid(数据表格下拉框)组件的 ...

  9. “全栈2019”Java第四十九章:重载与重写对比详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

随机推荐

  1. 怎样在自己的网页中调用百度API

    https://blog.csdn.net/u010251278/article/details/52877370 以下内容转自上述网站,为了以后的学习方便,为此才特地将该网站内容转到自己的博客,多谢 ...

  2. centOS7 安装mysql-5.7.20-1.el7.x86_64.rpm-bundle.tar

    在虚拟机上安装mysql走了不少弯路,在此备份... 首先感谢下这几篇博客提供的帮助: https://www.cnblogs.com/pythonal/p/6141516.html http://b ...

  3. spark streaming 接收kafka消息之五 -- spark streaming 和 kafka 的对接总结

    Spark streaming 和kafka 处理确保消息不丢失的总结 接入kafka 我们前面的1到4 都在说 spark streaming 接入 kafka 消息的事情.讲了两种接入方式,以及s ...

  4. Jquery第一次考核

    1. 什么是JS JavaScript 缩写.一种计算机脚本语言 JavaScript是一种动态.弱类型.基于原型的语言,通过浏览器可以直接执行 2. JS三大组成部件 ECMAScript DOM ...

  5. 第一章jQuery基础

    一.jQuert简介 1.什么是jQuery jQuery是javaScript的程序库之一,它是javaScript对象和实用函数的封装. jQuery是继Prototype之后又一个优秀的java ...

  6. spark 源码分析之二十一 -- Task的执行流程

    引言 在上两篇文章 spark 源码分析之十九 -- DAG的生成和Stage的划分 和 spark 源码分析之二十 -- Stage的提交 中剖析了Spark的DAG的生成,Stage的划分以及St ...

  7. 原创:微信小程序如何使用自定义组件

    本博文是通过实际开发中的一个实例来讲解自定义组件的使用. 第一步:新建自定义组件目录,如图,我新建了个componts和tabList目录,然后右键tabList目录选择新建compont取名为tab ...

  8. 【JDK】JDK源码分析-TreeMap(2)

    前文「JDK源码分析-TreeMap(1)」分析了 TreeMap 的一些方法,本文分析其中的增删方法.这也是红黑树插入和删除节点的操作,由于相对复杂,因此单独进行分析. 插入操作 该操作其实就是红黑 ...

  9. 【Android】ViewModel+LiveData:更加直接地控制视图的方式

    目录 LiveData 前言 使用ViewModel+LiveData LiveData 前言   ViewModel通过将UI data保存在ViewModel类实例的内部,从而大大地将MVC中的 ...

  10. codeforces 371 C-Hamburgers

    一个乱七八糟的故事背景,可以练练英语阅读. 大概的意思是Polycarpus喜欢汉堡,现在他有你ns片香肠片,nb面包,nc块起司,有r卢布,每种东西都有价格,如果不够他可以去商店买(商店里面各种东西 ...