2012-09-16 28 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(); 

     } 

Po kliknięciu przycisku widzę nowy Formularz i tekstBox1 w nowym formularzu i mogę wpisać textBox1 coś, ale nie widzę nigdzie przycisku OK lub ANULUJ. Czy powinienem dodać je manualnie w nowym projektorze formularzy? I jak z nich korzystać?Jak korzystać z Form.ShowDialog?

To jest kod w moim nowym formularzu, co chciałem zrobić, to wpisać coś w nowym formularzu TextBox1 i przekazać tekst w textBox1 do 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 
      { 

      } 
     } 
    } 
} 

Więc gdzie są przyciski OK i CANCEL formularza.ShowDialog?

Odpowiedz

20

Będziesz musiał dodać je sam, możesz dodać przyciski do swojego Form i ustawić ich właściwość DialogResult. Spowoduje to powrót DialogResult i zamknięcie formularza bez konieczności podłączania jakiegokolwiek kodu. Oto przykład użycia metody zwrócenia wartości pola tekstowego na formularzu 2 (są dwa przyciski na formularzu 2, a ich okna dialogowe są ustawione na wartość Anuluj i Ok).

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

jeśli utworzysz formularz z podstawowej klasy formularza, musisz zdefiniować przycisk, który zwraca wartość DialogResult we właściwościach przycisku.

Są one najbardziej przydatne w FileDialog, MessageBox itd .. gdzie klasa jest formą zdefiniowaną przez MS.

0

Biorąc pod uwagę, że jedynym znacznikiem jest C#, a oczekujesz przycisku OK i CANCEL, wydaje mi się, że faktycznie szukasz funkcji MessageBox. Tworzenie i usuwanie formularza tylko w celu wyświetlenia okna dialogowego skrzynki wiadomości jest niepotrzebne.

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 jest opakowaniem dla tej samej nazwie Win32 API Function:

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

UWAGA: Jeżeli masz już okno rękojeść/Forma upewnij się, aby przekazać go jako pierwszy parametr do MessageBox .