0

调出 ColorEditor 需要实现 IWindowsFormsEditorService 和 IServiceProvider。颜色对话框具有很大的灵活性,可以集成到 DropDownForm 中。但是 FontEditor Window 已经内置了 CloseButton 和 Titlebar。为什么 MS 在对话框中实现了如此不同的东西?如何摆脱 CloseButton 和 Titlebar?调出 FontEditor 是否必须使用 IWindowsFormsEditorService 和 IServiceProvider?

在此处输入图像描述

4

1 回答 1

0
  1. 为什么 MS 在对话框中实现了如此不同的东西?

我还没有检查反射的代码。我对此不感兴趣。我就是喜欢抱怨。

  1. 如何摆脱 CloseButton 和 Titlebar?

FontEditor 只是一个弹出窗口,我现在不可能这样做。

  1. 调出 FontEditor 是否必须使用 IWindowsFormsEditorService 和 IServiceProvider?

我确实尝试过,似乎我们必须同时使用两者,即使 IWindowsFormsEditorService 实际上没有被调用

.

    private void btnFont_Click(object sender, EventArgs e)
    {
        Point location = base.PointToScreen(new Point(btnFont.Bounds.Location.X, btnFont.Bounds.Location.Y + btnFont.Bounds.Height));
        DropDownManager myFontDialog = new DropDownManager(btnFont, new Rectangle(location, new Size(0, 0)), false, false, "Please choose...");                     
        object objectValue = new FontEditor().EditValue(myFontDialog, previousChoosenFont);
        if (objectValue != null)
        {
            previousChoosenFont = (Font)objectValue;
        }
        btnFont.Font = previousChoosenFont;
    }

   internal class DropDownManager : IWindowsFormsEditorService, IServiceProvider, IDisposable
    {
       ///......
       void IWindowsFormsEditorService.CloseDropDown()
        {
            throw new NotSupportedException();
        }

        void IWindowsFormsEditorService.DropDownControl(Control dropDownControl)
        {            
            throw new NotSupportedException();
        }

        DialogResult IWindowsFormsEditorService.ShowDialog(Form dialog)
        {
            throw new NotSupportedException();
        }

        object IServiceProvider.GetService(Type serviceType)
        {
            object result = null;
            if (serviceType.Equals(typeof(IWindowsFormsEditorService)))
            {
                result = this;
            }
            return result;
        }
       ///.....
}
于 2020-11-02T14:30:32.700 回答