3

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

说,我有以下两个控件:

在此处输入图像描述

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

在此处输入图像描述

这完全有道理。

但是现在在 VS 2010 中,我必须完全反向执行此过程,即首先选择要对齐的控件,然后选择要对齐的控件。我知道我在这里吹毛求疵,但这完全把我搞砸了。我经常以错误的顺序做这件事,然后不得不撤消并再次重做。通常出来的修辞喊叫是,“为什么,微软!为什么? ”但这不是我的问题。

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

4

1 回答 1

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 包,具有​​以下实例IdesignerHost

var selectionSVC = (ISelectionService)host.GetService(typeof(ISelectionService));
if (selectionSVC != null)
    selectionSVC.SelectionChanged += SelectionSVC_SelectionChanged;
于 2019-01-21T09:09:02.297 回答