mirror of
https://github.com/eggplantlwj/VisionEdit.git
synced 2026-03-24 00:36:41 +08:00
230 lines
7.5 KiB
C#
230 lines
7.5 KiB
C#
// ***********************************************************************
|
||
// Assembly : HZH_Controls
|
||
// Created : 08-28-2019
|
||
//
|
||
// ***********************************************************************
|
||
// <copyright file="UCComboxGrid.cs">
|
||
// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
|
||
// </copyright>
|
||
//
|
||
// Blog: https://www.cnblogs.com/bfyx
|
||
// GitHub:https://github.com/kwwwvagaa/NetWinformControl
|
||
// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
|
||
//
|
||
// If you use this code, please keep this note.
|
||
// ***********************************************************************
|
||
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
|
||
{
|
||
/// <summary>
|
||
/// Class UCComboxGrid.
|
||
/// Implements the <see cref="HZH_Controls.Controls.UCCombox" />
|
||
/// </summary>
|
||
/// <seealso cref="HZH_Controls.Controls.UCCombox" />
|
||
public partial class UCComboxGrid : UCCombox
|
||
{
|
||
|
||
/// <summary>
|
||
/// The m row type
|
||
/// </summary>
|
||
private Type m_rowType = typeof(UCDataGridViewRow);
|
||
/// <summary>
|
||
/// 表格行类型
|
||
/// </summary>
|
||
/// <value>The type of the grid row.</value>
|
||
[Description("表格行类型"), Category("自定义")]
|
||
public Type GridRowType
|
||
{
|
||
get { return m_rowType; }
|
||
set
|
||
{
|
||
m_rowType = value;
|
||
}
|
||
}
|
||
/// <summary>
|
||
/// The int width
|
||
/// </summary>
|
||
int intWidth = 0;
|
||
|
||
/// <summary>
|
||
/// The m columns
|
||
/// </summary>
|
||
private List<DataGridViewColumnEntity> m_columns = null;
|
||
/// <summary>
|
||
/// 表格列
|
||
/// </summary>
|
||
/// <value>The grid columns.</value>
|
||
[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 < 80 ? 80 : p.Width));
|
||
}
|
||
}
|
||
/// <summary>
|
||
/// The m data source
|
||
/// </summary>
|
||
private List<object> m_dataSource = null;
|
||
/// <summary>
|
||
/// 表格数据源
|
||
/// </summary>
|
||
/// <value>The grid data source.</value>
|
||
[Description("表格数据源"), Category("自定义")]
|
||
public List<object> GridDataSource
|
||
{
|
||
get { return m_dataSource; }
|
||
set { m_dataSource = value; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// The m text field
|
||
/// </summary>
|
||
private string m_textField;
|
||
/// <summary>
|
||
/// 显示值字段名称
|
||
/// </summary>
|
||
/// <value>The text field.</value>
|
||
[Description("显示值字段名称"), Category("自定义")]
|
||
public string TextField
|
||
{
|
||
get { return m_textField; }
|
||
set
|
||
{
|
||
m_textField = value;
|
||
SetText();
|
||
}
|
||
}
|
||
/// <summary>
|
||
/// 控件样式
|
||
/// </summary>
|
||
/// <value>The box style.</value>
|
||
[Obsolete("不再可用的属性")]
|
||
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
|
||
private new ComboBoxStyle BoxStyle
|
||
{
|
||
get;
|
||
set;
|
||
}
|
||
/// <summary>
|
||
/// The select source
|
||
/// </summary>
|
||
private object selectSource = null;
|
||
/// <summary>
|
||
/// 选中的数据源
|
||
/// </summary>
|
||
/// <value>The select source.</value>
|
||
[Description("选中的数据源"), Category("自定义")]
|
||
public object SelectSource
|
||
{
|
||
get { return selectSource; }
|
||
set
|
||
{
|
||
selectSource = value;
|
||
SetText();
|
||
if (SelectedChangedEvent != null)
|
||
{
|
||
SelectedChangedEvent(value, null);
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 选中数据源改变事件
|
||
/// </summary>
|
||
[Description("选中数据源改变事件"), Category("自定义")]
|
||
public new event EventHandler SelectedChangedEvent;
|
||
/// <summary>
|
||
/// Initializes a new instance of the <see cref="UCComboxGrid" /> class.
|
||
/// </summary>
|
||
public UCComboxGrid()
|
||
{
|
||
InitializeComponent();
|
||
}
|
||
/// <summary>
|
||
/// The m uc panel
|
||
/// </summary>
|
||
UCComboxGridPanel m_ucPanel = null;
|
||
/// <summary>
|
||
/// The FRM anchor
|
||
/// </summary>
|
||
Forms.FrmAnchor _frmAnchor;
|
||
/// <summary>
|
||
/// Handles the MouseDown event of the click control.
|
||
/// </summary>
|
||
/// <param name="sender">The source of the event.</param>
|
||
/// <param name="e">The <see cref="MouseEventArgs" /> instance containing the event data.</param>
|
||
protected override void click_MouseDown(object sender, MouseEventArgs e)
|
||
{
|
||
if (m_columns == null || m_columns.Count <= 0)
|
||
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 -= 100;
|
||
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 > 0)
|
||
{
|
||
int _intHeight = Math.Min(110 + m_dataSource.Count * 36, m_ucPanel.Height);
|
||
if (_intHeight <= 0)
|
||
_intHeight = 100;
|
||
m_ucPanel.Height = _intHeight;
|
||
}
|
||
}
|
||
m_ucPanel.DataSource = m_dataSource;
|
||
if (_frmAnchor == null || _frmAnchor.IsDisposed || _frmAnchor.Visible == false)
|
||
{
|
||
_frmAnchor = new Forms.FrmAnchor(this, m_ucPanel, isNotFocus: false);
|
||
_frmAnchor.Show(this.FindForm());
|
||
}
|
||
|
||
}
|
||
|
||
/// <summary>
|
||
/// Handles the ItemClick event of the m_ucPanel control.
|
||
/// </summary>
|
||
/// <param name="sender">The source of the event.</param>
|
||
/// <param name="e">The <see cref="DataGridViewEventArgs" /> instance containing the event data.</param>
|
||
void m_ucPanel_ItemClick(object sender, DataGridViewEventArgs e)
|
||
{
|
||
_frmAnchor.Hide();
|
||
SelectSource = sender;
|
||
}
|
||
|
||
/// <summary>
|
||
/// Sets the text.
|
||
/// </summary>
|
||
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();
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|