这是一个纯粹的习惯问题。我多年来一直在使用Visual Studio C ++对话框设计器。所以现在我在VS 2010中使用.NET C#表单设计器。
说,我有以下两个控件:
我需要将顶部对齐以匹配底部。所以在VS C ++设计器中,我首先点击我要调整的控件,然后按住Ctrl键并单击我要调整的控件,然后选择“Align Lefts”工具栏按钮:
完全有道理。
但是现在在VS 2010中,我必须完全反向执行此过程,即首先选择要对齐的控件然后选择对齐的控件。我知道我在这里挑剔,但这完全让我感到困惑。我经常以错误的顺序执行此操作,然后必须撤消并重新执行它。通常出现的夸夸其谈的是,“为什么,微软!为什么?”但这不是我的问题。
是否有一些设置,或者可能是注册表修复使其像以前的VS C ++设计器一样工作?
答案 0 :(得分:0)
有一个ISelectionService
可以帮助获取或设置选定的组件,并在选择更改时通知。
您可以通过如下处理服务的SelectionChanged
事件来实现所需的行为:
private void SelectionSVC_SelectionChanged(object sender, EventArgs e)
{
var selectionSVC = sender as ISelectionService;
if (selectionSVC == null) return;
try
{
selectionSVC.SelectionChanged -= SelectionSVC_SelectionChanged;
if ((Control.ModifierKeys & (Keys.Shift | Keys.Control)) > Keys.None)
{
var selection = selectionSVC.GetSelectedComponents()
.Cast<object>().LastOrDefault();
if (selection != null)
selectionSVC.SetSelectedComponents(new[] { selection },
SelectionTypes.Primary | SelectionTypes.Add);
}
}
finally
{
selectionSVC.SelectionChanged += SelectionSVC_SelectionChanged;
}
}
获取服务的实例取决于上下文。例如,在设计器窗口中使用VS Package,其实例为IdesignerHost
:
var selectionSVC = (ISelectionService)host.GetService(typeof(ISelectionService));
if (selectionSVC != null)
selectionSVC.SelectionChanged += SelectionSVC_SelectionChanged;