2012-09-16 29 views
9
private void button2_Click(object sender, EventArgs e) 
     { 
      ChangeLink cl = new ChangeLink(); 
      // Show testDialog as a modal dialog and determine if DialogResult = OK. 
      if (cl.ShowDialog() == DialogResult.OK) 
      { 
       // Read the contents of testDialog's TextBox. 
       // cl.AcceptButton.DialogResult = DialogResult.OK; 
       this.label4.Text = cl.textBox1Text; 
      } 
      else 
      { 
       this.label4.Text = "Cancelled"; 
      } 
      cl.Dispose(); 

     } 

Cuando hago clic en el botón, veo el nuevo Formulario y el textBox1 en el nuevo Formulario y puedo escribir en el textBox1 algo pero no veo en ningún lado un botón OK o CANCELAR. ¿Debo agregarlos manualmente en el nuevo Diseñador de formularios? ¿Y cómo usarlos entonces?¿Cómo uso Form.ShowDialog?

Este es el código en mi nuevo formulario. Lo que quería hacer era escribir algo en el nuevo Form textBox1 y pasar el texto en el textBox1 a Form1 label4.

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace GatherLinks 
{ 
    public partial class ChangeLink : Form 
    { 
     public ChangeLink() 
     { 
      InitializeComponent(); 


     } 

     public string textBox1Text 
     { 
      get 
      { 
       return textBox1Text = textBox1.Text; 
      } 
      set 
      { 

      } 
     } 
    } 
} 

Entonces, ¿dónde están los botones OK y CANCELAR del Form.ShowDialog?

Respuesta

20

Tendrá que agregarlos usted mismo, puede agregar los botones a su Form y establecer su propiedad DialogResult. Esto devolverá DialogResult y cerrará el formulario sin tener que cablear ningún código. Aquí hay un ejemplo que utiliza un método para devolver el valor de The TextBox en Form2 (hay dos botones en Form2 con sus DialogResults configurados en Cancelar y Ok respetuosamente).

Form1

public partial class Form1 : Form 
{ 
    Form2 frm2; 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     frm2 = new Form2(); 
     DialogResult dr = frm2.ShowDialog(this); 
     if (dr == DialogResult.Cancel) 
     { 
      frm2.Close(); 
     } 
     else if (dr == DialogResult.OK) 
     { 
      textBox1.Text = frm2.getText(); 
      frm2.Close(); 
     } 
    } 
} 

Form2

public partial class Form2 : Form 
{ 
    public Form2() 
    { 
     InitializeComponent(); 
    } 

    public string getText() 
    { 
     return textBox1.Text; 
    } 
} 
0

si crea un formulario de la clase de formulario básico, necesita definir un botón que devuelve el DialogResult en las propiedades del botón.

Son los más útiles en el FileDialog, MessageBox etc., donde la clase es un formulario definido por MS.

0

Dado que su única etiqueta es C# y espera un botón Aceptar y CANCELAR, me parece que realmente está buscando la función MessageBox. Crear y deshacerse de un formulario solo con el fin de mostrar un cuadro de diálogo de diálogo de diálogo no es necesario.

if (MessageBox.Show("boxtext", "boxcaption" MessageBoxButtons.OKCancel) == DialogResult.OK) 
{ 
// Read the contents of testDialog's TextBox. 
// cl.AcceptButton.DialogResult = DialogResult.OK; 
this.label4.Text = cl.textBox1Text; 
}else 
{ 
    this.label4.Text = "Cancelled"; 
} 

MessageBox es un contenedor para el mismo nombre de Win32 API Función:

int WINAPI MessageBox(
    _In_opt_ HWND hWnd, 
    _In_opt_ LPCTSTR lpText, 
    _In_opt_ LPCTSTR lpCaption, 
    _In_  UINT uType 
); 

Nota: Si ya tiene una ventana de mango/Formulario asegúrese de que pasarla como el primer parámetro a MessageBox .