(1)控件少、难以使用且外观很土。其中最夸张的是 ToolBar 控件:(1)设计者认为你对全部按钮要么都使用图标,要么都使用文本标签,否则就是脑子进水了;(2)如果你尝试在 ToolBar 上放置其他控件(如组合框)的话你是在跟自己过不去;(3)最受不了的是居然要用 if ... else 语句判断是哪个按钮被单击了,My God!难怪网上一直流传 Windows Forms 的控件是高中生写的。
(2)对 Win32 的封装过于高层又不完整,导致很多时候不得不手工进行平台调用。在网上能找到的 Windows Forms 控件或者应用程序没有几个不包含类似 [DllImport("User32.dll")] 这样的语句的。
(3)异步调用难以使用:在 .NET Framework 的其他很多需要传入回调委托的地方一般都允许同时传入一个状态值以方便在回调中使用,例如 ThreadPool.QueueUserWorkItem(WaitCallback callBack, object state),而 Control.Invoke 就是要让你受挫,如果你使用 MethodInvoker 委托或者 EventHandler 委托的话要自己定义一个类以包装状态值(因为它们都不接收状态值),否则你要自己新定义一个回调委托。Oh,My,God!要是没有 C# 2.0 匿名方法的话真是不知道会白写多少这种 shit 代码。
(4)列表视图排序:.NET Framework 集合类排序都是在 Sort 方法中传入 IComparer 接口控制排序(例如 ArrayList.Sort(IComparer)),而 ListView 的作者非常别出心裁的要求你将 IComparer 接口赋给 ListViewItemSorter 属性,然后再调用不带任何参数 Sort 方法。不明白这样的不一致有什么特别的好处。
(5)待续......