2015-09-12 46 views
0

是否有一种方法可以在不将Enable属性设置为False的情况下禁用ListView。基本上,捕捉并忽略任何鼠标点击或键盘输入。 VB2013。VB.NET禁用ListView而不将Enable属性设置为false

+1

删除事件处理程序或设置一个IgnoreStuff标志,当你退出子时它是真的,你不想要的东西发生 – Plutonix

+0

删除事件处理程序不会抑制**默认的**行为的ListView。您必须通过从ListView继承或使用IMessageFilter将它们捕获来禁止鼠标事件和键盘事件。您还必须通过其他控件的Tab和/或Arrow键来防止ListView获得** focus **。 –

回答

1

这里的另一种方法...

有ListView控件绘制自身的位图,并显示在PictureBox是采取的ListView的地方。交换两个控件必要的:

Public Class Form1 

    Private pbListView As PictureBox 
    Private ListViewDisabled As Boolean = False 

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     If Not ListViewDisabled Then 
      pbListView = New PictureBox 
      Dim bmp As New Bitmap(ListView1.Size.Width, ListView1.Size.Height) 
      ListView1.DrawToBitmap(bmp, New Rectangle(0, 0, bmp.Width, bmp.Height)) 
      pbListView.Image = bmp 
      pbListView.SizeMode = PictureBoxSizeMode.AutoSize 
      pbListView.Location = ListView1.Location 
      pbListView.Dock = ListView1.Dock 
      ListView1.Parent.Controls.Add(pbListView) 
      pbListView.BringToFront() 
      ListView1.Enabled = False 
      ListViewDisabled = True 
     Else 
      ListView1.Enabled = True 
      pbListView.Dispose() 
      ListViewDisabled = False 
     End If 
    End Sub 

End Class 

这将允许您禁用ListView控件,因此它不能获得焦点(注意键盘输入的),并且让图片框处理鼠标输入抑制。

如果你需要捕获ListView与当前焦点的项目,那么你将不得不采取一个实际的截图。但是,这可能会产生问题,因为其他窗口可能会遮挡窗口并被图像捕获。

+1

工程就像一个魅力!谢谢 – SteveZ

+0

差不多。如果窗口调整大小,并且控件的大小被调整,那么事情就会崩溃。 – SteveZ

+1

当然......在这种情况下,当表单被调整大小时,重复这个过程。 “启用”ListView,允许它调整大小并重新绘制自己,拍摄照片,然后再次将PictureBox放在前面以“禁用”它。 –

相关问题