2016-04-17 11 views
2

Also ich versuche, eine Methode von einem Timer auszuführen das Problem ist, dass jedes Mal ich die Methode aufrufen und eine Zeichenfolge als Argument übergeben, automatisch die Zeichenfolge auf NULL gesetzt und das ist seltsam, gibt es eine Lösung oder etwas, hier ist ein Code, wenn Sie wünschen, betrachten esTimer keine Kontrolle Textbox Daten

private void timer1_Tick(object sender, EventArgs e) 
    { 
     int currentHour = FixTime(DateTime.Now.ToString("hh tt")); 
     int currentMinute = FixTime(DateTime.Now.ToString("mm tt")); 
     int currentSeconds = FixTime(DateTime.Now.ToString("ss tt")); 
     string currentTT = DateTime.Now.ToString("tt"); 

     int userHour = Settings.Default.hour; 
     int userMinute = Settings.Default.minutes; 
     int userSeconds = Settings.Default.seconds; 
     string userTT = Settings.Default.TT; 

     if (currentHour == userHour && currentMinute == userMinute && 
      currentSeconds == userSeconds && currentTT == userTT) 
     { 
      MakeThePost(postTextBox.Text); // the postTextBox.Text field automatically is set to null 
     } 
    } 

    private void MakeThePost(string data) 
    { 
     string text = data; 
     if (!String.IsNullOrEmpty(text)) 
     { 
      fb.Post("me/feed", new { message = text }); 
     } 
     else 
      MessageBox.Show("Nothing to post on facebook", "Field is empty",MessageBoxButtons.OK, MessageBoxIcon.Error); 
    } 

UPDATE: So aparently das Problem ist nicht in den Timer oder sogar im MakeThePost das eigentliche Problem ist in einer anderen Form iam angezeigt werden versuchen, Wenn es angezeigt wird, erstellt der Konstruktor ein neues Form1-Objekt, warum mache ich das ?, weil ich Zugriff auf die Steuerelemente im Hauptformular haben möchte, aber wenn ich den Form1-Konstruktor ausführen, um ein neues Objekt zu erstellen, das Form1 postTextBox-Steuerelement beendet das Aktualisieren seiner Text-Eigenschaft, gibt es also eine andere Möglichkeit, auf Hauptformularsteuerelemente zuzugreifen, ohne ein Objekt zu initialisieren?

+0

Was passiert in 'MakeThePost()' Methode? Und was ist der Wert von 'postTextBox.Text', wenn es in die Funktion übergeben wird? (das spätere kann mit einem Breakpoint verifiziert werden) – heltonbiker

+0

Welche 'Timer'-Klasse benutzen Sie genau? –

+0

@heltonbiker Der Wert wird vom Benutzer generiert und ich fülle immer mit Text, bevor es dorthin kommt, aber es wird automatisch auf Null gesetzt, wenn es den Timer erreicht, und das macht die MakeThePost() Methode: private void MakeThePost (string data) { string text = data; if (! String.IsNullOrEmpty (text)) { fb.Post ("ich/feed", neu {message = text}); } } – edo

Antwort

0

Der veröffentlichte Code scheint nichts zu enthalten, was dazu führen würde, dass die postTextBox.Text-Eigenschaft null wird.

Es muss noch etwas in Ihrer Anwendung geben, das diese Eigenschaft zunichte macht. Stellen Sie sicher, dass die Datenbindung nicht automatisch auf null gesetzt wird.

Fügen Sie Haltepunkte sowohl in der Zeile MakeThePost als auch in der ersten Zeile MakeThePost ein. Führen Sie dann die Anwendung aus.

Sehen Sie, ob die Eigenschaft null nur vor dem Aufruf oder vor und innerhalb der Methode ist.

EDIT:

Nach Ihren letzten Änderungen, wie es scheint Sie eine neue Form1 Instanz erstellen, während Sie wahrscheinlich einen Verweis auf die bestehenden passieren soll, wenn der Instanziierung Form2

hinzufügen Form2 Konstruktor, nimmt ein Form1 Objekt als Parameter:

public partial class Form2 : Form 
{ 
    private Form1 otherForm; 
    public Form2() 
    { 
     InitializeComponent(); 
    } 

    public Form2(Form1 frm) : this() 
    { 
     otherForm = frm; 
    } 

    //Other methods and properties of Form2 
} 

Dann eine neue Instanz von Form2 erstellen:

Form2 secondForm = new Form2(form1Instance); 

nun innerhalb der Form2 Beispiel haben Sie die otherForm Referenz, die Sie mit den öffentlichen Mitglieder der Form1 Instanz anrufen können. Möglicherweise müssen Sie den Zugriffsmodifizierer für einige Form1-Mitglieder ändern, um sie öffentlich zu machen.

+0

Ich habe mit Haltepunkt viel Zeit überprüft, das Problem ist in den Timer, ich habe versucht, die postTextBox.Text, in einem Button klicken Ereignis und es funktioniert ausgezeichnet, das Problem ist auf den Timer gibt es etwas falsch daran, es ist wie es nicht die Steuerelemente Text, Daten möglicherweise der Timer läuft in einem anderen Thread ich weiß nicht, ich habe sogar versucht mit Console.WriteLine (postTextBox.Text) und nichts wird gedruckt, aber außerhalb wird es gedruckt, und es sollte etwas gedruckt werden weil es in Echtzeit ist, also jedes Mal, wenn ich etwas in den Textkasten schreibe, sollte es gedruckt werden: /. – edo

+0

Alles, was ich Ihnen jetzt anbieten kann, ist, dass Sie Ihre komplette VS-Lösung (gezippt) an einen Dateifreigabedienst senden, und ich werde morgen einen Blick darauf werfen können. Ich werde jetzt ein paar Z machen. Prost. –

+0

Ich möchte nicht alle meine Arbeit geben, ich werde es nur Ihnen geben, und wenn Sie eine Lösung finden, bitte posten Sie es hier. : { – edo

Verwandte Themen