pantalla net mostrar mensajes mensaje imprimir emergentes dialogo cuadros consola confirmacion asp c# .net winforms messagebox

c# - net - mostrar mensaje en java web



¿Cómo puedo mostrar un cuadro de mensaje con detalles en WinForms? (6)

Justo ahora, me di cuenta de que Visual Studio muestra un cuadro de mensaje con detalles cuando una propiedad se establece en un valor no válido. Por ejemplo:

¿Es posible hacer este tipo de cuadro de mensaje en WinForms?

He intentado el siguiente código:

MessageBox.Show("Error in Division Fill./n" + ex.Message, "Information", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxOptions.RightAlign);

Pero esto produjo el siguiente error:

Error 24 La mejor coincidencia del método sobrecargado para ''System.Windows.Forms.MessageBox.Show (cadena, cadena, System.Windows.Forms.MessageBoxButtons, System.Windows.Forms.MessageBoxIcon, System.Windows.Forms.MessageBoxDefaultButton)'' tiene disponible argumentos inválidos

G: / Jagadeeswaran / Nov 17 / MCS-SPS School / MCS-SPS School / Certificate / Transfer.cs 164 21 MCS-SPS School

¿Cómo puedo corregir este error y obtener un cuadro de mensaje que muestra detalles adicionales?


Basándome en la respuesta de @ AVD anterior (que voté a favor) escribí lo siguiente. Pegue esto en un formulario que generó usando una plantilla VS y debería funcionar, tal vez con algunos ajustes.

Mi código:

