C#:为什么没有ShowDialog()。ToString()返回预期的String?

时间:2010-12-17 22:03:55

标签: c# override tostring showdialog

labelTotal保存类Keypad(C#WinForms)的值。 已重写ToString以返回labelTotal.Text。

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();
        }
        ...

为什么不键盘.ShowDialog()。ToString()返回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();
            ...

4 个答案:

答案 0 :(得分: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();
    }
}

答案 1 :(得分:3)

因为您没有调用KeyPad.ToString(),所以您调用了DialogResult.ToString()。 ShowDialog()返回一个DialogResult。

答案 2 :(得分:2)

您正在调用的方法ShowDialog()实际上显示了对话框

我认为你想要做的是

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

答案 3 :(得分:2)

ShowDialog返回一个DialogResult,而不是对表单的引用。

尝试更改为

String total;

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