|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Reflection;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Windows.Forms;
|
|
|
|
|
|
|
|
|
|
namespace Mesnac.Basic.Service
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 操作命令类,用与进行撤销和恢复操作的封装类
|
|
|
|
|
/// </summary>
|
|
|
|
|
public class OperationCommand : ICommand
|
|
|
|
|
{
|
|
|
|
|
#region 字段定义
|
|
|
|
|
|
|
|
|
|
private Control _ctrl;
|
|
|
|
|
private object _newValue;
|
|
|
|
|
private object _oldValue;
|
|
|
|
|
private EventHandler _eventHandler;
|
|
|
|
|
private DataGridViewCellEventHandler _dataGridViewCellEventHandler;
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region 构造方法
|
|
|
|
|
|
|
|
|
|
public OperationCommand (Control ctrl, object newValue, object oldValue)
|
|
|
|
|
{
|
|
|
|
|
this._ctrl = ctrl;
|
|
|
|
|
this._newValue = newValue;
|
|
|
|
|
this._oldValue = oldValue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public OperationCommand(Control ctrl, object newValue, object oldValue, EventHandler eventHandler)
|
|
|
|
|
{
|
|
|
|
|
this._ctrl = ctrl;
|
|
|
|
|
this._newValue = newValue;
|
|
|
|
|
this._oldValue = oldValue;
|
|
|
|
|
this._eventHandler = eventHandler;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public OperationCommand(Control ctrl, object newValue, object oldValue, DataGridViewCellEventHandler dataGridViewCellEventHandler, int rowIndex, int columnIndex)
|
|
|
|
|
{
|
|
|
|
|
this._ctrl = ctrl;
|
|
|
|
|
this._newValue = newValue;
|
|
|
|
|
this._oldValue = oldValue;
|
|
|
|
|
this._dataGridViewCellEventHandler = dataGridViewCellEventHandler;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region ICommand接口成员实现
|
|
|
|
|
|
|
|
|
|
#region 恢复操作实现
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 恢复操作实现
|
|
|
|
|
/// </summary>
|
|
|
|
|
public void execute()
|
|
|
|
|
{
|
|
|
|
|
if (this._ctrl is TextBox)
|
|
|
|
|
{
|
|
|
|
|
(this._ctrl as TextBox).TextChanged -= this._eventHandler;
|
|
|
|
|
(this._ctrl as TextBox).Text = this._newValue == null ? String.Empty : this._newValue.ToString();
|
|
|
|
|
(this._ctrl as TextBox).SelectionStart = (this._ctrl as TextBox).Text.Length;
|
|
|
|
|
(this._ctrl as TextBox).TextChanged += this._eventHandler;
|
|
|
|
|
}
|
|
|
|
|
if (this._ctrl is CheckBox)
|
|
|
|
|
{
|
|
|
|
|
(this._ctrl as CheckBox).CheckedChanged -= this._eventHandler;
|
|
|
|
|
bool newValue = false;
|
|
|
|
|
if (this._newValue != null)
|
|
|
|
|
{
|
|
|
|
|
bool.TryParse(this._newValue.ToString(), out newValue);
|
|
|
|
|
}
|
|
|
|
|
(this._ctrl as CheckBox).Checked = newValue;
|
|
|
|
|
(this._ctrl as CheckBox).CheckedChanged += this._eventHandler;
|
|
|
|
|
}
|
|
|
|
|
if (this._ctrl is ComboBox)
|
|
|
|
|
{
|
|
|
|
|
(this._ctrl as ComboBox).SelectedIndexChanged -= this._eventHandler;
|
|
|
|
|
(this._ctrl as ComboBox).SelectedItem = this._newValue;
|
|
|
|
|
(this._ctrl as ComboBox).SelectedIndexChanged += this._eventHandler;
|
|
|
|
|
}
|
|
|
|
|
if (this._ctrl is DateTimePicker)
|
|
|
|
|
{
|
|
|
|
|
(this._ctrl as DateTimePicker).ValueChanged -= this._eventHandler;
|
|
|
|
|
DateTime newValue = DateTime.Now;
|
|
|
|
|
if (this._newValue != null)
|
|
|
|
|
{
|
|
|
|
|
DateTime.TryParse(this._newValue.ToString(), out newValue);
|
|
|
|
|
}
|
|
|
|
|
(this._ctrl as DateTimePicker).Value = newValue;
|
|
|
|
|
(this._ctrl as DateTimePicker).ValueChanged += this._eventHandler;
|
|
|
|
|
}
|
|
|
|
|
if (this._ctrl is DataGridView)
|
|
|
|
|
{
|
|
|
|
|
if (this._dataGridViewCellEventHandler != null)
|
|
|
|
|
{
|
|
|
|
|
(this._ctrl as DataGridView).CellValueChanged -= this._dataGridViewCellEventHandler;
|
|
|
|
|
}
|
|
|
|
|
(this._ctrl as DataGridView).DataSource = this._newValue;
|
|
|
|
|
Mesnac.Basic.DataProcessor.ClearSelectedStatus((this._ctrl as DataGridView));
|
|
|
|
|
if (this._dataGridViewCellEventHandler != null)
|
|
|
|
|
{
|
|
|
|
|
(this._ctrl as DataGridView).CellValueChanged += this._dataGridViewCellEventHandler;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region 撤销操作实现
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 撤销操作实现
|
|
|
|
|
/// </summary>
|
|
|
|
|
public void undo()
|
|
|
|
|
{
|
|
|
|
|
if (this._ctrl is TextBox)
|
|
|
|
|
{
|
|
|
|
|
(this._ctrl as TextBox).TextChanged -= this._eventHandler;
|
|
|
|
|
(this._ctrl as TextBox).Text = this._oldValue == null ? String.Empty : this._oldValue.ToString();
|
|
|
|
|
(this._ctrl as TextBox).SelectionStart = (this._ctrl as TextBox).Text.Length;
|
|
|
|
|
(this._ctrl as TextBox).TextChanged += this._eventHandler;
|
|
|
|
|
}
|
|
|
|
|
if (this._ctrl is CheckBox)
|
|
|
|
|
{
|
|
|
|
|
(this._ctrl as CheckBox).CheckedChanged -= this._eventHandler;
|
|
|
|
|
bool oldValue = false;
|
|
|
|
|
if (this._oldValue != null)
|
|
|
|
|
{
|
|
|
|
|
bool.TryParse(this._oldValue.ToString(), out oldValue);
|
|
|
|
|
}
|
|
|
|
|
(this._ctrl as CheckBox).Checked = oldValue;
|
|
|
|
|
(this._ctrl as CheckBox).CheckedChanged += this._eventHandler;
|
|
|
|
|
}
|
|
|
|
|
if (this._ctrl is ComboBox)
|
|
|
|
|
{
|
|
|
|
|
(this._ctrl as ComboBox).SelectedIndexChanged -= this._eventHandler;
|
|
|
|
|
(this._ctrl as ComboBox).SelectedItem = this._oldValue;
|
|
|
|
|
(this._ctrl as ComboBox).SelectedIndexChanged += this._eventHandler;
|
|
|
|
|
}
|
|
|
|
|
if (this._ctrl is DateTimePicker)
|
|
|
|
|
{
|
|
|
|
|
(this._ctrl as DateTimePicker).ValueChanged -= this._eventHandler;
|
|
|
|
|
DateTime oldValue = DateTime.Now;
|
|
|
|
|
if (this._oldValue != null)
|
|
|
|
|
{
|
|
|
|
|
DateTime.TryParse(this._oldValue.ToString(), out oldValue);
|
|
|
|
|
}
|
|
|
|
|
(this._ctrl as DateTimePicker).Value = oldValue;
|
|
|
|
|
(this._ctrl as DateTimePicker).ValueChanged += this._eventHandler;
|
|
|
|
|
}
|
|
|
|
|
if (this._ctrl is DataGridView)
|
|
|
|
|
{
|
|
|
|
|
if (this._dataGridViewCellEventHandler != null)
|
|
|
|
|
{
|
|
|
|
|
(this._ctrl as DataGridView).CellValueChanged -= this._dataGridViewCellEventHandler;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
(this._ctrl as DataGridView).DataSource = this._oldValue;
|
|
|
|
|
Mesnac.Basic.DataProcessor.ClearSelectedStatus((this._ctrl as DataGridView));
|
|
|
|
|
|
|
|
|
|
if (this._dataGridViewCellEventHandler != null)
|
|
|
|
|
{
|
|
|
|
|
(this._ctrl as DataGridView).CellValueChanged += this._dataGridViewCellEventHandler;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
}
|
|
|
|
|
}
|