¿Cómo creo un botón personalizado en un cuadro de mensaje en la aplicación de formulario .net?

Estoy intentando implementar un cuadro de mensaje personalizado (Ok, Cancelar) usando .NET Compact Framework 3.5 en la aplicación de formulario. ¿Cómo lo implemento?

Si está buscando un buzón de mensajes con los botones Aceptar y Cancelar, puede usar

  MessageBox.Show(this, "Message", "caption", MessageBoxButtons.OKCancel); 

Si desea una apariencia personalizada y cualquier botón que normalmente no ve en los buzones de mensajes, entonces tiene que crear su propio formulario para mostrar

Opciones de MessageBoxButton

Tendrá que implementar su propio formulario personalizado y acceder a él con

 myForm.ShowDialog(); 

Aquí hay una guía para DialogBoxes y puede seguir esta guía para crear su propio cuadro de diálogo.

Pero si solo está utilizando los botones Aceptar / Cancelar, ¿qué pasa con MessageBox?

Un compañero de trabajo y yo creamos la siguiente clase para actuar como una especie de cuadro de mensaje dynamic.

Aquí está el código del diseñador:

 ///  /// Required designer variable. ///  private System.ComponentModel.IContainer components = null; ///  /// Clean up any resources being used. ///  /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code ///  /// Required method for Designer support - do not modify /// the contents of this method with the code editor. ///  private void InitializeComponent() { this.lblMessage = new System.Windows.Forms.Label(); this.btnRight = new System.Windows.Forms.Button(); this.btnLeft = new System.Windows.Forms.Button(); this.SuspendLayout(); // // lblMessage // this.lblMessage.AutoSize = true; this.lblMessage.Location = new System.Drawing.Point(12, 39); this.lblMessage.Name = "lblMessage"; this.lblMessage.Size = new System.Drawing.Size(35, 13); this.lblMessage.TabIndex = 0; this.lblMessage.Text = "label1"; // // btnRight // this.btnRight.Anchor = System.Windows.Forms.AnchorStyles.Bottom; this.btnRight.Location = new System.Drawing.Point(89, 73); this.btnRight.Name = "btnRight"; this.btnRight.Size = new System.Drawing.Size(75, 23); this.btnRight.TabIndex = 1; this.btnRight.UseVisualStyleBackColor = true; // // btnLeft // this.btnLeft.Anchor = System.Windows.Forms.AnchorStyles.Bottom; this.btnLeft.Location = new System.Drawing.Point(8, 73); this.btnLeft.Name = "btnLeft"; this.btnLeft.Size = new System.Drawing.Size(75, 23); this.btnLeft.TabIndex = 0; this.btnLeft.UseVisualStyleBackColor = true; // // CustomMessageBox // this.AcceptButton = this.btnLeft; this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoSize = true; this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; this.ClientSize = new System.Drawing.Size(170, 114); this.ControlBox = false; this.Controls.Add(this.btnLeft); this.Controls.Add(this.btnRight); this.Controls.Add(this.lblMessage); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.KeyPreview = true; this.MinimumSize = new System.Drawing.Size(176, 120); this.Name = "CustomMessageBox"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "CustomMessageBox"; this.Load += new System.EventHandler(this.frmCustomMessageBoxLoad); this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.Label lblMessage; private System.Windows.Forms.Button btnRight; private System.Windows.Forms.Button btnLeft; 

Y aquí está el código detrás del formulario:

 internal partial class CustomMessageBox : Form { #region Fields public readonly MessageBoxButtons _buttons; #endregion //need to seal properties to override from derived class #region Constructors ///  /// This constructor is required for designer support. ///  public CustomMessageBox() { InitializeComponent(); } public CustomMessageBox(string message, string title, MessageBoxButtons buttons) { InitializeComponent(); Text = title; lblMessage.Text = message; _buttons = buttons; } #endregion #region Properties public override sealed string Text { get { return base.Text; } set { base.Text = value; } } #endregion #region private private void frmCustomMessageBoxLoad(object sender, EventArgs e) { lblMessage.Left = (ClientSize.Width - lblMessage.Width) / 2; switch(_buttons) { case MessageBoxButtons.OKCancel: { btnLeft.Text = @"OK"; btnLeft.DialogResult = DialogResult.OK; btnRight.Text = @"Cancel"; btnRight.DialogResult = DialogResult.Cancel; AcceptButton = btnLeft; break; } case MessageBoxButtons.OK: { btnLeft.Text = @"OK"; btnLeft.DialogResult = DialogResult.OK; btnRight.Hide(); btnLeft.Left = (ClientSize.Width - btnLeft.Width) / 2; AcceptButton = btnLeft; break; } case MessageBoxButtons.YesNo: { btnLeft.Text = @"Yes"; btnLeft.DialogResult = DialogResult.Yes; btnRight.Text = @"No"; btnRight.DialogResult = DialogResult.No; AcceptButton = btnLeft; break; } default : { btnLeft.Hide(); btnRight.Hide(); break; } } AcceptButton = btnLeft; } #endregion }