2017-12-07 6 views
0

Code läuft auf Haupt-Thread. -Code ist:Das Setzen eines TextBox-Texts auf "" oder String.Empty wird nicht in der GUI angezeigt. Muss ich ein GUI-Update erzwingen?

OutputBox.Text = String.Empty; //have tried "" 
var auto = new AutoGram(PrefixBox.Text, (int)SeedNum.Value, 
    CharsBox.Text.ToCharArray(), SuffixBox.Text); //Just something for my program. 
OutputBox.Text = auto.Execute(); //Again shouldn't be relevant. 

Dieser Code läuft auf Klick auf eine Schaltfläche "Ausführen". Ich möchte, dass die Ausgabebox beim Klicken auf diese Schaltfläche gelöscht und dann ausgefüllt wird, wenn der Code ausgeführt wird. Ich habe überall Haltepunkte platziert und die Texteinstellung wird in Visual Studio bearbeitet angezeigt, aber nicht in der GUI der Anwendung. Vielen Dank.

+0

'string.Empty ==" "' –

+0

also was hast du oder erwartest du zu sehen ..? Ich würde vorschlagen, dass Sie in der Refresher Online-Tutorial 'C# Basics Tutorial' nachlesen. – MethodMan

Antwort

1

Ein paar Dinge zu beachten:

  1. wenn auto.Execute() ‚für immer‘ nimmt, zu vervollständigen, dann können Sie eine Application.DoEvents() Erklärung haben wollen, nachdem Sie das Ausgabefach Text string.Empty gesetzt das zu ermöglichen, OS eine Möglichkeit, die GUI zu aktualisieren, während der Code ausgeführt wird. Sie können auch in Erwägung ziehen, die Funktion in einem backgroundWorker auszuführen.

  2. Setzen Sie den Rückgabewert von auto.Execute() auf eine Zeichenfolgevariable, und fügen Sie dann einen Haltepunkt ein, wenn Sie der Ausgabevariablen die Zeichenfolgenvariable zuweisen, um die zurückgegebene Zeichenfolge auszuwerten. Es gibt Sequenzen, die existieren können, die dazu führen, dass die Zeichenfolge nicht angezeigt wird. Ein Beispiel wäre "\0whatever"

Zum Beispiel sein:

string foo = "whatever"; 
string bar = "\0whatever"; 
OutputBox.Text = foo; \\\\ displays whatever 
OutputBox.Text = bar; \\\\ displays nothing. 

Dies liegt daran, \0 wird als Ende des Strings interpretiert wird.

2

Sie weisen der Ausgabe eine leere Zeichenfolge zu und überschreiben sofort die leere Zeichenfolge, indem Sie auto.Execute() verwenden.

Ein alternativer Ansatz wäre, zwei Schaltflächen zu haben, eine zum Löschen aller Felder und eine zum Ausführen der Methode.

string output = "foo"; 

private void btnRun_Click(object sender, EventArgs e) 
{ 
    textBox1.Text = output; 
} 

private void btnClear_Click(object sender, EventArgs e) 
{ 
    textBox1.Text = ""; 
} 
+0

Ich dachte, dass das auch der Fall sein könnte, aber auto.Execute() dauert ewig, um zu vervollständigen, und in dem Breakpoint, wo der outputbox.text ist "" , die GUI wurde nicht aktualisiert. – MinimumEntropy

+0

"Auto" sollte auch eine Zeichenfolge sein. Mit var lässt der Compiler den Typ ableiten. Sie sollten die Ganzzahlen und Arrays in Zeichenfolgen konvertieren, da für die Eigenschaft .Text eine Zeichenfolge übergeben werden muss. – SLK

Verwandte Themen