好的,所以我试图理解"控制"的基本知识。是在Windows中构建的。我不知道如何绘制ListView控件(例如)中的各个部分。
让我们选择一个ListView,然后添加3个项目。
这些项目是如何开始的?
当用户选择项目时,他们如何选择项目? - 他们: 获得x& y鼠标按下事件中鼠标的坐标,然后查找在内部列表中该位置绘制的任何项目,然后使用不同的彩色背景重绘该位置中的特定项目,以向用户传达该项目是选择?
当用户选择了某个项目然后按向上或向下箭头键时,他们如何知道选择哪个项目(以及它们如何)? - 他们是否获得了最后一个选定项目的绳索,然后调整这些坐标,使它们与下一个要选择的项目一致?
最后,如果文字是"绘制"按照我说的方式,基本上它只是像素,对吧?所以,我怎么认为"知道"用户在同一位置点击时文本的内容。我是否应该存储在List中作为字符串绘制的所有文本片段以及坐标?
答案 0 :(得分:1)
你的问题似乎更多的是如何运作,而不是如何做到这一点,希望这会给你一个想法。
我们来一个ListView,并添加3个项目。 这些物品如何从那里开始?
他们是否在列表中的指定位置绘制列表项文本 列表视图的OnPaint事件中的listview控件? (例如: listView1_Paint(...){graphics.DrawString(...); }
列表视图中的所有项目都存储在集合(ListView.Items)中。每行都是ListViewItem
,其中包含用于呈现和与该行交互的必要信息。
他们要么在ListView的OnPaint中绘制它,要么在ListViewItem上绘制其他方法。通常,绘画是最符合逻辑的地方。我不能专门为ListView说话,但是当我构建我的网格时,我让每个Cell都有自己的绘图。
当用户选择项目时,他们如何选择项目? - 他们: 获得x&鼠标按下事件中鼠标的y坐标...
是的,是的,他们这样做。这被称为“命中测试”。请注意ListView上的HitTest(...)
方法。根据控件的具体实现,测量每个项目以正确计算滚动条值,当鼠标事件发生时,与滚动条一起针对鼠标信息进行命中测试,以确切地确定控件的哪个部分与...互动。
他们如何知道用户选择哪个项目(以及如何选择) 已经选择了一个项目然后按下向上或向下箭头键? - 他们得到最后一个选定项目的绳子,然后调整它们 coords,以便它们与下一个要选择的项目一致?
这只是一系列项目。他们知道目前已被选中。有很多不同的方法可以做到这一点,但一种方法是在项目上保留IsSelected
布尔值,然后在OnPaint()
调用中,如果选择它,则以不同方式呈现它。上下移动就像增加或减少所选项目的索引一样简单。真正的 fun 是指您需要开始上下移动子项并使用键盘处理多项选择。
最后,如果以我所说的方式“绘制”文本,那么 基本上它只是像素,对吧?那么,我该如何“知道” 用户在同一位置点击时文本的内容。我 应该存储在a中绘制为字符串的所有文本片段 同时列出坐标?
只是像素。该文是专门绘制的。你可以简单地问自己,“嗯,我怎么知道首先要绘制什么文字?”。
请记住,会有一系列项目包含绘图所需的所有信息。当HitTest
发生时,您应该返回包含绘图信息的对象,或获取它的其他信息。
要记住的主要事情是,您应该拥有存储所需信息的对象。查看ListViewItem课程以获得一个想法。