返回首页

{A}
{S0}简介
这种控制是在题为quot的文章中的代码的扩展
mav.northwind开发控制以下功能:多选择的项目重新排序功能自动滚动而重新排序的ListView启用/禁用重新排序的功能与DisableItemReorder属性能够锁定ReorderStartIndex财产的第一个(N)列表中的项目插入栏的颜色变化与InsertionLineColor财产
此外,我感动到ListView控件本身的重新排序ListView的事件处理程序,所以没有需要处理的范围内任何形式。最后,因为我的项目需要在VB,我改变了从C#VB程序员的代码。背景
在这篇文章中思想的背景中,你应征询mav.northwind文章,处理同一主题,但解决的自动滚动功能,以及。使用代码
使用此代码,只需添加自定义控件类ReorderListView到您的项目。建设控制类,然后使用上的Windows窗体ReorderListView控件。在VS2008中的示例代码和项目完成;但是,代码应工作在早期版本的罚款。兴趣点
处理多个选定项目的支持,只需首先选定的项目保存到一个列表集合,然后从ListView中删除,最后,插入ListView的所有在适当的指数回。至于自动滚动,它是一个简单的使用SendMessageA函数来滚动控制的问题。定时器和onTick事件处理,以启动在SendMessage例程,因此计时器的时间间隔设置的频率,在SendMessage调用例程。这将导致更频繁的SendMessage函数调用时,计时器的时间间隔值小,从而更快地滚动,和更少的呼叫时,计时器的时间间隔是慢滚动。

Public Sub New()



    ' This call is required by the Windows Form Designer.

    InitializeComponent()



    'Reduce Flicker

    SetStyle(Windows.Forms.ControlStyles.OptimizedDoubleBuffer, True)



    'Initialize Scrolling Timer

    tmrLVScroll.Enabled = False

    tmrLVScroll.Interval = 100



End Sub





#Region "Scrolling Support"



  'This section handles the auto-scrolling when an item 

  'is dragged to the top or bottom of the list



  Private Declare Function SendMessage Lib "user32" _

          Alias "SendMessageA" (ByVal hwnd As Integer, _

          ByVal wMsg As Integer, ByVal wParam As Integer, _

          ByRef lParam As Object) As Integer



  Private Sub tmrLVScroll_Tick(ByVal sender As System.Object, _

          ByVal e As System.EventArgs) Handles tmrLVScroll.Tick

    ScrollControl(Me, intScrollDirection)

  End Sub



  Private Sub ScrollControl(ByRef objControl As Control, ByRef intDirection As Integer)

    Const WM_SCROLL As Integer = &H115S

    SendMessage(objControl.Handle.ToInt32, WM_SCROLL, intDirection, VariantType.Null)

  End Sub



#End Region

现在,它只是使定时器滚动和确定方向的滚动,并禁用它不会滚动时的问题。要启用/禁用定时器,在合适的时间,我添加一个如下所示的MouseMove事件中的一小段代码。我用,而不是控制本身的顶部的列表顶部的项目,以确定控制滚动,使滚动工程是否显示或不列标题。{C}
这是很简单的实现,所以这里没有真正的神秘。没有华丽的编码,一切都非常简单,但是这就是我喜欢有少quot;无证featuresquot。我还要指出,这些项目得到重新排序至于它们的索引值是有关在任何视图(大图标,列表,详细信息等);然而,这些项目是不重绘正确地在其他意见比列表中的ListView细节,所以他们不会出现改变,改变的看法是,直到,然后改回(或也许如果所有的项目都重新加载)。因为我只需要在详细信息视图无论如何,我并没有刻意去追求,但如果你想重新排列的大图标视图中的项目,这是一个良好的开端。我没有正确的方式插入栏显示从原来的文章的其他意见原岗位mav.northwind。我希望这可以帮助别人。
由于时间所限,我不打算支持,所以我不期望后新的更新。使用它 - 但如果你有一个固定显示更新后重新安排大图标和其他意见建议,我敢肯定有人想听到。所有的感谢!历史2009年3月3日 - 战后初期。

回答

评论会员:lex_yacc 时间:2012/01/24
!非常感谢您
评论会员:keibel 时间:2012/01/24
谢谢你这个有用的代码,太多
评论会员:!贾马尔Alqabandi 时间:2012/01/24
尼斯之一... ... 5

谢谢
评论会员:。Lion_King1109 时间:2012/01/24
最后,我发现了一个伟大的关于IE TUTS使用C#{S2}你得我5!

我不可能=
评论会员:李汉弗莱斯 时间:2012/01/24
伟大的小工具 - 与其他浏览器(如火狐)做相同的任何指针?

我爱考拉 - 他们去培根的伟大
评论会员:托马斯丹泽尔 时间:2012/01/24
喜李汉弗莱斯,

