2

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

4 に答える 4

7

メソッドはフォームのインスタンスではなく列挙値をShowDialog()返すためです。この関数によって返される列挙値に対して呼び出されます。System.Windows.Forms.DialogResultToString()

keypad次のようなことを試すことができます (適切に が返されると仮定しますDialogResult.OK)。

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

    if (keypad.ShowDialog() == DialogResult.OK)
    {
        String total = keypad.ToString();
    }
}
于 2010-12-17T22:05:27.697 に答える
3

KeyPad.ToString() を呼び出していないため、DialogResult.ToString() を呼び出しています。ShowDialog() は DialogResult を返します。

于 2010-12-17T22:05:17.490 に答える
2

呼び出しているメソッドは、ShowDialog()実際にダイアログを表示します

あなたがやりたいことは

keypad.ShowDialog();
String total = keypad.ToString();
于 2010-12-17T22:07:14.483 に答える
2

ShowDialog は、フォームへの参照ではなく、DialogResult を返します。

に変更してみてください

String total;

if (keypad.ShowDialog() == DialogResult.OK)
{
    total = keypad.ToString(); 
}
于 2010-12-17T22:09:30.097 に答える