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

jac*_*nad 2 c# overriding 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();
        }
        ...
Run Code Online (Sandbox Code Playgroud)

为什么不键盘.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();
            ...
Run Code Online (Sandbox Code Playgroud)

Don*_*nut 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();
    }
}
Run Code Online (Sandbox Code Playgroud)