得到sender对象然后产看sender的性质,就可以了

解决方案 »

  1.   

    为什么不代入一个windowform类型的参数哪
    那后续问题就好解决了
      

  2.   

    public abstract class TransactionContext{ }
    public abstract class Transaction
    {
    private class TransactionContextImplemention : TransactionContext
    {
    private object _taget = null;
    private TransactionImplemention _transactionImplemention = null;
    private object _tag = null; public TransactionContextImplemention(object target, TransactionImplemention transactionImplemention)
    {
    this._taget = target;
    this._transactionImplemention = transactionImplemention;
    }
    public TransactionImplemention  TransactionImplemention
    {
    get{ return this._transactionImplemention;}
    }
    public object Target
    {
    get{ return this._taget;}
    }
    public object Tag
    {
    get{ return this._tag; }
    set{ this._tag = value; }
    }
    }
    public bool Begin(object target, out TransactionContext context)
    {
    TransactionImplemention ti = TransactionImplemention.Build(target);

    if(ti == null)
    {
    context = null;
    return false;
    } context = new TransactionContextImplemention(target, ti);
    return true;
    } /**************************
    * Add you method(static):
    */
    public static void GetFocus(TransactionContext context)
    {
    if(context as TransactionContextImplemention != null)
    (context as TransactionContextImplemention).TransactionImplemention.GetFocus();
    }
    public static void SetBKColor(TransactionContext context, Color bkColor)
    {
    if(context as TransactionContextImplemention != null)
    (context as TransactionContextImplemention).TransactionImplemention.SetBKColor(bkColor);
    } protected abstract class TransactionImplemention
    {
    public static TransactionImplemention Build(object target)
    {
    if(target is Control)
    return new ControlTransactionImplemention(target as Control);
    return null; }
    /**************************
    * Add you method(virtual):
    */
    public abstract void GetFocus();
    public abstract void SetBKColor(Color bkColor);
    }
    private class ControlTransactionImplemention : TransactionImplemention
    {
    private Control _target = null;

    public ControlTransactionImplemention(Control target)
    {
    if(target == null)
    throw new ArgumentNullException(); this._target = target;
    }
    /**************************
    * Add you implementation:
    */
    public override void GetFocus()
    {
    this._target.Focus();
    }
    public override void SetBKColor(Color bkColor)
    {
    this._target.BackColor = bkColor;
    }
    }
    }