private void ThreadExceptionDialog_DpiChanged(object sender, DpiChangedEventArgs e) { if (expandImage != null) { expandImage.Dispose(); } expandImage = DpiHelper.GetBitmapFromIcon(GetType(), DownBitmapName); if (collapseImage != null) { collapseImage.Dispose(); } collapseImage = DpiHelper.GetBitmapFromIcon(GetType(), UpBitmapName); ScaleBitmapLogicalToDevice(ref expandImage); ScaleBitmapLogicalToDevice(ref collapseImage); detailsButton.Image = detailsVisible ? collapseImage : expandImage; }
private static Bitmap GetBitmapFromIcon(string iconName) { Size desiredSize = new Size(s_iconsWidth, s_iconsHeight); Icon icon = new Icon(new Icon(typeof(DataGridViewHeaderCell), iconName), desiredSize); Bitmap b = icon.ToBitmap(); icon.Dispose(); if (DpiHelper.IsScalingRequired && (b.Size.Width != s_iconsWidth || b.Size.Height != s_iconsHeight)) { Bitmap scaledBitmap = DpiHelper.CreateResizedBitmap(b, desiredSize); if (scaledBitmap != null) { b.Dispose(); b = scaledBitmap; } } return(b); }
public ToolStripPanel() { if (DpiHelper.IsScalingRequirementMet) { _scaledRowMargin = DpiHelper.LogicalToDeviceUnits(s_rowMargin); } SuspendLayout(); AutoScaleMode = AutoScaleMode.None; InitFlowLayout(); AutoSize = true; MinimumSize = Size.Empty; // consider 1,1 _state[s_stateLocked | s_stateBeginInit | s_stateChangingZOrder] = false; TabStop = false; ToolStripManager.ToolStripPanels.Add(this); // not setting ControlStyles.AllPaintingInWmPaint as we don't do any painting in OnPaint... all // is done in OnPaintBackground... so its better to show the rafting container in WM_ERASEBACKGROUND. SetStyle(ControlStyles.ResizeRedraw | ControlStyles.OptimizedDoubleBuffer | /*ControlStyles.AllPaintingInWmPaint |*/ ControlStyles.SupportsTransparentBackColor, true); SetStyle(ControlStyles.Selectable, false); ResumeLayout(true); }
internal ToolStripPanelRow(ToolStripPanel parent, bool visible) { #if DEBUG _thisRowID = ++s_rowCreationCount; #endif if (DpiHelper.IsScalingRequirementMet) { _minAllowedWidth = DpiHelper.LogicalToDeviceUnitsX(MinAllowedWidth); } this.ToolStripPanel = parent; _state[s_stateVisible] = visible; _state[s_stateDisposing | s_stateLocked | s_stateInitialized] = false; Debug.WriteLineIf(s_toolStripPanelRowCreationDebug.TraceVerbose, "Created new ToolStripPanelRow"); using (LayoutTransaction lt = new LayoutTransaction(parent, this, null)) { Margin = DefaultMargin; CommonProperties.SetAutoSize(this, true); } }
private static Bitmap CreateScaledBitmap(Bitmap logicalImage, int deviceDpi = 0) { Size deviceImageSize = DpiHelper.LogicalToDeviceUnits(logicalImage.Size, deviceDpi); return(ScaleBitmapToSize(logicalImage, deviceImageSize)); }
public virtual void AddStandardItems() { // // Create items // MoveFirstItem = new ToolStripButton(); MovePreviousItem = new ToolStripButton(); MoveNextItem = new ToolStripButton(); MoveLastItem = new ToolStripButton(); PositionItem = new ToolStripTextBox(); CountItem = new ToolStripLabel(); AddNewItem = new ToolStripButton(); DeleteItem = new ToolStripButton(); ToolStripSeparator separator1 = new ToolStripSeparator(); ToolStripSeparator separator2 = new ToolStripSeparator(); ToolStripSeparator separator3 = new ToolStripSeparator(); // // Set up strings // // Default to lowercase for null name, because C# dev is more likely to create controls programmatically than // vb dev. char ch = string.IsNullOrEmpty(Name) || char.IsLower(Name[0]) ? 'b' : 'B'; MoveFirstItem.Name = ch + "indingNavigatorMoveFirstItem"; MovePreviousItem.Name = ch + "indingNavigatorMovePreviousItem"; MoveNextItem.Name = ch + "indingNavigatorMoveNextItem"; MoveLastItem.Name = ch + "indingNavigatorMoveLastItem"; PositionItem.Name = ch + "indingNavigatorPositionItem"; CountItem.Name = ch + "indingNavigatorCountItem"; AddNewItem.Name = ch + "indingNavigatorAddNewItem"; DeleteItem.Name = ch + "indingNavigatorDeleteItem"; separator1.Name = ch + "indingNavigatorSeparator"; separator2.Name = ch + "indingNavigatorSeparator"; separator3.Name = ch + "indingNavigatorSeparator"; MoveFirstItem.Text = SR.BindingNavigatorMoveFirstItemText; MovePreviousItem.Text = SR.BindingNavigatorMovePreviousItemText; MoveNextItem.Text = SR.BindingNavigatorMoveNextItemText; MoveLastItem.Text = SR.BindingNavigatorMoveLastItemText; AddNewItem.Text = SR.BindingNavigatorAddNewItemText; DeleteItem.Text = SR.BindingNavigatorDeleteItemText; CountItem.ToolTipText = SR.BindingNavigatorCountItemTip; PositionItem.ToolTipText = SR.BindingNavigatorPositionItemTip; CountItem.AutoToolTip = false; PositionItem.AutoToolTip = false; PositionItem.AccessibleName = SR.BindingNavigatorPositionAccessibleName; // // Set up images // Bitmap moveFirstImage = DpiHelper.GetBitmapFromIcon(typeof(BindingNavigator), "BindingNavigator.MoveFirst"); Bitmap movePreviousImage = DpiHelper.GetBitmapFromIcon(typeof(BindingNavigator), "BindingNavigator.MovePrevious"); Bitmap moveNextImage = DpiHelper.GetBitmapFromIcon(typeof(BindingNavigator), "BindingNavigator.MoveNext"); Bitmap moveLastImage = DpiHelper.GetBitmapFromIcon(typeof(BindingNavigator), "BindingNavigator.MoveLast"); Bitmap addNewImage = DpiHelper.GetBitmapFromIcon(typeof(BindingNavigator), "BindingNavigator.AddNew"); Bitmap deleteImage = DpiHelper.GetBitmapFromIcon(typeof(BindingNavigator), "BindingNavigator.Delete"); MoveFirstItem.Image = moveFirstImage; MovePreviousItem.Image = movePreviousImage; MoveNextItem.Image = moveNextImage; MoveLastItem.Image = moveLastImage; AddNewItem.Image = addNewImage; DeleteItem.Image = deleteImage; MoveFirstItem.RightToLeftAutoMirrorImage = true; MovePreviousItem.RightToLeftAutoMirrorImage = true; MoveNextItem.RightToLeftAutoMirrorImage = true; MoveLastItem.RightToLeftAutoMirrorImage = true; AddNewItem.RightToLeftAutoMirrorImage = true; DeleteItem.RightToLeftAutoMirrorImage = true; MoveFirstItem.DisplayStyle = ToolStripItemDisplayStyle.Image; MovePreviousItem.DisplayStyle = ToolStripItemDisplayStyle.Image; MoveNextItem.DisplayStyle = ToolStripItemDisplayStyle.Image; MoveLastItem.DisplayStyle = ToolStripItemDisplayStyle.Image; AddNewItem.DisplayStyle = ToolStripItemDisplayStyle.Image; DeleteItem.DisplayStyle = ToolStripItemDisplayStyle.Image; // // Set other random properties // PositionItem.AutoSize = false; PositionItem.Width = 50; // // Add items to strip // Items.AddRange(new ToolStripItem[] { MoveFirstItem, MovePreviousItem, separator1, PositionItem, CountItem, separator2, MoveNextItem, MoveLastItem, separator3, AddNewItem, DeleteItem, }); }
public virtual void CreateHandle(CreateParams cp) { lock (this) { CheckReleased(); WindowClass windowClass = WindowClass.Create(cp.ClassName, (User32.CS)cp.ClassStyle); lock (s_createWindowSyncObject) { // The CLR will sometimes pump messages while we're waiting on the lock. // If a message comes through (say a WM_ACTIVATE for the parent) which // causes the handle to be created, we can try to create the handle twice // for NativeWindow. Check the handle again to avoid this. if (Handle != IntPtr.Zero) { return; } windowClass._targetWindow = this; IntPtr createResult = IntPtr.Zero; int lastWin32Error = 0; // Parking window dpi awareness context need to match with dpi awareness context of control being // parented to this parking window. Otherwise, reparenting of control will fail. using (DpiHelper.EnterDpiAwarenessScope(DpiAwarenessContext)) { IntPtr modHandle = Kernel32.GetModuleHandleW(null); // Older versions of Windows AV rather than returning E_OUTOFMEMORY. // Catch this and then we re-throw an out of memory error. try { // CreateWindowEx throws if WindowText is greater than the max // length of a 16 bit int (32767). // If it exceeds the max, we should take the substring.... if (cp.Caption != null && cp.Caption.Length > short.MaxValue) { cp.Caption = cp.Caption.Substring(0, short.MaxValue); } createResult = User32.CreateWindowExW( (User32.WS_EX)cp.ExStyle, windowClass._windowClassName, cp.Caption, (User32.WS)cp.Style, cp.X, cp.Y, cp.Width, cp.Height, cp.Parent, IntPtr.Zero, modHandle, cp.Param); lastWin32Error = Marshal.GetLastWin32Error(); } catch (NullReferenceException e) { throw new OutOfMemoryException(SR.ErrorCreatingHandle, e); } } windowClass._targetWindow = null; Debug.WriteLineIf(CoreSwitches.PerfTrack.Enabled, "Handle created of type '" + cp.ClassName + "' with caption '" + cp.Caption + "' from NativeWindow of type '" + GetType().FullName + "'"); if (createResult == IntPtr.Zero) { throw new Win32Exception(lastWin32Error, SR.ErrorCreatingHandle); } _ownHandle = true; } } }
/// <summary> /// Initializes a new instance of the <see cref='System.Windows.Forms.ThreadExceptionDialog'/> class. /// </summary> public ThreadExceptionDialog(Exception t) { if (DpiHelper.IsScalingRequirementMet) { scaledMaxWidth = LogicalToDeviceUnits(MAXWIDTH); scaledMaxHeight = LogicalToDeviceUnits(MAXHEIGHT); scaledPaddingWidth = LogicalToDeviceUnits(PADDINGWIDTH); scaledPaddingHeight = LogicalToDeviceUnits(PADDINGHEIGHT); scaledMaxTextWidth = LogicalToDeviceUnits(MAXTEXTWIDTH); scaledMaxTextHeight = LogicalToDeviceUnits(MAXTEXTHEIGHT); scaledButtonTopPadding = LogicalToDeviceUnits(BUTTONTOPPADDING); scaledButtonDetailsLeftPadding = LogicalToDeviceUnits(BUTTONDETAILS_LEFTPADDING); scaledMessageTopPadding = LogicalToDeviceUnits(MESSAGE_TOPPADDING); scaledHeightPadding = LogicalToDeviceUnits(HEIGHTPADDING); scaledButtonWidth = LogicalToDeviceUnits(BUTTONWIDTH); scaledButtonHeight = LogicalToDeviceUnits(BUTTONHEIGHT); scaledButtonAlignmentWidth = LogicalToDeviceUnits(BUTTONALIGNMENTWIDTH); scaledButtonAlignmentPadding = LogicalToDeviceUnits(BUTTONALIGNMENTPADDING); scaledDetailsWidthPadding = LogicalToDeviceUnits(DETAILSWIDTHPADDING); scaledDetailsHeight = LogicalToDeviceUnits(DETAILSHEIGHT); scaledPictureWidth = LogicalToDeviceUnits(PICTUREWIDTH); scaledPictureHeight = LogicalToDeviceUnits(PICTUREHEIGHT); scaledExceptionMessageVerticalPadding = LogicalToDeviceUnits(EXCEPTIONMESSAGEVERTICALPADDING); } string messageFormat; string messageText; Button[] buttons; bool detailAnchor = false; WarningException w = t as WarningException; if (w != null) { messageFormat = SR.ExDlgWarningText; messageText = w.Message; if (w.HelpUrl == null) { buttons = new Button[] { continueButton }; } else { buttons = new Button[] { continueButton, helpButton }; } } else { messageText = t.Message; detailAnchor = true; if (Application.AllowQuit) { if (t is System.Security.SecurityException) { messageFormat = SR.ExDlgSecurityErrorText; } else { messageFormat = SR.ExDlgErrorText; } buttons = new Button[] { detailsButton, continueButton, quitButton }; } else { if (t is System.Security.SecurityException) { messageFormat = SR.ExDlgSecurityContinueErrorText; } else { messageFormat = SR.ExDlgContinueErrorText; } buttons = new Button[] { detailsButton, continueButton }; } } if (messageText.Length == 0) { messageText = t.GetType().Name; } if (t is System.Security.SecurityException) { messageText = string.Format(messageFormat, t.GetType().Name, Trim(messageText)); } else { messageText = string.Format(messageFormat, Trim(messageText)); } StringBuilder detailsTextBuilder = new StringBuilder(); string newline = "\r\n"; string separator = SR.ExDlgMsgSeperator; string sectionseparator = SR.ExDlgMsgSectionSeperator; if (Application.CustomThreadExceptionHandlerAttached) { detailsTextBuilder.Append(SR.ExDlgMsgHeaderNonSwitchable); } else { detailsTextBuilder.Append(SR.ExDlgMsgHeaderSwitchable); } detailsTextBuilder.Append(string.Format(CultureInfo.CurrentCulture, sectionseparator, SR.ExDlgMsgExceptionSection)); detailsTextBuilder.Append(t.ToString()); detailsTextBuilder.Append(newline); detailsTextBuilder.Append(newline); detailsTextBuilder.Append(string.Format(CultureInfo.CurrentCulture, sectionseparator, SR.ExDlgMsgLoadedAssembliesSection)); foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies()) { AssemblyName name = asm.GetName(); string fileVer = SR.NotAvailable; try { if (name.EscapedCodeBase != null && name.EscapedCodeBase.Length > 0) { Uri codeBase = new Uri(name.EscapedCodeBase); if (codeBase.Scheme == "file") { fileVer = FileVersionInfo.GetVersionInfo(NativeMethods.GetLocalPath(name.EscapedCodeBase)).FileVersion; } } } catch (System.IO.FileNotFoundException) { } detailsTextBuilder.Append(string.Format(SR.ExDlgMsgLoadedAssembliesEntry, name.Name, name.Version, fileVer, name.EscapedCodeBase)); detailsTextBuilder.Append(separator); } detailsTextBuilder.Append(string.Format(CultureInfo.CurrentCulture, sectionseparator, SR.ExDlgMsgJITDebuggingSection)); if (Application.CustomThreadExceptionHandlerAttached) { detailsTextBuilder.Append(SR.ExDlgMsgFooterNonSwitchable); } else { detailsTextBuilder.Append(SR.ExDlgMsgFooterSwitchable); } detailsTextBuilder.Append(newline); detailsTextBuilder.Append(newline); string detailsText = detailsTextBuilder.ToString(); Graphics g = message.CreateGraphicsInternal(); Size textSize = new Size(scaledMaxWidth - scaledPaddingWidth, int.MaxValue); if (DpiHelper.IsScalingRequirementMet && Label.UseCompatibleTextRenderingDefault == false) { // we need to measure string using API that matches the rendering engine - TextRenderer.MeasureText for GDI textSize = Size.Ceiling(TextRenderer.MeasureText(messageText, Font, textSize, TextFormatFlags.WordBreak)); } else { // if HighDpi improvements are not enabled, or rendering mode is GDI+, use Graphics.MeasureString textSize = Size.Ceiling(g.MeasureString(messageText, Font, textSize.Width)); } textSize.Height += scaledExceptionMessageVerticalPadding; g.Dispose(); if (textSize.Width < scaledMaxTextWidth) { textSize.Width = scaledMaxTextWidth; } if (textSize.Height > scaledMaxHeight) { textSize.Height = scaledMaxHeight; } int width = textSize.Width + scaledPaddingWidth; int buttonTop = Math.Max(textSize.Height, scaledMaxTextHeight) + scaledPaddingHeight; Form activeForm = Form.ActiveForm; if (activeForm == null || activeForm.Text.Length == 0) { Text = SR.ExDlgCaption; } else { Text = string.Format(SR.ExDlgCaption2, activeForm.Text); } AcceptButton = continueButton; CancelButton = continueButton; FormBorderStyle = FormBorderStyle.FixedDialog; MaximizeBox = false; MinimizeBox = false; StartPosition = FormStartPosition.CenterScreen; Icon = null; ClientSize = new Size(width, buttonTop + scaledButtonTopPadding); TopMost = true; pictureBox.Location = new Point(scaledPictureWidth / 8, scaledPictureHeight / 8); pictureBox.Size = new Size(scaledPictureWidth * 3 / 4, scaledPictureHeight * 3 / 4); pictureBox.SizeMode = PictureBoxSizeMode.StretchImage; if (t is System.Security.SecurityException) { pictureBox.Image = SystemIcons.Information.ToBitmap(); } else { pictureBox.Image = SystemIcons.Error.ToBitmap(); } Controls.Add(pictureBox); message.SetBounds(scaledPictureWidth, scaledMessageTopPadding + (scaledMaxTextHeight - Math.Min(textSize.Height, scaledMaxTextHeight)) / 2, textSize.Width, textSize.Height); message.Text = messageText; Controls.Add(message); continueButton.Text = SR.ExDlgContinue; continueButton.FlatStyle = FlatStyle.Standard; continueButton.DialogResult = DialogResult.Cancel; quitButton.Text = SR.ExDlgQuit; quitButton.FlatStyle = FlatStyle.Standard; quitButton.DialogResult = DialogResult.Abort; helpButton.Text = SR.ExDlgHelp; helpButton.FlatStyle = FlatStyle.Standard; helpButton.DialogResult = DialogResult.Yes; detailsButton.Text = SR.ExDlgShowDetails; detailsButton.FlatStyle = FlatStyle.Standard; detailsButton.Click += new EventHandler(DetailsClick); Button b = null; int startIndex = 0; if (detailAnchor) { b = detailsButton; expandImage = DpiHelper.GetBitmapFromIcon(GetType(), DownBitmapName); collapseImage = DpiHelper.GetBitmapFromIcon(GetType(), UpBitmapName); if (DpiHelper.IsScalingRequirementMet) { ScaleBitmapLogicalToDevice(ref expandImage); ScaleBitmapLogicalToDevice(ref collapseImage); } b.SetBounds(scaledButtonDetailsLeftPadding, buttonTop, scaledButtonWidth, scaledButtonHeight); b.Image = expandImage; b.ImageAlign = ContentAlignment.MiddleLeft; Controls.Add(b); startIndex = 1; } int buttonLeft = (width - scaledButtonDetailsLeftPadding - ((buttons.Length - startIndex) * scaledButtonAlignmentWidth - scaledButtonAlignmentPadding)); for (int i = startIndex; i < buttons.Length; i++) { b = buttons[i]; b.SetBounds(buttonLeft, buttonTop, scaledButtonWidth, scaledButtonHeight); Controls.Add(b); buttonLeft += scaledButtonAlignmentWidth; } details.Text = detailsText; details.ScrollBars = ScrollBars.Both; details.Multiline = true; details.ReadOnly = true; details.WordWrap = false; details.TabStop = false; details.AcceptsReturn = false; details.SetBounds(scaledButtonDetailsLeftPadding, buttonTop + scaledButtonTopPadding, width - scaledDetailsWidthPadding, scaledDetailsHeight); details.Visible = detailsVisible; Controls.Add(details); if (DpiHelper.IsScalingRequirementMet) { DpiChanged += ThreadExceptionDialog_DpiChanged; } }
/// <summary> /// Scale to current device dpi settings /// </summary> /// <param name="value"> initial value</param> /// <returns> scaled metric</returns> private int ScaleToCurrentDpi(int value) { return(DpiHelper.IsScalingRequirementMet ? DpiHelper.LogicalToDeviceUnits(value) : value); }
/// <include file='doc\ThreadExceptionDialog.uex' path='docs/doc[@for="ThreadExceptionDialog.ThreadExceptionDialog"]/*' /> /// <devdoc> /// <para> /// Initializes a new instance of the <see cref='System.Windows.Forms.ThreadExceptionDialog'/> class. /// /// </para> /// </devdoc> public ThreadExceptionDialog(Exception t) { if (DpiHelper.EnableThreadExceptionDialogHighDpiImprovements) { scaledMaxWidth = DpiHelper.LogicalToDeviceUnitsX(MAXWIDTH); scaledMaxHeight = DpiHelper.LogicalToDeviceUnitsY(MAXHEIGHT); scaledPaddingWidth = DpiHelper.LogicalToDeviceUnitsX(PADDINGWIDTH); scaledPaddingHeight = DpiHelper.LogicalToDeviceUnitsY(PADDINGHEIGHT); scaledMaxTextWidth = DpiHelper.LogicalToDeviceUnitsX(MAXTEXTWIDTH); scaledMaxTextHeight = DpiHelper.LogicalToDeviceUnitsY(MAXTEXTHEIGHT); scaledButtonTopPadding = DpiHelper.LogicalToDeviceUnitsY(BUTTONTOPPADDING); scaledButtonDetailsLeftPadding = DpiHelper.LogicalToDeviceUnitsX(BUTTONDETAILS_LEFTPADDING); scaledMessageTopPadding = DpiHelper.LogicalToDeviceUnitsY(MESSAGE_TOPPADDING); scaledHeightPadding = DpiHelper.LogicalToDeviceUnitsY(HEIGHTPADDING); scaledButtonWidth = DpiHelper.LogicalToDeviceUnitsX(BUTTONWIDTH); scaledButtonHeight = DpiHelper.LogicalToDeviceUnitsY(BUTTONHEIGHT); scaledButtonAlignmentWidth = DpiHelper.LogicalToDeviceUnitsX(BUTTONALIGNMENTWIDTH); scaledButtonAlignmentPadding = DpiHelper.LogicalToDeviceUnitsX(BUTTONALIGNMENTPADDING); scaledDetailsWidthPadding = DpiHelper.LogicalToDeviceUnitsX(DETAILSWIDTHPADDING); scaledDetailsHeight = DpiHelper.LogicalToDeviceUnitsY(DETAILSHEIGHT); scaledPictureWidth = DpiHelper.LogicalToDeviceUnitsX(PICTUREWIDTH); scaledPictureHeight = DpiHelper.LogicalToDeviceUnitsY(PICTUREHEIGHT); scaledExceptionMessageVerticalPadding = DpiHelper.LogicalToDeviceUnitsY(EXCEPTIONMESSAGEVERTICALPADDING); } string messageRes; string messageText; Button[] buttons; bool detailAnchor = false; WarningException w = t as WarningException; if (w != null) { messageRes = SR.ExDlgWarningText; messageText = w.Message; if (w.HelpUrl == null) { buttons = new Button[] { continueButton }; } else { buttons = new Button[] { continueButton, helpButton }; } } else { messageText = t.Message; detailAnchor = true; if (Application.AllowQuit) { if (t is SecurityException) { messageRes = "ExDlgSecurityErrorText"; } else { messageRes = "ExDlgErrorText"; } buttons = new Button[] { detailsButton, continueButton, quitButton }; } else { if (t is SecurityException) { messageRes = "ExDlgSecurityContinueErrorText"; } else { messageRes = "ExDlgContinueErrorText"; } buttons = new Button[] { detailsButton, continueButton }; } } if (messageText.Length == 0) { messageText = t.GetType().Name; } if (t is SecurityException) { messageText = SR.GetString(messageRes, t.GetType().Name, Trim(messageText)); } else { messageText = SR.GetString(messageRes, Trim(messageText)); } StringBuilder detailsTextBuilder = new StringBuilder(); string newline = "\r\n"; string separator = SR.GetString(SR.ExDlgMsgSeperator); string sectionseparator = SR.GetString(SR.ExDlgMsgSectionSeperator); if (Application.CustomThreadExceptionHandlerAttached) { detailsTextBuilder.Append(SR.GetString(SR.ExDlgMsgHeaderNonSwitchable)); } else { detailsTextBuilder.Append(SR.GetString(SR.ExDlgMsgHeaderSwitchable)); } detailsTextBuilder.Append(string.Format(CultureInfo.CurrentCulture, sectionseparator, SR.GetString(SR.ExDlgMsgExceptionSection))); detailsTextBuilder.Append(t.ToString()); detailsTextBuilder.Append(newline); detailsTextBuilder.Append(newline); detailsTextBuilder.Append(string.Format(CultureInfo.CurrentCulture, sectionseparator, SR.GetString(SR.ExDlgMsgLoadedAssembliesSection))); new FileIOPermission(PermissionState.Unrestricted).Assert(); try { foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies()) { AssemblyName name = asm.GetName(); string fileVer = SR.GetString(SR.NotAvailable); try { // bug 113573 -- if there's a path with an escaped value in it // like c:\temp\foo%2fbar, the AssemblyName call will unescape it to // c:\temp\foo\bar, which is wrong, and this will fail. It doesn't look like the // assembly name class handles this properly -- even the "CodeBase" property is un-escaped // so we can't circumvent this. // if (name.EscapedCodeBase != null && name.EscapedCodeBase.Length > 0) { Uri codeBase = new Uri(name.EscapedCodeBase); if (codeBase.Scheme == "file") { fileVer = FileVersionInfo.GetVersionInfo(NativeMethods.GetLocalPath(name.EscapedCodeBase)).FileVersion; } } } catch (System.IO.FileNotFoundException) { } detailsTextBuilder.Append(SR.GetString(SR.ExDlgMsgLoadedAssembliesEntry, name.Name, name.Version, fileVer, name.EscapedCodeBase)); detailsTextBuilder.Append(separator); } } finally { CodeAccessPermission.RevertAssert(); } detailsTextBuilder.Append(string.Format(CultureInfo.CurrentCulture, sectionseparator, SR.GetString(SR.ExDlgMsgJITDebuggingSection))); if (Application.CustomThreadExceptionHandlerAttached) { detailsTextBuilder.Append(SR.GetString(SR.ExDlgMsgFooterNonSwitchable)); } else { detailsTextBuilder.Append(SR.GetString(SR.ExDlgMsgFooterSwitchable)); } detailsTextBuilder.Append(newline); detailsTextBuilder.Append(newline); string detailsText = detailsTextBuilder.ToString(); Graphics g = message.CreateGraphicsInternal(); Size textSize = new Size(scaledMaxWidth - scaledPaddingWidth, int.MaxValue); if (DpiHelper.EnableThreadExceptionDialogHighDpiImprovements && (Label.UseCompatibleTextRenderingDefault == false)) { // we need to measure string using API that matches the rendering engine - TextRenderer.MeasureText for GDI textSize = Size.Ceiling(TextRenderer.MeasureText(messageText, Font, textSize, TextFormatFlags.WordBreak)); } else { // if HighDpi improvements are not enabled, or rendering mode is GDI+, use Graphics.MeasureString textSize = Size.Ceiling(g.MeasureString(messageText, Font, textSize.Width)); } textSize.Height += scaledExceptionMessageVerticalPadding; g.Dispose(); if (textSize.Width < scaledMaxTextWidth) { textSize.Width = scaledMaxTextWidth; } if (textSize.Height > scaledMaxHeight) { textSize.Height = scaledMaxHeight; } int width = textSize.Width + scaledPaddingWidth; int buttonTop = Math.Max(textSize.Height, scaledMaxTextHeight) + scaledPaddingHeight; // SECREVIEW : We must get a hold of the parent to get at it's text // : to make this dialog look like the parent. // IntSecurity.GetParent.Assert(); try { Form activeForm = Form.ActiveForm; if (activeForm == null || activeForm.Text.Length == 0) { Text = SR.GetString(SR.ExDlgCaption); } else { Text = SR.GetString(SR.ExDlgCaption2, activeForm.Text); } } finally { CodeAccessPermission.RevertAssert(); } AcceptButton = continueButton; CancelButton = continueButton; FormBorderStyle = FormBorderStyle.FixedDialog; MaximizeBox = false; MinimizeBox = false; StartPosition = FormStartPosition.CenterScreen; Icon = null; ClientSize = new Size(width, buttonTop + scaledButtonTopPadding); TopMost = true; pictureBox.Location = new Point(0, 0); pictureBox.Size = new Size(scaledPictureWidth, scaledPictureHeight); pictureBox.SizeMode = PictureBoxSizeMode.CenterImage; if (t is SecurityException) { pictureBox.Image = SystemIcons.Information.ToBitmap(); } else { pictureBox.Image = SystemIcons.Error.ToBitmap(); } Controls.Add(pictureBox); message.SetBounds(scaledPictureWidth, scaledMessageTopPadding + (scaledMaxTextHeight - Math.Min(textSize.Height, scaledMaxTextHeight)) / 2, textSize.Width, textSize.Height); message.Text = messageText; Controls.Add(message); continueButton.Text = SR.GetString(SR.ExDlgContinue); continueButton.FlatStyle = FlatStyle.Standard; continueButton.DialogResult = DialogResult.Cancel; quitButton.Text = SR.GetString(SR.ExDlgQuit); quitButton.FlatStyle = FlatStyle.Standard; quitButton.DialogResult = DialogResult.Abort; helpButton.Text = SR.GetString(SR.ExDlgHelp); helpButton.FlatStyle = FlatStyle.Standard; helpButton.DialogResult = DialogResult.Yes; detailsButton.Text = SR.GetString(SR.ExDlgShowDetails); detailsButton.FlatStyle = FlatStyle.Standard; detailsButton.Click += new EventHandler(DetailsClick); Button b = null; int startIndex = 0; if (detailAnchor) { b = detailsButton; expandImage = new Bitmap(this.GetType(), "down.bmp"); expandImage.MakeTransparent(); collapseImage = new Bitmap(this.GetType(), "up.bmp"); collapseImage.MakeTransparent(); if (DpiHelper.EnableThreadExceptionDialogHighDpiImprovements) { DpiHelper.ScaleBitmapLogicalToDevice(ref expandImage); DpiHelper.ScaleBitmapLogicalToDevice(ref collapseImage); } b.SetBounds(scaledButtonDetailsLeftPadding, buttonTop, scaledButtonWidth, scaledButtonHeight); b.Image = expandImage; b.ImageAlign = ContentAlignment.MiddleLeft; Controls.Add(b); startIndex = 1; } int buttonLeft = (width - scaledButtonDetailsLeftPadding - ((buttons.Length - startIndex) * scaledButtonAlignmentWidth - scaledButtonAlignmentPadding)); for (int i = startIndex; i < buttons.Length; i++) { b = buttons[i]; b.SetBounds(buttonLeft, buttonTop, scaledButtonWidth, scaledButtonHeight); Controls.Add(b); buttonLeft += scaledButtonAlignmentWidth; } details.Text = detailsText; details.ScrollBars = ScrollBars.Both; details.Multiline = true; details.ReadOnly = true; details.WordWrap = false; details.TabStop = false; details.AcceptsReturn = false; details.SetBounds(scaledButtonDetailsLeftPadding, buttonTop + scaledButtonTopPadding, width - scaledDetailsWidthPadding, scaledDetailsHeight); Controls.Add(details); }