VB2008 Express를 사용하고 있습니다. 그리고 저는 "팝업"을 사용하여 기간을 선택했습니다. DateTimePicker는 일요일부터 토요일까지 항상 1 주일의 기간을 선택하기 때문에 이상적이지 않습니다. 컨트롤이 잘 작동하고 꽤 자랑 스럽습니다. 내 문제는 이것을 위해 ToolstripControlHost를 사용할 때 추가 된 경계와 관련이 있습니다. 스크린 샷과 코드를 포함 시켰습니다. 아래의 코드에서 Popsting/Size/Margin, 팝업 컨트롤 용 ToolstripControlHost 사용
이있다 생각 나는 몇 가지 사용자 정의 항목이 포함 된 패널을 표시하고자하는 아래 "btnTimePeriod"라는 이름의 버튼을, 존재하고 패널의 이름은 "pnlDateRangePicker"입니다.IT 작업 ...하지만 제대로 보이지 않습니다. 패널 자체는 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
감사합니다! LarsTech의 대답이 올바른 것입니다. 그러나 두 가지주의 사항 : 1) mnuDropDown.Maximumsize를 명시 적으로 mnuDropDown 크기로 설정해야했습니다. ShownControl보다 폭과 높이가 3 픽셀 적습니다. 패딩이나 마진 설정이라고 가정했지만 컨트롤이 설정되면 어떤 속성도 영향을 미치지 않았습니다. 2) 내 ShowMenuBelow 프로 시저의 목적은 버튼이 중첩 된 컨테이너의 여러 레이어 내에있을 때 폼에 상대적인 적절한 X/Y 위치를 찾는 것입니다. – PaulOTron2000