|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.ComponentModel.Design;
|
|
|
|
|
using System.Reflection;
|
|
|
|
|
|
|
|
|
|
namespace Host
|
|
|
|
|
{
|
|
|
|
|
public class TabOrderHooker
|
|
|
|
|
{
|
|
|
|
|
private const string _Name_ = "TabOrderHooker";
|
|
|
|
|
|
|
|
|
|
private object _tabOrder = null;
|
|
|
|
|
|
|
|
|
|
//- Enables/Disables visual TabOrder on the view.
|
|
|
|
|
//- internal override
|
|
|
|
|
public void HookTabOrder(IDesignerHost host)
|
|
|
|
|
{
|
|
|
|
|
//- the TabOrder must be called AFTER the DesignSurface has been loaded
|
|
|
|
|
//- therefore we do a little check
|
|
|
|
|
if (null == host.RootComponent)
|
|
|
|
|
throw new Exception(_Name_ + "::HookTabOrder() - Exception: the TabOrder must be invoked after the DesignSurface has been loaded! ");
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
System.Reflection.Assembly designAssembly = System.Reflection.Assembly.Load("System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");
|
|
|
|
|
Type tabOrderType = designAssembly.GetType("System.Windows.Forms.Design.TabOrder");
|
|
|
|
|
if (_tabOrder == null)
|
|
|
|
|
{
|
|
|
|
|
//- call the ctor passing the IDesignerHost taget object
|
|
|
|
|
_tabOrder = Activator.CreateInstance(tabOrderType, new object[] { host });
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
DisposeTabOrder();
|
|
|
|
|
}
|
|
|
|
|
}//end_try
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
throw new Exception(_Name_ + "::HookTabOrder() - Exception: (see Inner Exception)", ex);
|
|
|
|
|
}//end_catch
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//- Disposes the tab order
|
|
|
|
|
public void DisposeTabOrder()
|
|
|
|
|
{
|
|
|
|
|
if (null == _tabOrder) return;
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
System.Reflection.Assembly designAssembly = System.Reflection.Assembly.Load("System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");
|
|
|
|
|
Type tabOrderType = designAssembly.GetType("System.Windows.Forms.Design.TabOrder");
|
|
|
|
|
tabOrderType.InvokeMember("Dispose", BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.InvokeMethod, null, _tabOrder, new object[] { true });
|
|
|
|
|
_tabOrder = null;
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
throw new Exception(_Name_ + "::DisposeTabOrder() - Exception: (see Inner Exception)", ex);
|
|
|
|
|
}//end_catch
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|