当使用ToolstripControlHost作为弹出控件时,填充/大小/边距 [英] Padding/ Size / Margin, when using ToolstripControlHost for a popup control

查看:136
本文介绍了当使用ToolstripControlHost作为弹出控件时,填充/大小/边距的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用VB2008 Express.我一直在研究弹出窗口"以选择日期范围. DateTimePicker并不理想,因为这样做的目的是选择一个日期范围,该范围始终是一个完整的星期,从星期日到星期六.该控件工作正常,我为此感到非常自豪.我的问题与为此使用ToolstripControlHost时添加的边框有关.我包括了屏幕截图和代码.

I'm using VB2008 Express. And I've been working on a "popup" to select a date range. The DateTimePicker isn't ideal because the purpose is to pick a date range, which will always be one full week, from Sunday through Saturday. The control works just fine and I'm pretty proud of it. My problem has to do with the border added when using ToolstripControlHost for this. I've included a screenshot and my code.

在下面的代码中,假设存在一个名为"btnTimePeriod"的按钮,在该按钮下方,我希望显示一个面板,其中包含一些自定义项,该面板的名称为"pnlDateRangePicker".

In the code below, assume there exists a button named "btnTimePeriod", below which I desire to show a panel, which contains a few custom items, and the panel's name is "pnlDateRangePicker".

工作正常...但是看起来不正确.面板本身为147 x 326像素,但请注意,在所附图形中,它在面板周围添加了我不希望的边框.顶部,底部和左侧都有边框...但是由于某种原因,右侧的边框特别大.尽管我的代码没有明确设置,但AutoSize = true,所以我希望它在面板上缩小.

IT WORKS... but it doesn't look right. The panel itself is 147 x 326 pixels, but notice in the attached graphic that it's adding a border around the panel which I don't want. There's a border on the top, bottom, and left... but for some reason the border on the right one is especially large. Although my code doesn't expressly set it, AutoSize = true so I would have expected it to shrink around the panel.

根据需要,我的代码已经将ShowCheckMargin和ShowImageMargin设置为false.我没有包含DrawDateCalander Sub的代码,因为它不相关.我相信,即使是空白面板也会产生相同的结果.我不知道这种余量从何而来.有指导吗?

As required, my code already does set ShowCheckMargin and ShowImageMargin false. I haven't included the code for the DrawDateCalander Sub because it's not relevant. I believe even a blank panel would yield the same result. I have no idea where this margin is coming from. Any guidance?

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

推荐答案

我从来没有为此使用ContextMenuStrip,也许就是问题所在.

I've never used a ContextMenuStrip for that, and maybe that's the problem.

您可以尝试使用ToolStripDropDown代替:

Private Sub ShowControl(ByVal fromControl As Control, ByVal whichControl As Control)
  '\\ whichControl needs MinimumSize set:
  whichControl.MinimumSize = whichControl.Size

  Dim toolDrop As New ToolStripDropDown()
  Dim toolHost As New ToolStripControlHost(whichControl)
  toolHost.Margin = New Padding(0)
  toolDrop.Padding = New Padding(0)
  toolDrop.Items.Add(toolHost)
  toolDrop.Show(Me, New Point(fromControl.Left, fromControl.Bottom))
End Sub

Private Sub btnTimePeriod_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnTimePeriod.Click
  Call DrawDateCalendar(DatePart(DateInterval.Month, FirstDisplayedSunday), DatePart(DateInterval.Year, FirstDisplayedSunday))
  '\\Call ShowControlBelow(btnTimePeriod, pnlDateRangePicker)
  Call ShowControl(btnTimePeriod, pnlDateRangePicker)
End Sub

这篇关于当使用ToolstripControlHost作为弹出控件时,填充/大小/边距的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