填充/大小/边距,当使用 ToolstripControlHost 作为弹出控件时

2024-01-21

我正在使用 VB2008 Express。我一直在研究一个“弹出窗口”来选择日期范围。 DateTimePicker 并不理想,因为其目的是选择一个日期范围,该范围始终是一整周,从星期日到星期六。控制效果很好,我对此感到非常自豪。我的问题与使用 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

我从来没有用过ContextMenuStrip为此,也许这就是问题所在。

您可以尝试使用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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

填充/大小/边距,当使用 ToolstripControlHost 作为弹出控件时 的相关文章

  • 如何将事件处理程序添加到 VB.NET 中的局部变量

    我在 VB NET 中有一个窗体 用作主窗体中的对话框 它的实例始终是本地定义的 没有对应的字段 当用户单击对话框中的 确定 按钮时 它将触发一个只有一个参数的事件 即我的类之一的实例 由于它始终是局部变量 因此如何为该事件添加事件处理程序
  • 我想在 VB6 程序中使用 VB.NET dll。是否可以?

    我在 VB6 程序中使用 VB NET dll 时遇到问题 我已经使用 GuidAttribute 创建了 dll 使用 RegAsm 创建了 tlb 并将其添加到我的 VB6 程序的引用中 问题是当我尝试使用 CreateObject 函
  • VB.NET 中字节数组的数组

    我需要一个数组 数组中的每个项目都是这样的字节数组 但我不知道如何执行以下操作 Dim xx as array xx 0 as byte H12 HFF xx 1 as byte H45 HFE 您可以像这样创建嵌套或 锯齿状 字节数组 D
  • 为 ASP.NET MVC 实现自定义登录

    我是 ASP NET MVC 的新手 需要一些关于如何实现以下内容的建议 该站点是一个使用率很高的站点 内部 内联网 约有 200 个用户 我们使用表单身份验证来访问 SQL Server DB 不是 Windows 集成 有些操作受到保护
  • 自动加载 linq2entities 中的关系

    当我的模型中的两个实体之间存在关系时 组成员 1 用户 并尝试使用 LINQ 从该关系中选择项目 从 user GroupMember 中的实体选择实体 除非我首先使用以下语句加载关系 否则我总是得到空结果 user GroupMember
  • 我可以快速将我的组件替换为自定义主题的组件吗?

    我想通过使用自定义创建的主题来改善程序的外观 如下所示 http www mpgh net forum 33 visual basic programming 492570 biesis vb net theme archive html
  • vb.net 中的简单 rot13 编码器

    我正在寻找一种简单的方法将输入的文本编码为 Rot13 在能够将单词分离为单个字符和整数以便我可以更改每个字符并输出结果的阶段 我遇到了困难 我可以使用下面列出的简单 if 语句来使用单个字母来完成此操作 但如果有人可以帮助找到整个单词的方
  • 设置外部应用程序焦点

    在 VB NET 中 您可以使用以下命令将焦点设置到外部应用程序 AppActivate Windows Name or AppActivate processID As Integer 现在 如果您这样做 则效果很好 Dim intNot
  • 从文件夹中选择随机图像以显示在 picturebox、vb.net 中

    我有一个图片框 它从文件夹中读取图像进行显示 而不是通常的无聊图像 我认为在文件夹中包含许多图像并让我的 vb net 程序随机挑选一个来显示可能会更好使用 我怎样才能做到这一点 尝试这个 Public Function GetRandom
  • “更新/取消”按钮不会出现在模板字段编辑按钮中

    当您使用 Gridview 的每一行创建编辑按钮时CommandField单击后它会显示更新 取消按钮 以便您可以接受 取消更改 但是 我想要一个带有工具提示文本的编辑按钮 因为CommandField没有工具提示属性 我用过Templat
  • 如何在 vb.net 中使用 Stacktrace 返回错误行号

    我正在尝试创建某种错误捕获方法来返回错误行号 当进程中止时 我们会发送一封中止电子邮件 该电子邮件为我们提供了错误号 and 错误描述但我想知道实际上哪里出了错误 我知道你可以执行以下操作 1 code here 2 code here 3
  • 检查有效的 IMEI

    有人知道如何检查有效的 IMEI 吗 我找到了一个可以检查此页面的功能 http www dotnetfunda com articles article597 imeivalidator in vbnet aspx http www do
  • Visual Studio 多个启动项目之间存在延迟?

    如何在解决方案中的启动项目之间添加一些延迟 我希望客户端项目在启动 WindowsService 后 2 3 秒后启动 为什么我需要这个 WindowsService运行socket服务器 Client运行socket来连接服务器 Wind
  • 动态版本控制

    我有一种情况 我希望版本控制在构建时是动态的 版本图案
  • 将 .NET P/Invoke 代码组织为 Win32 API 的最佳实践

    我正在 NET 中重构一个大型且复杂的代码库 该代码库大量使用 P Invoke to Win32 API 该项目的结构不是最好的 我发现 DllImport 语句遍布各处 经常为同一函数重复 并且还以多种方式声明 导入指令和方法有时声明为
  • VB - 如何读取和写入二进制文件?

    如何从任何文件读取原始字节数组 Dim bytes as Byte 然后将该字节数组写回到新文件中 我需要它作为字节数组来在两者之间进行一些处理 我目前正在使用 To read Dim fInfo As New FileInfo dataP
  • 某些笔记本电脑中的 VB.net Forms UI 显示问题

    我是 VB 应用程序的新手 无法弄清楚我的应用程序出了什么问题 有一个带有几个标签和文本字段的表单 当我在我和其他人的机器上运行该应用程序时 它显示良好 并具有正确的对齐和字体 然而 对于某些人来说 应用程序表单 UI 是破碎的 未对齐的文
  • 将 PDF 嵌入到 WPF 应用程序中

    我正在尝试在 WPF 应用程序中嵌入 显示 PDF 到目前为止 我已经尝试过这些解决方案 但没有成功 在 a 中显示 PDFWindowsFormsHost主持一个AxAcroPdf控制 类似于显示的内容here http hugeonio
  • C# 的最佳替代“错误继续下一步”是什么?

    如果我为 C 代码放置空的 catch 块 它是否与 VB NET 的 On Error Resume Next 语句等效 try C code catch exception 我问这个问题的原因是因为我必须将 VB NET 代码转换为 C
  • VB.NET 中的模块变量何时实例化?

    我想知道在程序的生命周期中 模块中的变量将被初始化 如下例所示 Module Helper Friend m Settings As New UserSettings Sub Foo End Sub Sub Bar End Sub End

