0

私は、標準の WinformDateTimePickerコントロールによく似たカスタム コントロールを実装しようとしています..建築上の長さの値をフィートとインチで表​​示するためのコントロールが必要なだけです..9'-6" のように..コントロールはこのように動作するはずです..

  • コントロールの右側に上下のスピン ボタンが 1 つ表示されます。
  • コントロールには、フィート用とインチ用の 2 つのサブフィールドが必要です。フィールドは、独自の境界線を持つ個々のes であってはなりません。TextBox
  • コントロールに値が関連付けられていない場合、「長さを指定してください」という灰色のゴースト テキスト文字列が表示されます。
  • コントロールをクリックすると、?'-?" と表示されます。ユーザーが長さを入力せずにクリックして離すと、ゴースト テキストが再び表示されます。
  • クリックしたときにサブフィールドのみを選択できるようにする必要があります。アップダウン スピン ボタンは、現在選択されているサブフィールドのみを変更します。
  • インチ サブフィールドは、3 単位で増減し、0 から 11 の範囲をラップする必要があります。

ゴーストテキストの要件を除いて、すべての機能が標準コントロールのどこかに存在する(またはオーバーライドできる)と思います..おそらく、実際にどのように機能するのかDateTimePickerを尋ねるべきです。どうすればその外観と動作を再現できますか..?DateTimePicker

私はGoogleとstackoverflowをよく見てきましたが、同様の質問や回答に出くわしていません..


編集01:

updownbase と maskedtextbox の組み合わせを使用する必要があると思います..しかし、方法がわかりません.. 1 つには.. maskedtextbox をクリックしてもサブフィールドが選択されません..また、updownbase をmaskedtextbox で現在選択されているサブフィールド..

4

1 に答える 1

4

すべての懸念に直接対処するわけではありませんが、始めるのに役立つことを願っていくつかの情報を投稿しようと思います. まず、無料のdotpeekデコンパイラを入手し、 CTRL+T を実行し、DateTimePicker型を見つけて、それがどのように機能するかを学ぶことができます。多くの winapi 呼び出しが表示されるように準備してください。すべてを理解し、必要に応じて書き直すことができるという確信がない限り、このルートには進まないでください。

より簡単な方法は、カスタム コントロールを作成することです。見栄えは良くないかもしれませんが、少なくともはるかに高速に動作させることができます。たとえばUserControl1、TextBox + ボタンで構成される を作成します。

Public Class UserControl1
  Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    Dim frm As New Form2
    Dim p = frm.PointToScreen(New Point(Me.Left, Me.Bottom))
    frm.Location = New Point(Me.ParentForm.Left, Me.ParentForm.Top + 40) + p
    frm.Show()
  End Sub
End Class

免責事項: +40 を行うのはコーディング標準としては不十分ですが、座標を画面/クライアントに変換するのに苦労した後、これが最善の方法です。より良い方法を見つけた場合は、コメントで提案してください。

とにかく、設計時には次のようになります。

ここに画像の説明を入力

Form2実際のポップアップの動作を模倣するために、フォーカスが失われると閉じます。

Public Class Form2
  Private Sub Form2_Deactivate(sender As Object, e As System.EventArgs) Handles Me.Deactivate
    Me.Close()
  End Sub
End Class

設計時には次のようになります ( FormBorderStyle = None):

ここに画像の説明を入力

このコントロールをコンパイルして、メイン フォームにドロップします。アプリケーションを実行します。ボタンをクリックすると、コントロールの下に ft/in ドロップダウンが表示されます。他のポップアップ (のポップアップを含むDateTimePicker) と同じように、他の場所をクリックすると消えます (Deactivateこのように動作させるためにイベントが使用されます)。その動作を説明するための図を次に示します。

ここに画像の説明を入力

検証、書式設定などを追加します。

于 2012-11-24T01:41:33.277 に答える