2

コントロールにnullの日付があるとマークされたときにオプションでヒントテキストを表示できるnull可能なDateTimePickerを作成しようとしています。これを実現するために、DateTimePickerから継承され、コントロールのテキスト部分をカバーするヒントテキストを含むLabelコントロールが追加されました。はnull日付としてマークされます。問題は、DateTimePickerが通常のカレンダーアイコンを表示するように設定されている場合、このボタンの幅が可変であるということです。

以下の画像は、サイズが異なる同じDateTimePickerコントロールを示しています。カレンダーアイコンボタンがテキストと重なり始めるとすぐに、小さくてシンプルなドロップダウンアイコンボタンに変更されます。

ここに画像の説明を入力してください ここに画像の説明を入力してください ここに画像の説明を入力してください ここに画像の説明を入力してください

リフレクションを使用してプライベートフィールドの読み取り/書き込みを試すことはできますが、何を読み取るか迷っています。

私の質問..DateTimePickerコントロールに表示されているカレンダーアイコンの幅を正しく確認するにはどうすればよいですか。

4

2 に答える 2

2

私は自分で方法を見つけました..=)..DateTimePickerコントロールが表示されたテキストよりも広い場合にカレンダーアイコンボタンを表示します..ボタンがテキストのクリップを開始すると、コントロールは自動的に小さなドロップダウンボタン(表示されます元の質問の画像の2行目)。テキストの幅、カレンダーアイコンボタン、ドロップダウンボタン、およびコントロール自体を確認します。次の計算は簡単です。

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.. =)..私の目的を果たしました.. =)

于 2012-11-26T05:30:32.130 に答える
0

車輪の再発明をする必要はありません。これをチェックしてください:

CodeProjectのNullableDateTimePicker

そしてこれ:

さらに別のnull許容のDateTimePickerコントロール

ここに画像の説明を入力してください

于 2012-11-26T00:20:49.430 に答える