質問
VB6では、フォームにDTPickerコントロールがあります。 (DTPickerは、コンポーネントダイアログから利用可能なMicrosoft Windows Common Controls-2 6.0に含まれるカレンダーの日付/時刻セレクタです。)
カレンダーのドロップダウン時の色に影響を与える多くのプロパティがありますが、テキストボックスに表示される日付の色を変更できるプロパティはありません。標準のTextBoxのForeColorプロパティのようなものを探しています。
そのプロパティをシミュレートするためのAPIマジックはありますか?
解決
あまり役に立たないものを投稿するのは嫌ですが、これはマイクロソフトが開発者がコントロールで行うことを意図した範囲を超えたもののようです。確かに色を設定するためのAPI呼び出しが必要です(有効な場合は黒で塗りつぶし、無効な場合は灰色で塗りつぶすことをWindowsは確かに知っています)。
必要なことを行う方法で誰も応答しない場合、私の推奨事項は、必要なプロパティを備えた新しいDateTime Pickerコントロールを取得することです(サードパーティのオプションがいくつかあるようです)、または" roll独自の"コントロール。
FWIW、これと同じ問題がVB.NETに存在しますが、例外はMicrosoftが汎用Controlオブジェクトから継承したForeColor(およびBackColor)プロパティを具体的にオーバーライド(および非表示)して、何もしないことです。
他のヒント
DatePickerオブジェクトの2つの問題とそれらの回避策に対処します。
- DatePickerに空白の値を入力することはできません。これにより、2番目の問題が発生します。
- フォントの色を変更して、少なくとも空白にすることはできません。
DatePickerの機能を維持し、空の値と通常のフォントの書式設定オプション(色など)を使用できるようにするために、2つのオブジェクトを使用しました。最初にDTPオブジェクトを作成し、実際にドロップダウン矢印のみが見えるように幅を設定します。私にとってこれは15でした。その後、日付を保持するのに十分な幅の通常のTextBoxを作成します。 DTP矢印をテキストボックスの右(または左)に直接置きます。次に、DTPのChangeイベントにコードを追加して、その.ValueをTextBoxの.Textにコピーします。
Private Sub MyDTP_Change()
MyUserForm.MyDateTextBox.Text = MyUserForm.MyDTP.Value
End Sub
次に、MyDTP.Valueおよびpresto!の代わりにMyDateTextBox.Textにアクセスする必要があるデータ参照があります。通常のTextBoxの書式設定コントロールを使用して、DTPの機能を取得します。
編集: JeffK、すみません、私は9年前に本番環境でVBを使用していませんでした。 :)機能の反対側もこれに追加したいと思います。これにより、TextBoxとDTPの間で双方向の同期が可能になります。 IE:TextBoxに日付を手動で入力すると、DTPカレンダーが続きます。 TextBoxが空白または無効な日付を持つ場合、DTPはデフォルトで今日の日付になります。
Private Sub MyDateTextBox_Change()
If MyUserForm.MyDateTextBox.Text <> "" And
IsDate(MyUserForm.MyDateTextBox.Text) = True Then
If CDate(MyUserForm.MyDateTextBox.Text) <= MyUserForm.MyDPT.MaxDate And _
CDate(MyUserForm.MyDateTextBox.Text) >= MyUserForm.MyDPT.MinDate Then
MyUserForm.MyDTP.Value = MyUserForm.MyDateTextBox.Text
Else
MyUserForm.MyDTP.Value = Date
End If
Else
MyUserForm.MyDTP.Value = Date
End If
End Sub