using System; using System.Windows.Forms; namespace MessageBoxWithDetails { /// <summary> /// A dialog-style form with optional colapsable details section /// </summary> public partial class MessageBoxWithDetails : Form { private const string DetailsFormat = "Details {0}"; public MessageBoxWithDetails(string message, string title, string details = null) { InitializeComponent(); lblMessage.Text = message; this.Text = title; if (details != null) { btnDetails.Enabled = true; btnDetails.Text = DownArrow; tbDetails.Text = details; } } private string UpArrow { get { return string.Format(DetailsFormat, char.ConvertFromUtf32(0x25B4)); } } private string DownArrow { get { return string.Format(DetailsFormat, char.ConvertFromUtf32(0x25BE)); } } /// <summary> /// Meant to give the look and feel of a regular MessageBox /// </summary> public static void Show(string message, string title, string details = null) { new MessageBoxWithDetails(message, title, details).ShowDialog(); } protected override void OnLoad(EventArgs e) { base.OnLoad(e); // Change these properties now so the label is rendered so we get its real height var height = lblMessage.Height; SetMessageBoxHeight(height); } private void SetMessageBoxHeight(int heightChange) { this.Height = this.Height + heightChange; if (this.Height < 150) { this.Height = 150; } } private void btnClose_Click(object sender, EventArgs e) { this.Close(); } private void btnDetails_Click(object sender, EventArgs e) { // Re-anchoring the controls so they stay in their place while the form is resized btnCopy.Anchor = AnchorStyles.Top; btnClose.Anchor = AnchorStyles.Top; btnDetails.Anchor = AnchorStyles.Top; tbDetails.Anchor = AnchorStyles.Top; tbDetails.Visible = !tbDetails.Visible; btnCopy.Visible = !btnCopy.Visible; btnDetails.Text = tbDetails.Visible ? UpArrow : DownArrow; SetMessageBoxHeight(tbDetails.Visible ? tbDetails.Height + 10 : -tbDetails.Height - 10); } private void btnCopy_Click(object sender, EventArgs e) { Clipboard.SetText(tbDetails.Text); } }

Código generado automáticamente por el diseñador (debería darle una idea sobre qué poner en el formulario si no quiere pegarlo):

namespace MessageBoxWithDetails { partial class MessageBoxWithDetails { /// <summary> /// Required designer variable. /// </summary> private System.ComponentModel.IContainer components = null; /// <summary> /// Clean up any resources being used. /// </summary> /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { this.btnClose = new System.Windows.Forms.Button(); this.btnDetails = new System.Windows.Forms.Button(); this.btnCopy = new System.Windows.Forms.Button(); this.lblMessage = new System.Windows.Forms.Label(); this.tbDetails = new System.Windows.Forms.TextBox(); this.SuspendLayout(); // // btnClose // this.btnClose.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.btnClose.Location = new System.Drawing.Point(267, 37); this.btnClose.Name = "btnClose"; this.btnClose.Size = new System.Drawing.Size(75, 23); this.btnClose.TabIndex = 0; this.btnClose.Text = "Close"; this.btnClose.UseVisualStyleBackColor = true; this.btnClose.Click += new System.EventHandler(this.btnClose_Click); // // btnDetails // this.btnDetails.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.btnDetails.Enabled = false; this.btnDetails.Location = new System.Drawing.Point(12, 37); this.btnDetails.Name = "btnDetails"; this.btnDetails.Size = new System.Drawing.Size(75, 23); this.btnDetails.TabIndex = 1; this.btnDetails.Text = "Details"; this.btnDetails.UseVisualStyleBackColor = true; this.btnDetails.Click += new System.EventHandler(this.btnDetails_Click); // // btnCopy // this.btnCopy.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.btnCopy.Location = new System.Drawing.Point(93, 37); this.btnCopy.Name = "btnCopy"; this.btnCopy.Size = new System.Drawing.Size(102, 23); this.btnCopy.TabIndex = 4; this.btnCopy.Text = "Copy To Clipboard"; this.btnCopy.UseVisualStyleBackColor = true; this.btnCopy.Visible = false; this.btnCopy.Click += new System.EventHandler(this.btnCopy_Click); // // lblMessage // this.lblMessage.AutoSize = true; this.lblMessage.Location = new System.Drawing.Point(12, 9); this.lblMessage.MaximumSize = new System.Drawing.Size(310, 0); this.lblMessage.Name = "lblMessage"; this.lblMessage.Size = new System.Drawing.Size(35, 13); this.lblMessage.TabIndex = 5; this.lblMessage.Text = "label1"; // // tbDetails // this.tbDetails.Anchor = System.Windows.Forms.AnchorStyles.Bottom; this.tbDetails.Location = new System.Drawing.Point(12, 68); this.tbDetails.MaximumSize = new System.Drawing.Size(328, 100); this.tbDetails.Multiline = true; this.tbDetails.Name = "tbDetails"; this.tbDetails.ReadOnly = true; this.tbDetails.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; this.tbDetails.Size = new System.Drawing.Size(328, 100); this.tbDetails.TabIndex = 6; this.tbDetails.Visible = false; // // MessageBoxWithDetails // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(354, 72); this.Controls.Add(this.tbDetails); this.Controls.Add(this.lblMessage); this.Controls.Add(this.btnCopy); this.Controls.Add(this.btnDetails); this.Controls.Add(this.btnClose); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "MessageBoxWithDetails"; this.ShowIcon = false; this.ShowInTaskbar = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.Button btnClose; private System.Windows.Forms.Button btnDetails; private System.Windows.Forms.Button btnCopy; private System.Windows.Forms.Label lblMessage; private System.Windows.Forms.TextBox tbDetails; } }


Como otros lo han señalado, debe escribir un diálogo personalizado con las funciones deseadas. Para obtener ayuda sobre esto, puede consultar la implementación real utilizada por PropertyGrid para este cuadro de diálogo (quizás con un descompilador), que es, a partir de .NET 4.0, el tipo System.Windows.Forms.PropertyGridInternal.GridErrorDlg , interno al Montaje de System.Windows.Forms .

Realmente no lo recomendaría (se podría romper en una versión futura), pero si te sientes realmente perezoso, puedes usar este tipo interno directamente mediante la reflexión.

// Get reference to the dialog type. var dialogTypeName = "System.Windows.Forms.PropertyGridInternal.GridErrorDlg"; var dialogType = typeof(Form).Assembly.GetType(dialogTypeName); // Create dialog instance. var dialog = (Form)Activator.CreateInstance(dialogType, new PropertyGrid()); // Populate relevant properties on the dialog instance. dialog.Text = "Sample Title"; dialogType.GetProperty("Details").SetValue(dialog, "Sample Details", null); dialogType.GetProperty("Message").SetValue(dialog, "Sample Message", null); // Display dialog. var result = dialog.ShowDialog();

Resultado :


Debe configurar las siguientes propiedades de Form para crear una ventana de diálogo / mensaje personalizada.

  1. AceptarBotón
  2. CancelarBotón
  3. FormBorderStyle = FixedDialog
  4. MaximizeBox = False
  5. MinimizeBox = False
  6. ShowIcon = Falso
  7. ShowInTaskBar = Falso
  8. StartPosition = CenterParent

Ahora, use el método ShowDialog() para mostrar un diálogo personalizado.

MyDialog dialog=new MyDialog(); DialogResult result=dialog.ShowDialog(); if(result == DialogResult.OK) { // }

Para obtener más información sobre el artículo de MSDN de lectura de cuadros de diálogo - Cuadros de diálogo (Visual C #)


Simplemente puede hacer esto:

catch (Exception error) { throw new Exception("Error with details button! /n"+error); }

El texto en "" es "Adicionar Fotografia".

Nota: este código funciona bien cuando se ejecuta la aplicación (.exe) mientras se ejecuta en el editor, no funciona y tiene sentido.

Este es un ejemplo del código anterior:



solo escribe tu propio diálogo, no hay sobrecarga como quieres mostrar el método.