You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

66 lines
2.5 KiB
C#

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
}
}
}