| File: System\Windows\Forms\Design\FormatStringDialog.cs | Web Access |
| Project: src\winforms\src\System.Windows.Forms.Design\src\System.Windows.Forms.Design.csproj (System.Windows.Forms.Design) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.ComponentModel; using System.ComponentModel.Design; namespace System.Windows.Forms.Design; internal class FormatStringDialog : Form { // we need the context for the HELP service provider private readonly ITypeDescriptorContext? _context; private Button _cancelButton; private Button _okButton; private FormatControl _formatControl1; private bool _dirty; private DataGridViewCellStyle? _dgvCellStyle; private ListControl? _listControl; public FormatStringDialog(ITypeDescriptorContext? context) { _context = context; InitializeComponent(); // Set right to left property according to SR.RTL value. string rtlString = SR.RTL; if (rtlString.Equals("RTL_False")) { RightToLeft = RightToLeft.No; RightToLeftLayout = false; } else { RightToLeft = RightToLeft.Yes; RightToLeftLayout = true; } } public DataGridViewCellStyle DataGridViewCellStyle { set { _dgvCellStyle = value; _listControl = null; } } public bool Dirty { get { return _dirty || _formatControl1.Dirty; } } public ListControl ListControl { set { _listControl = value; _dgvCellStyle = null; } } private void FormatStringDialog_HelpButtonClicked(object? sender, CancelEventArgs e) { FormatStringDialog_HelpRequestHandled(); e.Cancel = true; } private void FormatStringDialog_HelpRequested(object? sender, HelpEventArgs e) { FormatStringDialog_HelpRequestHandled(); e.Handled = true; } private void FormatStringDialog_HelpRequestHandled() { if (_context.TryGetService(out IHelpService? helpService)) { helpService.ShowHelpFromKeyword("vs.FormatStringDialog"); } } // HACK: if we're adjusting positions after the form's loaded, we didn't set the form up correctly. internal void FormatControlFinishedLoading() { _okButton.Top = _formatControl1.Bottom + 5; _cancelButton.Top = _formatControl1.Bottom + 5; int formatControlRightSideOffset = GetRightSideOffset(_formatControl1); int cancelButtonRightSideOffset = GetRightSideOffset(_cancelButton); _okButton.Left += formatControlRightSideOffset - cancelButtonRightSideOffset; _cancelButton.Left += formatControlRightSideOffset - cancelButtonRightSideOffset; } private static int GetRightSideOffset(Control ctl) { int result = ctl.Width; Control? control = ctl; while (control is not null) { result += control.Left; control = control.Parent; } return result; } private void FormatStringDialog_Load(object? sender, EventArgs e) { // make a reasonable guess what user control should be shown string formatString = _dgvCellStyle is not null ? _dgvCellStyle.Format : _listControl!.FormatString; object? nullValue = _dgvCellStyle?.NullValue; string formatType = string.Empty; if (!string.IsNullOrEmpty(formatString)) { formatType = FormatControl.FormatTypeStringFromFormatString(formatString); } // the null value text box should be enabled only when editing DataGridViewCellStyle // when we are editing ListControl, it should be disabled if (_dgvCellStyle is not null) { _formatControl1.NullValueTextBoxEnabled = true; } else { Debug.Assert(_listControl is not null, "we check this everywhere, but it does not hurt to check it again"); _formatControl1.NullValueTextBoxEnabled = false; } _formatControl1.FormatType = formatType; // push the information from FormatString/FormatInfo/NullValue into the FormattingUserControl FormatControl.FormatTypeClass? formatTypeItem = _formatControl1.FormatTypeItem; if (formatTypeItem is not null) { // parsing the FormatString uses the CultureInfo. So push the CultureInfo before push the FormatString. formatTypeItem.PushFormatStringIntoFormatType(formatString); } else { // make General format type the default _formatControl1.FormatType = SR.BindingFormattingDialogFormatTypeNoFormatting; } _formatControl1.NullValue = nullValue is not null ? nullValue.ToString() : ""; } public static void End() { // clear the tree nodes collection } /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> [MemberNotNull(nameof(_cancelButton))] [MemberNotNull(nameof(_okButton))] [MemberNotNull(nameof(_formatControl1))] private void InitializeComponent() { _cancelButton = new Button(); _okButton = new Button(); _formatControl1 = new FormatControl(); SuspendLayout(); // // formatControl1 // _formatControl1.Location = new Drawing.Point(10, 10); _formatControl1.Margin = new Padding(0); _formatControl1.Name = "formatControl1"; _formatControl1.Size = new Drawing.Size(376, 268); _formatControl1.TabIndex = 0; // // cancelButton // _cancelButton.Location = new Drawing.Point(299, 288); _cancelButton.Name = "cancelButton"; _cancelButton.Size = new Drawing.Size(87, 23); _cancelButton.TabIndex = 2; _cancelButton.Text = SR.DataGridView_Cancel; _cancelButton.DialogResult = DialogResult.Cancel; _cancelButton.Click += cancelButton_Click; // // okButton // _okButton.Location = new Drawing.Point(203, 288); _okButton.Name = "okButton"; _okButton.Size = new Drawing.Size(87, 23); _okButton.TabIndex = 1; _okButton.Text = SR.DataGridView_OK; _okButton.DialogResult = DialogResult.OK; _okButton.Click += okButton_Click; // // Form1 // AutoScaleMode = AutoScaleMode.Font; AutoScaleDimensions = new Drawing.SizeF(6, 13); ClientSize = new Drawing.Size(396, 295); AutoSize = true; HelpButton = true; MaximizeBox = false; MinimizeBox = false; FormBorderStyle = FormBorderStyle.FixedDialog; StartPosition = FormStartPosition.CenterScreen; ShowInTaskbar = false; Icon = null; Name = "Form1"; Controls.Add(_okButton); Controls.Add(_formatControl1); Controls.Add(_cancelButton); Padding = new Padding(0); Text = SR.FormatStringDialogTitle; HelpButtonClicked += FormatStringDialog_HelpButtonClicked; HelpRequested += FormatStringDialog_HelpRequested; Load += FormatStringDialog_Load; ResumeLayout(false); } private void cancelButton_Click(object? sender, EventArgs e) { _dirty = false; } private void okButton_Click(object? sender, EventArgs e) { PushChanges(); } protected override bool ProcessDialogKey(Keys keyData) { if ((keyData & Keys.Modifiers) != 0) { return base.ProcessDialogKey(keyData); } switch (keyData & Keys.KeyCode) { case Keys.Enter: DialogResult = DialogResult.OK; PushChanges(); Close(); return true; case Keys.Escape: _dirty = false; DialogResult = DialogResult.Cancel; Close(); return true; default: return base.ProcessDialogKey(keyData); } } private void PushChanges() { FormatControl.FormatTypeClass? formatTypeItem = _formatControl1.FormatTypeItem; if (formatTypeItem is null) { return; } if (_dgvCellStyle is not null) { _dgvCellStyle.Format = formatTypeItem.FormatString; _dgvCellStyle.NullValue = _formatControl1.NullValue; } else { _listControl!.FormatString = formatTypeItem.FormatString; } _dirty = true; } }