Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#MeasureItemHandler:e.项目高度未更改_C#_Listbox_Ownerdrawn - Fatal编程技术网

c#MeasureItemHandler:e.项目高度未更改

c#MeasureItemHandler:e.项目高度未更改,c#,listbox,ownerdrawn,C#,Listbox,Ownerdrawn,是我还是我只能为列表框设置一次itemheight-e.itemheight 虽然我在自己的Drawn listbox上处理MeasureItemEvent并将e.ItemHeight设置为正确的值,但只会使用设置的第一个高度 哎呀,我是新手,很抱歉。这是代码(DrawItemHandler当然在实际程序中): e.ItemHeight在事件触发中初始化为ListBox.ItemHeight。它不会保存以前设置的值。您必须修改ListBox.ItemHeight,或者跟踪变量中的修改 编辑:(

是我还是我只能为列表框设置一次itemheight-e.itemheight

虽然我在自己的Drawn listbox上处理MeasureItemEvent并将e.ItemHeight设置为正确的值,但只会使用设置的第一个高度

哎呀,我是新手,很抱歉。这是代码(DrawItemHandler当然在实际程序中):


e.ItemHeight
在事件触发中初始化为
ListBox.ItemHeight
。它不会保存以前设置的值。您必须修改
ListBox.ItemHeight
,或者跟踪变量中的修改


编辑:(在评论之后)

添加新项时,仅针对该项触发该事件。 当您调用
ListBox.Refresh()
时,它也会为所有项目触发

根据我对代码的理解,您需要一次增加/减少所有项目的ItemHeight

-->我想你必须在更新轨迹栏时调用
ListBox.Refresh


编辑2:

实际上,当ListBox接收到条目时,条目高度会发生更改,这仅在首次创建条目或添加条目时发生。在初始化时创建列表框及其所有项之后,由于刷新而在
listBox1\u MeasureItem
中对现有项进行的进一步更改是无用的(请参阅Reflector的帮助)

我找到了一种方法,可以在不删除和添加所有项目的情况下,强制将
WM_MEASUREITEM
发送到列表框:

In place of ListBox.Refresh(), put:

ListBox.DrawMode = DrawMode.Normal;
ListBox.DrawMode = DrawMode.OwnerDrawVariable;

e.ItemHeight
在事件触发中初始化为
ListBox.ItemHeight
。它不会保存以前设置的值。您必须修改
ListBox.ItemHeight
,或者跟踪变量中的修改


编辑:(在评论之后)

添加新项时,仅针对该项触发该事件。 当您调用
ListBox.Refresh()
时,它也会为所有项目触发

根据我对代码的理解,您需要一次增加/减少所有项目的ItemHeight

-->我想你必须在更新轨迹栏时调用
ListBox.Refresh


编辑2:

实际上,当ListBox接收到条目时,条目高度会发生更改,这仅在首次创建条目或添加条目时发生。在初始化时创建列表框及其所有项之后,由于刷新而在
listBox1\u MeasureItem
中对现有项进行的进一步更改是无用的(请参阅Reflector的帮助)

我找到了一种方法,可以在不删除和添加所有项目的情况下,强制将
WM_MEASUREITEM
发送到列表框:

In place of ListBox.Refresh(), put:

ListBox.DrawMode = DrawMode.Normal;
ListBox.DrawMode = DrawMode.OwnerDrawVariable;

你能发布代码吗?事件是否触发了一次以上?@Zenuka:是的,每个e.Index都会触发事件@Thomas:sure://///////listBox的Measureitem处理程序/////private void MeasureItemHandler(对象发送方,MeasureItemEventTargets e){e.ItemHeight=Convert.ToInt32(mySettings.ICurrentSizeActor*10)+1;}@Erik-你能编辑你的问题而不是将代码作为评论发布吗?你能发布代码吗?事件是否触发了一次以上?@Zenuka:是的,每个e.Index都会触发事件@Thomas:sure://///////listBox的Measureitem处理程序/////private void MeasureItemHandler(对象发送方,MeasureItemEventTargets e){e.ItemHeight=Convert.ToInt32(mySettings.ICurrentSizeActor*10)+1;}@Erik-你能编辑你的问题而不是将代码作为注释发布吗?想法是采用标准高度,并将其乘以sizeFactor。默认高度*尺寸系数=所需高度。sizefactor由轨迹栏控制,因此用户可以增大或减小字体大小。这更有意义吗?我确实调用了ListboxRefresh(),事件被很好地激发,更改的大小-e.ItemHeight-未被设置。预期的行为是,一旦处理MeasureItem事件,我应该能够设置e.ItemHeight,不是吗?(我肯定我错过了什么,但是什么?)就是这样!谢谢,它现在工作得很好,谢谢纳杰梅丁(以及所有其他帮助过它的人)!其思想是取标准高度并乘以sizeFactor。默认高度*尺寸系数=所需高度。sizefactor由轨迹栏控制,因此用户可以增大或减小字体大小。这更有意义吗?我确实调用了ListboxRefresh(),事件被很好地激发,更改的大小-e.ItemHeight-未被设置。预期的行为是,一旦处理MeasureItem事件,我应该能够设置e.ItemHeight,不是吗?(我肯定我错过了什么,但是什么?)就是这样!谢谢,它现在工作得很好,谢谢纳杰梅丁(以及所有其他帮助过它的人)!