{"record":{"id":"aecb655272de6a6a","repo":"dotnet/wpf","slug":"sr-printdialoginvalidpagerange","errorCode":null,"errorMessage":"SR.PrintDialogInvalidPageRange","messagePattern":"SR\\.PrintDialogInvalidPageRange","errorType":"validation","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Controls/PrintDialog.cs","lineNumber":83,"sourceCode":"                _pageRangeSelection = value;\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets a PageRange objects used when the PageRangeSelection\n        /// option is set to UserPages.\n        /// </summary>\n        public PageRange PageRange\n        {\n            get\n            {\n                return _pageRange;\n            }\n            set\n            {\n                if ((value.PageTo <= 0) || (value.PageFrom <= 0))\n                {\n                    throw new System.ArgumentException(SR.PrintDialogInvalidPageRange, \"PageRange\");\n                }\n\n                _pageRange = value;\n\n                if (_pageRange.PageFrom > _pageRange.PageTo)\n                {\n                    int temp = _pageRange.PageFrom;\n                    _pageRange.PageFrom = _pageRange.PageTo;\n                    _pageRange.PageTo = temp;\n                }\n            }\n        }\n\n        /// <summary>\n        /// Gets or a sets a flag to enable/disable the user page range support on\n        /// the print dialog.\n        /// </summary>\n        public bool UserPageRangeEnabled","sourceCodeStart":65,"sourceCodeEnd":101,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Controls/PrintDialog.cs#L65-L101","documentation":"PrintDialog.PageRange setter validates PageRange before storing it: either PageFrom or PageTo being <= 0 raises ArgumentException with SR.PrintDialogInvalidPageRange. Page numbers are 1-based; zero or negative bounds are meaningless print ranges. The stored range is then further normalized/validated (From > To handling follows).","triggerScenarios":"Assigning printDialog.PageRange = new PageRange(0, 10) or (5, 0) or any negative value; copying a PageRange from user input where 'all' was encoded as 0.","commonSituations":"Print dialogs or automation scripts reading page numbers from UI text boxes without parsing validation; defaults initialized to 0 instead of 1.","solutions":["Validate that both PageFrom and PageTo are >= 1 before assigning PageRange.","Clamp or default invalid input: if from < 1, use 1; ensure from <= to or swap/normalize.","If 'print all' was intended, leave PageRange unset or set UserPageRangeEnabled = false instead of using 0."],"exampleFix":"// before\ndialog.PageRange = new PageRange(userFrom, userTo); // userFrom may be 0 -> throws\n// after\nint from = Math.Max(1, userFrom);\nint to = Math.Max(from, userTo);\ndialog.PageRange = new PageRange(from, to);","handlingStrategy":"validation","validationCode":"bool valid = range.PageFrom >= 1 && range.PageTo >= 1;\nif (valid) printDialog.PageRange = range;","typeGuard":"static bool IsValidPageRange(PageRange r) => r.PageFrom >= 1 && r.PageTo >= 1;","tryCatchPattern":"try\n{\n    printDialog.PageRange = range;\n}\ncatch (ArgumentException)\n{\n    // invalid page numbers from user input; fall back to full-document print\n}","preventionTips":["Parse and clamp user-entered page numbers before assignment","Remember pages are 1-based in WPF printing","Represent 'print all' with UserPageRangeEnabled = false, not zero bounds"],"tags":["wpf","printing","argument","validation"],"backgroundTag":"value-out-of-range","analyzedSha":"81131a70a4c573cd62748a5c36908fc4d662daa9","analyzedAt":"2026-09-14T10:12:48.479Z","contentChangedAt":"2026-09-14T10:12:48.479Z","schemaVersion":2},"datasetVersion":"2026-09-21T21:30:21.729Z"}