DateTimePicker 的右侧有一个日历下拉按钮。通常它会显示一个小日历图标,但如果将控件的大小调整到图标与文本重叠的程度,它会变成一个更细的箭头下拉菜单。
问题:如果 DateTimePicker 在程序启动时低于该宽度,则下拉图标会非常宽并与文本重叠。水平调整窗口大小会修正宽度,之后会保持修正。
我想知道:
- 是什么原因造成的。
- 如何最好地修复它。
这是它的样子:
发布时
调整大小后
编辑#1:
这个显示问题似乎只在启动时发生。如果我根据用户输入添加新控件,它会正确显示:
编辑#2:
我进一步缩小了导致问题的范围。它仅在以下情况下发生(在我的 PC 上,运行 Windows 8.1):
- DateTimePicker.Format 设置为“自定义”。
- 启动时 DateTimePicker 的宽度设置为 109 或更宽。
- 控件的右边缘离格式化日期足够近,以至于它的图标向下折叠到箭头下拉列表。
如果我将控件的自定义格式设置为“MMMM d, yyyy”,我就会遇到问题。此格式设置与 DateTimePicker.Format 设置为“Long”时完全相同,但如果没有自定义格式,控件将正确显示。
最佳答案
作为Hans在上面的评论中指出:
It is just a plain bug, nothing you can do about it because it is baked into the OS.
这回答了问题的第一部分,意味着我们一直在努力解决它。这留下了几个选项:
- 在启动时使控件足够大。这要求您在布置表单时注意错误,但它很简单而且有效。
- 等到表单加载后添加控件,使用 Form.Load .此解决方案是一劳永逸的,但涉及修改表单对象本身,这可能不适用于所有人。
选项 2 很适合我的目的。代码看起来像这样:
public class EventForm : Form
{
public EventForm()
{
this.Load += AddControls;
}
private void AddControls (object sender, EventArgs e)
{
DateTimePicker startDate = new DateTimePicker();
startDate.Format = DateTimePickerFormat.Custom;
startDate.CustomFormat = "MMM dd, yyyy — h:mm tt";
startDate.Dock = DockStyle.Top;
this.Controls.Add(startDate);
// Add the rest of your controls here.
}
}
我不确定这种方法是否有任何缺点,但我相信如果有的话我很快就会发现。
感谢其他答案和反馈。现在我要把这个标记为答案;希望它对以后的人有所帮助!
关于C#:DateTimePicker 在使用自定义格式的低宽度程序启动时有下拉显示错误。是什么原因造成的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44830994/