VS 2010设计器中控件对齐的反向顺序

时间:2013-11-05 20:15:33

标签: c# visual-studio winforms visual-studio-2010 windows-forms-designer

这是一个纯粹的习惯问题。我多年来一直在使用Visual Studio C ++对话框设计器。所以现在我在VS 2010中使用.NET C#表单设计器。

说,我有以下两个控件:

enter image description here

我需要将顶部对齐以匹配底部。所以在VS C ++设计器中,我首先点击我要调整的控件,然后按住Ctrl键并单击我要调整的控件,然后选择“Align Lefts”工具栏按钮:

enter image description here

完全有道理。

但是现在在VS 2010中,我必须完全反向执行此过程,即首先选择要对齐的控件然后选择对齐的控件。我知道我在这里挑剔,但这完全让我感到困惑。我经常以错误的顺序执行此操作,然后必须撤消并重新执行它。通常出现的夸夸其谈的是,“为什么,微软!为什么?”但这不是我的问题。

是否有一些设置,或者可能是注册表修复使其像以前的VS C ++设计器一样工作?

1 个答案:

答案 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;