Summary: ProductFeedback about the .NET framework
SeeAlso: ProductFeedback, Microsoft_.NET@Wikipedia

The MSDN team have created a web-based feedback site - you can submit bug reports straight into their database! We'll gradually start deprecating this wiki, and pointing people over there instead -- JonathanHardwick

Bugs


DialogBoxesDuringDragAndDropEvent - when calling ""DialogBox"" during ""DragDrop"" event, all machine background and other open windows are not redraw - posted by ""ProTON""

TooltipsAndNumericUpDown - when tooltips are set on a control that hosts other controls within it (like ""NumericUpDown"") tooltips are not shown on those child controls.

DisplayMemberAndStringLength - the listbox calculates the size (e.g. for scrollbars) by the length of ToString()..

CheckEvents - the ""Tree-View"" has ""BeforeCheck"" and ""AfterCheck"" - ""CheckedListBox"" and ""ListView"" only ""ItemCheck""

TreeViewAndRightClick - if you right-click on an item (which wasn't selected befeore) inside a treeview and try to get that element inside the ""MouseDown-Event"" to have to manually set the item as selected..

ControlsAndXPStyle - not all controls support xp-style (e.g. ""NumericUpDown"" and buttons with images)..
Update: I believe this is fixed in .NET 2.0, try the beta - ShadowChaser

System.Windows.Forms.Binding Class - almost all of the "simple" data binding bugs can be traced back to the Binding class. The binding class always transforms null's into "DBNull.Value", which will crash any custom Business Entities.
The Binding class also has no mechanisms to force the push/pull of data (Added in 2.0?), the Binding.IsBinding property doesn't work (always returns true and the documentation does not make any sense - why does ResumeBinding set IsBinding to false, what??). Calling CurrencyManager.Refresh while a control's value is currently binding will crash with some sort of 'row' error. No way to determine if a Binding is currently binding (ie/ in the progress of pushing/pulling data). -ShadowChaser

System.Windows.Forms.ComboBox class is extremely slow when using complex data binding (ie/ setting the DataSource property causes excessive slowdowns). The ComboBox class will also synchronize all comboboxes that use the same list datasource... what??? I can understand synchronizing for the same Text/SelectedIndex/SelectedValue/etc properties, but the list just doens't make sense. What happens when I have a data entry form with two databound "country" drop downs? :( -ShadowChaser
-- Posted this to ProductFeedback and they improved ComboBox perf it in 2.0

Missing Features


System.IO.Directory.Copy() doesn't exist

I think I recall a recent blogs.msdn.com post that this was a design decision - there are too many choices to make about what the user really wants. Full recursive copy? Across filesystems? Copying access rights? -- JonathanHardwick

TimePicker - there is only a ""DateTimePicker"" :(

New Feature Suggestions


Declarative pre/post/invariant conditions implemented via standard attributes (like XC# , but for all .NET languages).

Interception..
Contracts and other typical aspects could benefit from similar facilities.

Provide some sort of event/delegate/etc that is fired immediately after an object is created - once all of the constructors have executed. As it stands right now, if you need to call a virtual method during construction, you can't do that safely. There are situations where there are no alternatives to calling virtual methods after construction. -ShadowChaser

Modify the label control to provide a mechanism for showing a "..." after the text if wordwrapping is turned off. (instead of just truncating it)
Update: This has been added to .NET 2.0

Add the ability to provide a "hook" (ie/ delegate) into the main Windows message pump - this is absolutely CRITICAL for developing games!

Weird documentation or features


The new System.Collections.Generic namespace (2.0) does not match the System.Collections namespace. For example, in Collection<T> all of the method paramaters are named different. Why? -ShadowChaser
-- This was changed in 2.0 beta 2. Collection<T> was moved to System.Collections.ObjectModel to signify it should be used in APIs, while List<T> is for general everyday use.

Voluntarially refusing permissions for safety reasons in a fully trusted assembly removes it's full trust! This makes it next to impossible to write "extra secure" applications that remove the permissions that will never be used. If I'm writing an application that uses ADO.NET (not a partially trusted assembly) and not the registry, if i refuse my registry permissions I loose full trust and cannot call the other assemblies or plugin components! Extremely frustrating! We desperately need a way to voluntarially refuse permissions while retaining full trust - ShadowChaser
Microsoft Communities