C #: Почему ShowDialog (). ToString () не возвращает ожидаемую строку? - PullRequest
2 голосов
/ 18 декабря 2010

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

Почему не keypad.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 ]

7 голосов
/ 18 декабря 2010

Поскольку метод ShowDialog() возвращает значение перечисления System.Windows.Forms.DialogResult, а не экземпляр вашей формы.ToString() будет вызываться для значения enum, возвращаемого этой функцией.

Вы можете попробовать что-то вроде следующего (предполагается, что 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 голосов
/ 18 декабря 2010

Поскольку вы не вызываете KeyPad.ToString (), вы вызываете DialogResult.ToString ().ShowDialog () возвращает DialogResult.

2 голосов
/ 18 декабря 2010

ShowDialog возвращает DialogResult, а не ссылку на форму.

Попробуйте изменить на

String total;

if (keypad.ShowDialog() == DialogResult.OK)
{
    total = keypad.ToString(); 
}
2 голосов
/ 18 декабря 2010

Метод, который вы вызываете ShowDialog(), фактически отображает диалоговое окно

Я думаю, что вы хотите сделать

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