问题标签 [ondrawitem]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1730 浏览

c# - 仅当用户单击 ListBox 时才会触发 DrawItem 事件

我正在使用 VS 2015 在 C# 中编写客户端/服务器 WinForms 应用程序。

我有一个ListBox控件,它的DrawItem事件是所有者绘制的(是的,我将DrawMode属性设置为OwnerDrawFixed),每次收到新消息时都必须重新绘制它。

我在这个参考之后使用这个回调:

这是MeasureItem方法:

消息被接收并插入使用ListBox.Add(),它确实有效,由调试器确认。

但是ListBox 仅在我单击它时才会重绘(我认为它会触发焦点)。

我已经尝试过了.Update().Refresh().Invalidate() 没有运气

有没有办法DrawItem()从代码触发?

0 投票
0 回答
308 浏览

winforms - Windows 窗体:手动绘制 ComboBox 的 SelectedItem

我有一个 ComboBox(更准确地说是 ToolStripCombobox),里面装满了KeyValuePair<Int32, FontFamily>. 我设法通过使用 DrawItem 事件手动绘制了 Items。所以每一个Item都用对应KeyValuePair的FontFamily来绘制。这适用于 DropDownList,但是当我从列表中选择一个项目并且列表关闭时,ComboBox 中的文本会显示类似“[21,[FontFamily: Name=Arial]]”的内容,这很可能是SelectedItem.ToString()。

任何想法如何解决这个问题?

这是我的自定义 DrawItem 方法的代码:

更新:

当我将组合框的 DropDownStyle 设置为时,它按预期工作ComboBoxStyle.DropDownList

但我宁愿使用ComboBoxStyle.DropDown,因此您可以编辑文本以搜索字体。

0 投票
1 回答
793 浏览

c# - How to call event on formload drawitem

I am using this code to put a image in listbox but the text does not show . When I click on the list then it shows . What is the problem ?

0 投票
1 回答
612 浏览

c# - winform listbox drawitem 更改子字符串颜色

我创建了一个 winform 自定义控件,它有一个文本框和列表框都共享相同的绑定源,以便可以使用文本框输入过滤列表框。

我需要覆盖 lisbox drawitem,以便将搜索文本作为子字符串的过滤项目具有不同的颜色或突出显示。(即)预期像下面的示例图像中的黄色突出显示。 样品参考

我做了如下

结果是项目文本被字符覆盖。

最初 搜索后

我无法识别错误部分,是在矩形边界还是在拉绳部分。除了项目背景颜色之外,如何更改项目文本中子字符串的背景。请帮助我。

0 投票
0 回答
117 浏览

c# - TabPage 控件中的 OnDrawItem 方法问题

我需要一个具有不同 TabPage Header 的自定义 TabControl。我已将 DrawMode 属性设置为“OwnerDrawFixed”,以便调用 OnDrawItem 方法。

在 OnDrawItem 方法中,我这样做:

将为每个现有页面调用该代码,并带有匹配的索引。但无论我做什么,它总是使用相同的 Header。

他正在绘制的矩形似乎是正确的。我也试过这样:

结果相同。那是我的 DrawTab 函数:

每个选项卡都应该是橙色的。但只有第一个会正确显示。(图片链接)

我不明白我的错误。

我希望有人能启发我:)

此致,

西蒙

*****更新***** 这是 TabPage 控件的完整代码,它正在执行选项卡绘制。我不确定为什么,但第二个选项卡中的缓冲区图像始终是透明的。

0 投票
1 回答
207 浏览

c# - 鼠标悬停在自定义 ListBox 的 ListBoxItems 上

我在 c# 中创建了一个自定义列表框。我使用 DrawItemEventArgs 在我的自定义 ListBox 上绘制了文本和图像。当鼠标悬停在矩形上时,我想在矩形(ListBox 的项)中填充一种颜色。有没有办法使用 DrawItemEventArgs 或其他方式。请帮忙。提前致谢。

0 投票
0 回答
221 浏览

mfc - OnEraseBkgnd(CDC* pDC) 处理程序中的设备上下文为空

我面临一个问题,我在 OnEraseBkgnd 功能处理程序中将设备上下文设置为 NULL。我在从 CTabCtrl 继承的自定义 Tab 控件类中有 OnEraseBkgnd 处理程序,在从 CButton 继承的另一个自定义按钮控件类的 DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 中也遇到了同样的问题。

设备上下文偶尔会变为 NULL,但并非总是如此。如果知道为什么此设备上下文会变为 NULL,请告诉我。

0 投票
1 回答
215 浏览

winapi - SysTabControl32 的 WM_DRAWITEM 被重绘?

我必须重新设计我们的 SysTabControl32,所以我尝试使用 TCS_OWNERDRAWFIXED 和 WM_DRAWITEM。一切正常,但似乎选项卡仍然被系统覆盖。

不幸的是,代码在可视对象中,这使事情变得更加复杂。在过去的几个小时里,我已经尝试了很多东西,暂时我一无所知。也许你们中的一些人可以提供帮助或给我一个提示。

这里有一些图片:

带有 TCS_OWNERDRAWFIXED 的“裸”选项卡控件。WM_DRAWITEM 处没有代码。

您会注意到选项卡未填充,但 3D 样式已绘制。这是我的主要问题,因为只要我知道这不应该发生。

图片

带有文本和背景颜色的 Ownerdrawn 选项卡(丑陋但对查看问题很有用)

图片

相同的 TabControl,但设置了 TCS_FLATBUTTONS 和 TCS_EX_FLATSEPARATORS。仍然是灰色背景的问题。

图片

如您所知,WM_DRAWITEM 将在父窗口中捕获。我还尝试在 TabControl 本身中覆盖或忽略 WM_PAINT。但这无济于事。

我也玩过 WM_ERASEBKGND,但我被困在这一点上。

在从 codeplex 到 codeguru 甚至 vbAccelerator 的所有页面上,它都应该可以工作。应该:)不知道它是否是视觉对象,但API是API,这仍然是一个标准控件。

WM_DRAWITEM 包含此代码,看起来还可以。项目是 DRAWITEMSTRUCT。

0 投票
1 回答
35 浏览

vb.net-2010 - 在 DataRepeater_DrawItem 事件期间检索位于面板上的文本框的 .Text

我正在使用 DataRepeater 的 DrawItem 事件来更改基于 .Text 内容的文本框的 .BackColor 和 .ForeColor 。这工作得很好,除非文本框位于面板上。如果文本框在面板上,那么我将返回此异常:“对象引用未设置为对象的实例。” 它表示“e.DataRepeaterItem.Controls(txt_AWQRecordStatus.Name).Text”没有值。单步执行代码即可确认。

但是...如果我只是将该文本框从面板上滑下来,那么它就可以了。我的 Google-Fu 让我失望了。我错过了什么?

附加信息:Visual Studio 2010 Professional,VB.Net 目标 .NET 4.0

0 投票
0 回答
41 浏览

delphi - 如何制作带有缩略图的 FileListBox?

我正在尝试使用缩略图构建文件列表框。为了实现这一点,我正在做:

  1. 用文件夹中的文件馈送 a TListBox
  2. 用缩略图构建一个数组——为此我使用一个临时TImage组件来加载图片并调整它的大小。
  3. 用缩略图绘制列表框。

这是我的代码:使用数组TImage而不是的旧版本TBitmap正在工作,但仅在小文件夹中工作-但在包含 100 多个文件的文件夹中,CPU 运行 100% 并且需要大量时间处理,所以我尝试更改TBitmap为TImage`,但现在我看不到缩略图了。