关于ListView::ColumnWidthChanging没响应问题的研究

原创 2012年03月22日 10:57:20

ColumnWidthChanging 算是一个bug吧

起初我就纳闷,为什么同一个项目在笔记本上运行的好好的,跑到台式机上就无效了呢?原本是想利用这个事件来控制列表视控件,以固定某些列的宽度,在网上找资料,纷纷提出只要使得ColumnWidthChangingEventArgs e 中的e.Cancel = true;就可以了,查看msdn的说明,确实也是这么个意思,试了一下,竟然不行!愤怒之余,又上网找资料,说,还得添加e.NewWidth = listview1.Columns[e.ColumnIndex].Width;再试,终于可以了(笔记本),于是心花怒放的移植到了台式机中的项目中,竟然发现不行,实在是火都大。于是把笔记本上的实验项目拿过来测,确实不行,仔细调试一看,笔记本上ColumnWidthChanging的事件被触发了,而台式机上的ColumnWidthChanging事件根本没有响应过,火大啊,又遇到无厘头的问题了。再上网找资料,大部分都是关于要不要调用e.NewWidth = listview1.Columns[e.ColumnIndex].Width的争执。遇到跟我发现一样的比较少,而也基本没有找到原因所在。我是个比较固执的人,虽然可以用其他办法解决,但是不找到原因心里总是放不下,于是继续百度谷歌百度谷歌。。。。,偶尔在他人博客中看到这么一段说明:

In order to receive the ListView::ColumnWidthChanging, you need to enable full dragging of windows.

Here is how to enable full dragging of windows:
1. Go to Control Panel
2. Click on Display
3. On the "Display Properties" dialog go to "Appereance" tab
4. On the "Appearance" tab click on "Effects" button - this will open the "Effects" dialog.
5. On the "Effects" dialog see if the "Show windows contents while dragging" check box is checked. If the check box is not checked, then check it.
6. Close the "Effects" dialog and then the "Display Properties" dialog.

Now full dragging of windows should be enabled on your machine and the ListView should fire the ColumnWidthChanging event.
好吧,我承认第一次我没看懂,可能也因为我不太信博主,因为那哥们的博文,有些是中文,有些是全英文,我料他想必是直接COPY过来的,恐怕没验证过就直接发布,所以粗略看了一下,Control Panel 控件面板?窗体面板?去到项目的窗体面包,控件上,死活找不到有关于display的选项,在控件属性里也没看到相关的选项。于是没管它了,再搞了大半天也没找到解决方案。搁置了一会,过了一天,心中依然烦闷,于是再搜,在一个英文论坛中又看到了上面的说明,是来自VS2005 Product Team.想必是微软的技术团队,于是重视起来,仔细想一下Control Panel -》?  Control Panel -》?  Control Panel -》?   Control Panel -》控制面板,windows系统控制面板?进入控制面板,display-》显示选项?点击进去,找到了外观tab页面(Appereance)。。。明白了,在外观页面找到了效果按钮(Effects),并把“拖动时显示窗口内容”打上勾,

再运行项目,ColumnWidthChanging果然触发了,我哩个去,坑爹呢这是!后面写到We are investigating this issue. (我们正在探究这个问题),我哩个去!估计也算是bug了,最后在msdn上好像有说e.NewWidth = lv_detailsContainer.Columns[e.ColumnIndex].Width;是必须的。最后有:

 private void listview1_ColumnWidthChanging(object sender, ColumnWidthChangingEventArgs e)
        {
            //允许样品名称固定列宽
            if (e.ColumnIndex != 2)
            {
                e.NewWidth = lv_detailsContainer.Columns[e.ColumnIndex].Width;
                e.Cancel = true;
            }
          }

但是,如果在每个电脑上安装时都让用户设置这个选项,似乎不太合理,看来这个偷懒的方案必须放弃了,所以还是按众位所说,先记录列的宽度,然后在ColumnWidthChanged事件发生后修改回来好了,或者自己去处理mousemove事件。

仅次与大家分享,若有意见,欢迎指点!

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

ListView的item点击事件不响应(你觉得应该响应的,但是就是没响应,而且不是代码问题)

当你在使用listview的时候, 你使用的方式还是和以前一样,或者基本上没什么变化。 但是在activity里面的整个listview的响应事件就是不执行。 这是为什么呢 具体原理:好像是焦点惹的祸...

ListView的动态刷新问题——用notifyDataSetChanged没作用

也许很多开发的朋友,尤其是Android初学者(笔者也是个初学者),在动态刷新ListView时,使用notifyDataSetChanged并没有起到作用。有时会被困扰得很痛苦。 其实,在使用...

ListView的动态刷新问题——用notifyDataSetChanged没作用

原文转自:http://blog.csdn.net/wuzhipeng1991/article/details/38820647 非常感谢原博主的这篇文章,即解决了初学者的问题,又介绍了noti...

ListView的动态刷新问题——用notifyDataSetChanged没作用

也许很多开发的朋友,尤其是Android初学者,在动态刷新ListView时,使用notifyDataSetChanged并没有起到作用。有时会被困扰得很痛苦。 其实,在使用notifyData...

ListView的动态刷新问题——用notifyDataSetChanged没作用

也许很多开发的朋友,尤其是Android初学者,在动态刷新ListView时,使用notifyDataSetChanged并没有起到作用。有时会被困扰得很痛苦。 其实,在使用notifyData...

ListView的动态刷新问题——用notifyDataSetChanged没作用

也许很多开发的朋友,尤其是Android初学者,在动态刷新ListView时,使用notifyDataSetChanged并没有起到作用。有时会被困扰得很痛苦。 其实,在使用notifyData...

android - ListView的动态刷新问题——用notifyDataSetChanged没作用

在使用notifyDataSetChanged过程中,还是有细节需要注意的。举个例子: 我的ListView使用的数据源是来自ArrayList。通常我们的做法是创建一个已经有我们想要提供给ListV...

iOS 按钮、Cell暴力点击触发多次响应的问题研究

按钮的解决办法 cell的解决办法 相关阅读

【Android问题集】ListView不响应onItemClick事件

作者:Yogi前言:在机顶盒的直播应用项目中遇到listview完全不响应onItemClick事件,但是响应onItemSelected事件,这个问题该怎么解决呢?解决思路listView不响应on...

GridView,ListView 等adapter容器view设置setOnItemClickListener不响应的问题。

1.当你的itemview 中有xxxButton等控件的时候  子view 会消耗掉点击事件 ,只有换掉比如: ImageButton  换成ImageView  ,button 换textVie...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)