我试图创建一个可为空的 DateTimePicker,当控件被标记为具有空日期时,它可以选择显示一些提示文本。为了实现此目的,我继承自 DateTimePicker 并添加了一个带有覆盖文本部分的提示文本的 Label 控件当控件被标记为具有空日期时..问题是,如果 DateTimePicker 设置为显示通常的日历图标,则此按钮的宽度是可变的..
下图显示了具有不同大小的相同 DateTimePicker 控件。一旦日历图标按钮开始与文本重叠,它就会更改为更小的、简单的下拉图标按钮。
我可以尝试使用反射来读/写私有(private)字段,但我不知道读什么......
我的问题..如何找到正确显示在 DateTimePicker 控件中的日历图标的宽度..
最佳答案
我自己找到了一种方法.. =).. 当控件比显示的文本宽时,DateTimePicker
显示日历图标按钮.. 当按钮开始剪辑文本时,控件自动回退到显示较小的下拉按钮(在原始问题的图像的第二行中可见)..因此我们找出文本的宽度,日历图标按钮,下拉按钮和控件本身..接下来的数学很简单..
const int C_BUTTONICON_WIDTH = 34;
const int C_BUTTONARROW_WIDTH = 17;
protected int GetLabelWidth()
{
int iControlW = this.Width;
int iTextW = TextRenderer.MeasureString(this.Text, this.Font).Width;
int iLabelW = 0;
if (iTextW <= iControlW - C_BUTTONICON_WIDTH)
{
iLabelW = iControlW - C_BUTTONICON_WIDTH;
}
else
{
iLabelW = iControlW - C_BUTTONARROW_WIDTH;
}
return iLabelW;
}
您可能需要根据 Label
本身的位置调整一些像素.. =).. 达到了我的目的.. =)
关于c# - DateTimePicker 日历按钮宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13556960/