2010-12-17 74 views
2

labelTotal保存類Keypad(C#WinForms)的值。 ToString已被覆蓋以返回labelTotal.Text。C#:爲什麼不ShowDialog()。ToString()返回期望的字符串?

namespace Gui3 
{ 
    public partial class Keypad : Form 
    { 
     public Keypad() 
     { 
      InitializeComponent(); 
     } 
     public override String ToString() {return labelTotal.Text;} 
     private void buttonOk_Click(object sender, EventArgs e) 
     { 
      this.Close(); 
     } 
     ... 

爲什麼沒有keypad.ShowDialog()。ToString()return labelTotal.Text?

namespace Gui3 
{ 
    public partial class Setup : Form 
    { 
     public Setup() 
     { 
      InitializeComponent(); 
     } 
     private void buttonStartDepth_Click(object sender, EventArgs e) 
     { 
      Keypad keypad = new Keypad(); 
      ////////// Not working as expected ///////// 
      String total = keypad.ShowDialog().ToString(); 
      ... 

回答

7

因爲ShowDialog()方法返回一個System.Windows.Forms.DialogResult枚舉值,而不是表單的實例。將在該函數返回的枚舉值上調用ToString()

您可以嘗試類似如下(假設keypad將正確返回DialogResult.OK):

private void buttonStartDepth_Click(object sender, EventArgs e) 
{ 
    Keypad keypad = new Keypad(); 

    if (keypad.ShowDialog() == DialogResult.OK) 
    { 
     String total = keypad.ToString(); 
    } 
} 
3

由於您未調用KeyPad.ToString(),因此您正在調用DialogResult.ToString()。 ShowDialog()返回一個DialogResult。

2

您呼叫ShowDialog()實際上顯示的對話框

我認爲,你想要做的是什麼方法

keypad.ShowDialog(); 
String total = keypad.ToString(); 
2

ShowDialog返回一個DialogResult,而不是對窗體的引用。

嘗試改用

String total; 

if (keypad.ShowDialog() == DialogResult.OK) 
{ 
    total = keypad.ToString(); 
} 
+0

你爲什麼要叫'的ShowDialog()'兩次? – Donut 2010-12-17 22:13:33

+0

因爲我是個白癡!更正,謝謝 – Martin 2010-12-17 22:17:30

相關問題