调出 ColorEditor 需要实现 IWindowsFormsEditorService 和 IServiceProvider。颜色对话框具有很大的灵活性,可以集成到 DropDownForm 中。但是 FontEditor Window 已经内置了 CloseButton 和 Titlebar。为什么 MS 在对话框中实现了如此不同的东西?如何摆脱 CloseButton 和 Titlebar?调出 FontEditor 是否必须使用 IWindowsFormsEditorService 和 IServiceProvider?
问问题
26 次
1 回答
0
- 为什么 MS 在对话框中实现了如此不同的东西?
我还没有检查反射的代码。我对此不感兴趣。我就是喜欢抱怨。
- 如何摆脱 CloseButton 和 Titlebar?
FontEditor 只是一个弹出窗口,我现在不可能这样做。
- 调出 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 回答