winforms icon indicating copy to clipboard operation
winforms copied to clipboard

When the helpNamespace property in helpProvider is blank after delete the previous saved URL, project exit from runtime automatically when press F1

Open Liv-Goh opened this issue 1 year ago • 11 comments

.NET version

.NET 9.0 SDK build: 9.0.100-preview.7.24321.3

Did it work in .NET Framework?

Yes

Did it work in any of the earlier releases of .NET Core or .NET 5+?

Yes, this is a regression issue. Not reproduced on .NET 8.0

Issue description

Current Behavior (.NET 9.0): When the helpNamespace property in helpProvider is blank after delete the previous saved URL, project exit from runtime automatically when press F1 and no error exception popped out.

https://github.com/dotnet/winforms/assets/169347065/fb053321-b64c-4e64-ab81-9c72b4d5ffcf

Expected Behavior (.NET 8.0): When the helpNamespace property in helpProvider is blank after delete the previous saved URL, error exception popped out when press F1. image

Steps to reproduce

1. Create a WinForms .NET 9.0 project
2. Add a button and helpProvider to form designer
3. Set button "showHelpOnHelpProvider1" property to True
4. Add a random URL (e.g. https://github.com/dotnet/winforms) to helpProvider "HelpNamespace" property, save
5. Delete URL in "HelpNamespace", save
6. Run the project and press F1

Liv-Goh avatar Jun 25 '24 01:06 Liv-Goh

Issue is here: https://github.com/dotnet/winforms/blob/5ba64aeb545308babc843c8d4ecee1e069e85ead/src/System.Windows.Forms/src/System/Windows/Forms/Help/HelpProvider.cs#L130-L144

It should be:

if (!string.IsNullOrEmpty(HelpNamespace))

elachlan avatar Jun 25 '24 02:06 elachlan

@Liv-Goh two things:

  • What is the value of the HelpNamespace in the designer.cs?
  • What is the stack trace from .NET 8? (we should see what argument exception is thrown.)

elachlan avatar Jun 25 '24 02:06 elachlan

@elachlan the test results are as below

  • What is the value of the HelpNamespace in the designer.cs?

HelpNamespace value is empty string in both .NET 8 and 9 image

  • What is the stack trace from .NET 8? (we should see what argument exception is thrown.)

System.ArgumentException HResult=0x80070057 Message=Help URL '' is not valid. (Parameter 'url') Source=System.Windows.Forms StackTrace: at System.Windows.Forms.Help.ShowHTMLFile(Control parent, String url, HelpNavigator command, Object param) at System.Windows.Forms.HelpProvider.OnControlHelp(Object sender, HelpEventArgs hevent) at System.Windows.Forms.Control.OnHelpRequested(HelpEventArgs hevent) at System.Windows.Forms.Control.WmHelp(Message& m) at System.Windows.Forms.Control.WndProc(Message& m) at System.Windows.Forms.ButtonBase.WndProc(Message& m) at System.Windows.Forms.NativeWindow.Callback(HWND hWnd, MessageId msg, WPARAM wparam, LPARAM lparam)

Liv-Goh avatar Jun 25 '24 03:06 Liv-Goh

https://github.com/dotnet/winforms/blob/5ba64aeb545308babc843c8d4ecee1e069e85ead/src/System.Windows.Forms/src/System/Windows/Forms/Help/Help.cs#L53-L64

https://github.com/dotnet/winforms/blob/5ba64aeb545308babc843c8d4ecee1e069e85ead/src/System.Windows.Forms/src/System/Windows/Forms/Help/Help.cs#L290-L309

https://github.com/dotnet/winforms/blob/5ba64aeb545308babc843c8d4ecee1e069e85ead/src/System.Windows.Forms/src/System/Windows/Forms/Help/Help.cs#L194-L196

Help.GetHelpFileType probably needs to check for empty string instead of a standard null check. We also should probably throw ArugementNullException in ShowHTML10Help, like we do in ShowHTMLFile.

elachlan avatar Jun 25 '24 03:06 elachlan

@elachlan would you like to work on this one, or should I assign a team member? This is definitely one I want to take for .NET 9.

merriemcgaw avatar Jun 25 '24 18:06 merriemcgaw

@merriemcgaw happy for someone else to take this on.

elachlan avatar Jun 26 '24 23:06 elachlan

@LeafShi1 - could your teams please take a look?

Tanya-Solyanik avatar Jun 28 '24 17:06 Tanya-Solyanik

@LeafShi1 - could your teams please take a look? @SimonZhao888 will investigate this issue

LeafShi1 avatar Jul 01 '24 02:07 LeafShi1

@Liv-Goh, could you try to change the exception setting to see whether the error exception will pop out? image

And make sure you have disenable the 'Enable Just My Code' in Debugging Options Setting. image

SimonZhao888 avatar Jul 02 '24 03:07 SimonZhao888

@SimonZhao888 Yes, the error exception will pop out after change the exception setting and set 'Enable Just My Code' to disable image

Liv-Goh avatar Jul 02 '24 04:07 Liv-Goh

Hi @merriemcgaw, @Tanya-Solyanik, @elachlan,

After we change the exception setting, the error exception will pop out, and error exception throwing for empty strings of helpNamespace property is also consistent with framework 4.7.2 and .NET 8.0.

I think we don't need add any check for empty string of helpNamespace property.

SimonZhao888 avatar Jul 02 '24 07:07 SimonZhao888