2010-12-17 116 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

相关问题