随机推荐

  • 同一个套接字上可以进行多少个异步套接字请求?

    当我在套接字上调用 BeginSend 时 我传递一个委托 该委托将在数据发送后 由不同的线程 调用 如果我在第一次尚未 回调 时再次调用 BeginSend 会发生什么 发送数据的正确行为是什么 执行 BeginSend 然后在回调中执行
  • linux 上的 Dart 抛出错误:GLIBC_2.14 GLIBC_2.15 not found

    我在 Google Compute Engine 上运行 Debian 7 2 尽管我怀疑 Centos Red Hat 和 Amazon Linux AMI 都有同样的问题 从 下载 64 位 Linux 版本的 Dart SDK 后这一
  • Gunicorn 工作线程和线程

    就 Gunicorn 而言 我知道有各种工作线程类 但对于本次对话 我只关注同步和异步类型 据我了解 sync workers 2 cpu 1 worker class sync async gevent workers 1 worker
  • 当我期望它输出 1,2,3 时,为什么此代码输出“49,50,51”

    package com company import java util Scanner public class Main public static void main String args System out println pl
  • 在 Docker Alpine 上安装 numpy

    我正在尝试在基于 Alpine 3 1 的 docker 容器中安装 numpy 我正在使用以下 Dockerfile FROM alpine 3 1 RUN apk add update make cmake gcc g gfortran
  • 如何使用 alembic --autogenerate 忽略某些模式

    我有一个图书馆 它是一个更大项目的一部分 该库在与较大项目共享的 PostgreSQL 数据库中使用自己的模式 我想用alembic revision autogenerate仅生成库架构的迁移并忽略对主 默认架构中表的更改 有什么选择可以
  • Zebra LP2844 停止响应 ZPL 命令或文件

    我向打印机发送了几个 zpl 文件来测试它 它工作得很好 之后 我从 UPS 接收 Base64 编码的 zpl 数据 创建一个文件并通过 Java 小程序将其发送到打印机 现在我发送给它的任何 zpl 命令或文件都不起作用 我将其置于诊断
  • MVC Core 如何强制/设置所有操作的全局授权?

    如何强制 设置 MVC Core 中所有操作的全局授权 我知道如何注册全局过滤器 例如我有 Setup cs services AddMvc options gt options Filters Add new RequireHttpsAt
  • 学说无关系连接[重复]

    这个问题在这里已经有答案了 可能的重复 是否可以在不使用关系的情况下连接 ORM 中的表 https stackoverflow com questions 2203027 is this possible to join tables i
  • Golang gin gonic Web框架代理路由到另一个后端

    如何将一些路由的代理 Web 请求反向到另一个后端杜松子酒 https gin gonic github io gin Golang 网络框架 有没有办法直接在Handle函数中转发如下图 router gin New router Han
  • maven中package和groupId有什么区别

    我了解这些条款 groupId artifactId and version 在阅读有关package 我可以看到它是您的根包的名称 默认值是groupId你之前进入过 在这种情况下 有什么区别package and groupId 我想它
  • Magento 1.9 - OroCRM 更新同步无法正常工作

    从 magento 1 9 更改客户详细信息后 更改未反映在 OroCRM 上几乎 2 天后仍然没有更改未反映在 OroCRM 上 如何同时在每个更改中进行自动同步 None
  • 无法使用 UPDATE 更改 MySQL 上的用户密码

    在 MySql 5 7 17 下 上述指令不起作用 并且我总是没有收到任何反馈或以下错误消息 错误 1064 42000 您的 SQL 语法有错误 检查与您的 MySQL 服务器版本相对应的手册 了解在 UPDATE mysql user
  • 如何使用 ps -axl 查找 Linux 上运行的 Java 线程?

    我有一个正在运行的 JVM 有两个线程 是否可以使用 ps axl 在我的 Linux 操作系统上查看这些正在运行的线程 我试图找出操作系统赋予我的线程的优先级 有关此其他问题的更多信息here https stackoverflow co
  • Error 方法内的 fmt.Sprint(e) 产生的无限循环

    根据四十四十的回复这个问题 https stackoverflow com questions 27474907 error infinite loop fmt Sprint e 将会通知e Error 转换值e to a string 如
  • 更改 pandas 中箱线图的面色

    我需要更改使用绘制的箱线图的颜色pandas实用功能 我可以使用以下命令更改大多数属性color争论但不知道如何改变facecolor盒子的 有人知道该怎么做吗 import pandas as pd import numpy as np
  • 将 SAML 身份验证添加到 .net WebAPI

    我需要将 SAML 身份验证添加到我的 Web 应用程序 WebAPI 后端 Angular 前端 并使用 Azure AD 作为我的身份提供商 我计划使用 Sustainsys Saml2 库 但我不确定如何正确使用该库提供的方法 我已将
  • 计算 Modbus RTU CRC 16

    我正在实现一个软件 可以通过串行方式读取和写入 Modbus RTU 协议中的数据 为此 我需要计算字节字符串末尾的两个 CRC 字节 但我无法执行此操作 在网上搜索 我发现两个函数似乎可以正确计算 CRC WORD CRC16 const
  • 如何使用 Google API PHP 客户端库和 Youtube API V3 将视频上传到 YouTube?

    尝试简单地使用上传视频Google API PHP 客户端 最新版本 1 1 6 https github com google google api php client releases but Youtube API V3 中的代码
  • 填充/大小/边距,当使用 ToolstripControlHost 作为弹出控件时

    我正在使用 VB2008 Express 我一直在研究一个 弹出窗口 来选择日期范围 DateTimePicker 并不理想 因为其目的是选择一个日期范围 该范围始终是一整周 从星期日到星期六 控制效果很好 我对此感到非常自豪 我的问题与使