事实上,我已经计划为Firefox做同样的工作,但我之前做一些研究。
乍一看,我看到,Firefox可以配置的方式离开时的文件删除,所以没有采取行动的需要为IE浏览器。
例如缓存文件没有扩展名(如HTM,JPG ...)...{ BR}
也许我会很快发布一个Firefox版本
评论会员:李汉弗莱斯 时间:2012/01/24
这是事实,火狐让你做了很多与历史 - 但不幸的是它仍然非常蛮力"删除一切"的方针。我喜欢你的工具是能够编辑的历史。

我爱考拉 - 他们去培根的伟大
评论会员:xrzs 时间:2012/01/24
是C版本
评论会员:托马斯丹泽尔 时间:2012/01/24
您好,
? 对不起,我写的程序在C#只和有没有C代码。
让我给你一些提示:
该方案是不是很难理解为主,三个功能部分组成:
- GUI部分:只有几个控件,我已经使用,如TabControl的单选按钮,按钮,和ProgressBar。他们使用C相似,所以如果我希望将它移植到C,我将开始与TabControl的实施一前一后的TabPage(和它的功能)。
- 注册表的访问,阅读和写:它不​​应该是C和C#之间的差异较大,同时作为语言相关的
。 - 在重启后删除文件:MoveFileEx是一个API函数(kernel32.dll),你可以使用它在C以及
。我试图在我的代码,并希望写的一些意见,他们是可以理解的{S2},这么好运,托马斯
评论会员:xrzs 时间:2012/01/24
谢谢你!我要为你写一个VC程序,
您的代码将极大地帮助我
评论会员:。stevenyoung 时间:2012/01/24
关于C#,我知道一点点,不明白的一些代码。谁能翻译下面的代码VB.NET?谢谢你。
////////////////////////////////////////////////// ////////////////////////////{ BR}(INT C = 0;彗星LT; buffer.Length - 4,C)
{
 0; ((缓冲[C] =='H')(缓冲[C 1] =='T')(缓冲[C 2] =='T')(缓冲[C 3] =='P'))
{
  ; 早产字符串="";
 60; (升= C;升LT; buffer.Length; L)
 0; {
 60;字节闪烁=缓冲区[L]
 0; ((='%')(闪烁=(闪烁LT)闪烁!'吗?"; = 127))
{
  ; 早产=(char)的(闪烁);
}
  ; ELSE
 60; {
&# 160;C = L;
(slink.Length GT; 4)
{
  ;字符串url_l = slink.ToLower()。修剪(delim.ToCharArray ());{ BR}& #160; 如果(links.ContainsKey(url_l)!)links.Add(url_l,url_l)
& #160; }
  ; 打破;
}
} / /
&# 160; } / /如果HTTP
& #160;
} / /
评论会员:爪Jershauge 时间:2012/01/24
试试这个:

For c As Integer = 0 To buffer.Length - 5

    If (buffer(c) = "h"c) AndAlso (buffer(c + 1) = "t"c) AndAlso (buffer(c + 2) = "t"c) AndAlso (buffer(c + 3) = "p"c) Then

        Dim slink As String = ""

        For l As Integer = c To buffer.Length - 1

            Dim blink As Byte = buffer(l)

            If (blink <> "%"c) AndAlso (blink <> "?"c) AndAlso (blink <= 127) Then

                slink += CChar((blink))

            Else

                c = l

                If slink.Length > 4 Then

                    Dim url_l As String = slink.ToLower().Trim(delim.ToCharArray())

                    If Not links.ContainsKey(url_l) Then

                        links.Add(url_l, url_l)

                    End If

                End If

                Exit For

            End If

        Next

    End If

Next

或者下一次,请谷歌VB.Net转换的C#:

伟大的代码,也带来了很大的复杂性,所以保持简单愚蠢的... {S4}"/> {S4}的"/>
评论会员:stevenyoung 时间:2012/01/24
谢谢你,我知道该怎么办

对于C作为整数= 0至buffer.Length - 3
如果缓冲区(C)= AscW会("H")AndAlso缓冲区(C 1)= AscW会("T")AndAlso缓冲区(C 2)= AscW会("T")AndAlso缓冲区(C 3)= AscW会("P" )
  ; 昏暗的早产作为字符串="
 60; DIM L为整数= C
  ; 对于L = C至buffer.Length - 1

 60; 昏暗的闪烁作为字节=缓冲区(L)
如果闪烁LT,GT,LT AscW会("%") AndAlso闪烁; GT; AscW会("?") AndAlso闪烁LT = 127
&# 160; 早产= ChrW的(闪烁)
& #160; ELSE
  ; C = L
&# 160; 如果(slink.Length GT; 4)
 0; DIM url_l的String = slink.ToLower
 60; Alllinks.Contains(url_l)= false,那么
 0; Alllinks.Add(url_l,url_l)
最终如果
最终如果
  ; 退出对于
 60; 最终如果
&# 160; 下一步
  ; 最终如果
 0; 下一步
评论会员:VDJ 时间:2012/01/24
尝试:如Visual Basic
粘贴一个Visual Studio外接在C#代码转换到Visual Basic