VB2008 Express を使用しています。そして、日付範囲を選択するための「ポップアップ」に取り組んできました。DateTimePicker は、日曜日から土曜日までの 1 週間の日付範囲を選択することが目的であるため、理想的ではありません。コントロールはうまく機能し、私はそれをかなり誇りに思っています. 私の問題は、これに ToolstripControlHost を使用するときに追加される境界線に関係しています。スクリーンショットとコードを含めました。
以下のコードでは、「btnTimePeriod」という名前のボタンが存在し、その下にいくつかのカスタム項目を含むパネルを表示したいとします。パネルの名前は「pnlDateRangePicker」です。
それは機能します...しかし、正しく見えません。パネル自体は 147 x 326 ピクセルですが、添付のグラフィックで、パネルの周囲に不要な境界線が追加されていることに注意してください。上下左右にフチがあるのですが、なぜか右のフチが大きいです。私のコードでは明示的に設定していませんが、AutoSize = true であるため、パネルの周りで縮小すると予想していました。
必要に応じて、私のコードでは既に ShowCheckMargin と ShowImageMargin を false に設定しています。関連性がないため、DrawDateCalander Sub のコードは含めていません。ブランクパネルでも同じ結果になると思います。このマージンがどこから来ているのか、私にはわかりません。ガイダンスはありますか?
Private Sub btnTimePeriod_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTimePeriod.Click
Call DrawDateCalendar(DatePart(DateInterval.Month, FirstDisplayedSunday), DatePart(DateInterval.Year, FirstDisplayedSunday))
Call ShowControlBelow(btnTimePeriod, pnlDateRangePicker)
End Sub
Sub ShowControlBelow(ByVal Showbutton As Control, ByVal ShownControl As Control)
Dim PopupContainer As New ToolStripControlHost(ShownControl)
PopupContainer.Margin = New Padding(0)
Dim mnuDropDown As New ContextMenuStrip
mnuDropDown.Padding = New Padding(0)
mnuDropDown.ShowCheckMargin = False
mnuDropDown.ShowImageMargin = False
mnuDropDown.Items.Add(PopupContainer)
ShowMenuBelow(Showbutton, mnuDropDown)
End Sub
Sub ShowMenuBelow(ByVal Showbutton As Control, ByVal WhichMenu As ContextMenuStrip, Optional ByVal AlignRight As Boolean = False)
Dim x As Integer = 0
Dim y As Integer = 0
Dim itscontainer As Control = Showbutton.Parent
x = Showbutton.Location.X
y = Showbutton.Location.Y
If Not itscontainer Is Nothing Then
Do Until TypeOf itscontainer Is Form
x = x + itscontainer.Location.X
y = y + itscontainer.Location.Y
itscontainer = itscontainer.Parent
If itscontainer Is Nothing Then Exit Do
Loop
End If
y = y + Showbutton.Height
If AlignRight = True Then
x = x - WhichMenu.Width + Showbutton.Width
End If
Dim xy As New Point(x, y)
WhichMenu.Show(Showbutton.FindForm, xy)
End Sub