C #: Pourquoi ne pas ShowDialog () ToString () le rendement attendu String.?
-
11-10-2019 - |
Question
labelTotal détient la valeur de la classe clavier (C # WinForms). ToString a été overriden pour revenir 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();
}
...
Pourquoi ne pas keypad.ShowDialog () ToString (). Retour 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();
...
La solution
Parce que la méthode ShowDialog()
renvoie un System.Windows.Forms.DialogResult
ENUM valeur, et non l'instance de votre formulaire. ToString()
sera appelée sur la valeur ENUM retournée par cette fonction.
Vous pouvez essayer quelque chose comme ce qui suit (en supposant que keypad
retourne correctement DialogResult.OK
):
private void buttonStartDepth_Click(object sender, EventArgs e)
{
Keypad keypad = new Keypad();
if (keypad.ShowDialog() == DialogResult.OK)
{
String total = keypad.ToString();
}
}
Autres conseils
Parce que vous n'êtes pas appeler KeyPad.ToString () que vous appelez DialogResult.ToString (). ShowDialog () retourne un DialogResult.
La méthode que vous appelez ShowDialog()
affiche réellement la boîte de dialogue
Je pense que ce que vous voulez faire est
keypad.ShowDialog();
String total = keypad.ToString();
ShowDialog renvoie un DialogResult, pas de référence à la forme.
Essayez de changer
String total;
if (keypad.ShowDialog() == DialogResult.OK)
{
total = keypad.ToString();
}